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
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...