2017.11.24——學習筆記(一)【數字雨及數組分割知識】

来源:http://www.cnblogs.com/amazingcode/archive/2017/11/24/7891767.html
-Advertisement-
Play Games

【以下作品非原創,僅學慣用】 <style> html,body{ width: 100%;height: 100%;overflow: hidden; } </style></head><body> <canvas id="cav"></canvas> <script> var cav = doc ...


【以下作品非原創,僅學慣用】


<style>
  html,body{ width: 100%;height: 100%;overflow: hidden; }
</style>
</head>
<body>
  <canvas id="cav"></canvas>
<script>

var cav = document.getElementById('cav');
var ctx = cav.getContext('2d');
var W = window.innerWidth;
var H = window.innerHeight;
console.log(window.innerHeight);
console.log(document.body.clientWidth);
cav.width = W;
cav.height = H;
var fontsize = 16;
var columns = Math.ceil(W/fontsize);
var drops = [];
var texts = "0123456789".split("");//生成一個字元串數組texts = ["0","1","2","3","4",......]
for(var i=0;i<columns;i++){
  drops[i]=0;
  //drops[i]是數字雨墜落的總列數
  //直接給drops數組創建了columns個對象不過各個對象都是零.
  console.log(drops[i]);
}

function run(){
  ctx.fillStyle = 'rgba(0,0,0,0.05)';
  ctx.fillRect(0,0,W,H);
  ctx.fillStyle = "#0f0";
  ctx.font = fontsize + "px Arial";//設置字體大小和字體
  for(var i = 0;i<columns;i++){
    var text =[Math.floor(Math.random()*texts.length)];
    //text是要繪畫的數字
    //Math.random()返回介於0~1之間的一個隨機數
    ctx.fillText(text,i*fontsize,drops[i]*fontsize);
    if(drops[i]*fontsize>H||Math.random()>0.95){
    //如果即將超出屏幕或是字元的隨機數大於0.95,讓這個列消失.
      drops[i]=0;
    }
    drops[i]++; 
}

}
setInterval(run,30);

 

//1.設置畫布基礎設置
//2.讀取視窗寬高
//3.讓畫布寬高等於視窗寬高
//4.定義變數fontsize = 16;用途有2,1是用視窗寬度/fontsize來數字雨的列數.
//5.定義數組drops,這是數字雨的列.
//6.創建字元串數組texts,包含需要在畫布中繪畫出來的數字
//7.依照column的數值遍歷出數字雨的列數,塞進drops數組裡,讓列數們的初始值等於0;

//8.繪出底色,因為是用定時器不停地繪製出來,所以透明度調低,營造出跳出來的數字漸漸消失的景象(事實上是被每30毫秒繪出來的底色不停地覆蓋)
//8.5遍歷出drops[i]--這個數組裡,的每一個元素,都指索引所對應的那個列里,目前包含的數字的數目.
//9.用fontsize設置字體大小,設置字體.
//10.事實上每30毫秒每一列同時出現一個數字,所以又以列數遍歷生成每列一個隨機數字--text =[Math.floor(Math.random()*texts.length)];
//random的區間在0~1,texts.length=10,然後四捨五入變為整數,也就是會生成0~9的數字
//11.然後隨機找個坐標為(x = i*fontsize,y = drops[i]*fontsize)的位置畫出來.
//12.判定:1.如果drops[i].fontsize即將超出現有視窗的高度H,讓這個列的數目為0,它將從0*fontsize的位置重新繪製數字(也就是從頭開始嘛); 2.如果隨機數即將大於0.95(也就是會算出text=10),讓它如上述一樣從頭開始.

 

array.slice( start,end )--數組
  該方法是對數組進行部分截取,並返回一個數組副本
   start : 截取的開始數組索引
  end : 你要取得最後一個數組元素的索引加上1
  截到的數組的索引為: end-1
  *原數組不改變*
<script>
  var a = [1,2,3,4,5,6];
  var b = a.slice(3);//如果不傳入end,則會從start截到數組尾部
  var c = a.slice(2,4);//截到a[2]-a[3],
  console.log(c);

  var d = a.slice(-1);//輸出b = [a[5]];如果兩個參數任何一個是負數,array.length會和它們相加,試圖讓他們成為非負數.
  //當只傳入一個負數時,length會與參數相加,然後由此作為索引截取
  console.log(d)

  var e = a.slice(-6);
  //當只傳入一個參數,是負數時,並且參數絕大值大於數組length,會截取整個數組.因為參數+length會小於0嘛,索引小於0,就按0開始截羅
  console.log(e)

  var f = a.slice(-4,-1);
  //當傳入兩個其中有負的參數時,length也會先與負數相加後,再截取
  //一切都按照與length相加後剩餘的數做索引為準,end若為負相加之後還是要-1

  console.log(f)

  var g = b.slice(6);//當傳入一個參數,大於等於length時,返回一個空數組
  console.log(g)
</script>

string.slice( start,end )--字元串
  slice方法複製string的一部分來構造一個新的字元串,用法與參數均和數組的slice方法一樣,end參數等於你要取的最後一個字元的位置值加上1
  字元串中空格也占一個索引

<script>
{
var a = "once upon a time";
var b = a.slice(-12,-9);
console.log(b)
console.log(b.length)
}
</script>

array.splice( start, deleteCount, item )
  splice從array中移除一個或多個數組,並用新的item替換它們,參數start是從數組array中移除元素的開始位置,參數deleteCount是要移除的元素的個數,如果有額外的參數,那麼item會插入到被移出元素的位置上,它返回一個包含被移除元素的數組。

  原數組中不再包含被移除掉的元素

  d = 在c數組裡移除的c[2],c[3], 後面的item參數不會包在d數組裡,二是被插進了c數組裡原本c[2]的位置,item作用於被移除元素的原數組。
<script>
{
  var a = ['a','b','c',1,2,3];
  var b = a.splice(2,2);
  console.log(a)
  console.log(b)
  var c = ['a','b','c',1,2,3,{f:9}];
  var d = c.splice(2,2,function(){ var i=baby });
  console.log(c);
  console.log(d);

//d = 在c數組裡移除的c[2],c[3], 後面的item參數不會包在d數組裡,二是被插進了c數組裡原本c[2]的位置,item作用於被移除元素的原數組
}
</script>


string.split( separator,limit )----字元串
  split可以把這個string分割成片段來創建一個字元串數組.可選參數limit可以限制被分割的片段數量.separator可以是一個字元串或一個正則表達式.如果separator是一個空字元,會返回一個單字元的數組。
  split依照separator ,來尋找原字元串中的是否包含separator,以separator作為分隔符來分割字元串變為數組元素,字元串中作為separator的字元會消失。  
  一旦使用了split,返回的對象會自動變為一個數組。
  假如在原字元串中搜索不到separator,就會返回包含一整個字元串做一個元素的數組。

   當separator是一個空格時:" ",就會把一個句子分成一個個單詞。

<script>
{
  var a = "123456";
  var b = a.split("",3);
  console.log(a)
  console.log(b)
  var a = "1$2,3*4,5,6,function(){}";
  var c = a.split(",");
  console.log(c)
  var d = a.split(3);
  console.log(d)
  var e = "once upon a time , there's a little prince";
  var f = e.split(/\s+/);
  console.log(f)
}
</script>

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 說明: Angular2出來後,一直想找個基於Angular2的前端後臺管理框架,但一直沒有找到比較適合的。前段時間在Angular官網資源無意之間看到NG-ZORRO,NG-ZORRO由阿裡計算平臺事業部、阿裡雲等不同部門的一些小伙伴在原業務組件的基礎上共同構建而成,而且已開源,現在是0.6.0的 ...
  • CSS之BFC、IFC、FFC and GFC 什麼是FC? BFC(Block Formatting Contexts) BFC的佈局規則: 如何生成BFC: IFC(Inline Formatting Contexts) FFC(Flex Formatting Contexts) GFC(Gri ...
  • 1 ...
  • 閑來沒事,研究了一下多屏適配和響應式佈局的 CSS。 第一種寫法 第二種寫法 max-device-width 與 max-width 的區別 頁面示例 ...
  • 前言 上傳圖片是常見的需求,多使用input標簽。本文主要介紹 input標簽的樣式美化 和 實現圖片預覽。 用到的知識點有: 1、input標簽的使用 2、filelist對象 和 file對象 3、fileReader對象 樣式美化 原生的input標簽樣式單一,且在不同瀏覽器下的表現還不一致。 ...
  • 查看原文 ...
  • 查看原文 ...
  • 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>設計中文版式</title> 6 <style type="text/css"> 7 body{ /*頁面基本屬性*/ 8 backgrou ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...