canvas 實現簡單的粒子運動效果

2022-08-27 20:06:13 字數 2889 閱讀 4175

1.初始化畫布

2.再自定義建立80個圓點(數量可自定義),然後初始化

3.然後實現是在一定距離範圍內的圓點兩兩相連,並且運動起來

4.然後實現滑鼠移進出現圓點與裡面的圓點能相連

1.初始化畫布

//

初始化畫布

let ele = document.getelementbyid('my_canvas');

ele.width =ele.offsetwidth;

ele.height =ele.offsetheight;

let ctx = ele.getcontext('2d');

2.建立圓與連線(使用建構函式,封裝所有的方法與屬性)

function

random(min,max)

//建立圓(構造器函式)

function

circle(x,y)

//畫圓

this.drawcircle=function

(ctx),$,$,.6)`

ctx.arc(

this.x,this.y,this.radius,0,360);

ctx.fill();

}//畫連線

this.drawline=function

(ctx,_circle) }}

3. 建立80個點,將其初始化,放進陣列儲存,以便移動是可以利用(初始化之後,要呼叫draw方法繪製畫面)

// 建立圓點集合陣列

let circles=;

let circlecount=80;

// 初始化circlecount個圓

function init()}}

5.實現圓點的自由運動

上面的**,是靜態的畫面(預設draw方法只執行一次),所以只能我們通過手動點選重新整理來改變位置

若想自動更新,可以通過計時器主要是採用requestanimationframe來代替

setinterval

下面的這段**(適用於不同瀏覽器,解決了一些瀏覽器沒有

requestanimationframe這個方法

1  window.requestanimationframe =window.requestanimationframe 

2 ||window.mozrequestanimationframe

3 ||window.webkitrequestanimationframe

4 ||window.msrequestanimationframe

5 || function

(callback);

從上面的**,我們可以引申出乙個名詞,叫做墊片(polyfill)->適配不同的瀏覽器缺少某個方法的一段演算法 這段**的作用就是解決一些瀏覽器沒有requestanimationframe這個方法,

像這樣的一段演算法,或者說**,是有名詞來稱呼它的叫做 墊片(polyfill)

該如何使用這個

requestanimationframe

呢??(注:紅字為使用方法)

function

draw()

}requestanimationframe(draw);

}

6. 實現上面例子中用滑鼠移進的效果

構造出滑鼠實時位置畫圓點的函式

function currentcircle(x,y)

}

注:其中的circle.call(this,x,y)的**call的第乙個引數中是this,由於我們使用

let currentpoint=

new currentcircle(0,0)

所以this繫結在currentpoint這個物件身上,假設沒有new這個關鍵字,那麼1這個this指向的就是window(在非嚴格模式下)。

call 是能夠改變this指向,表示了this的值從乙個環境傳到另乙個環境。而將乙個物件作為call的第乙個引數,則this將繫結這個物件,也就是currentcircle;其他引數為傳參。

因此,我們可以理解成把circle函式的所有方法和屬性,用到的this都是 

currentcircle的方法和屬性。

例子

var a=7;

var obj=

function test()

test() // 結果 7

test.call(obj) // 結果4

獲取滑鼠實時的位置

**如下:

//

初始化滑鼠的位置 (這個是物件)

let currentpoint=new currentcircle(0,0);

//滑鼠移進

window.onmousemove= function

(event)

//滑鼠移出

window.onmouseout = function

()

draw繪製出滑鼠的效果

function

draw()

}// 表示如果滑鼠的位置不為null,就會執行下面的操作

if(currentpoint.x)

}requestanimationframe(draw);

}

1

2310

1125

26146

147

view code

炒雞簡單的canvas粒子

要說canvas中最精妙的地方,那應該就是對畫素操作的能力了,可能這也就是為什麼作為點陣圖的canvas一直不會被svg比下去的原因了。俗話說,須彌芥子,是大小之說,也有以小見大之說,顆顆粒子,足以構建巨集大效果。這是一篇炒雞簡單的canvas粒子教程,主要是講如何粒子特效的原理,一點運動中的公式。...

關於canvas粒子特效實現分析

個人小站點 1.關於canvas教程可以看了解關於畫線和圓形的相關步驟就行 2.canvas粒子特效要實現的效果 當滑鼠移動時,在滑鼠周圍產生特定的粒子並連線,向四周移動,達到一定條件消失。參考了知乎登入首頁 canvas 粒子動態效果,可配置和乙個少女心滿滿的例子帶你入門 canvas 關於動畫是...

粒子系統的簡單實現

粒子系統說起來高深摸測,其實就是許多許多許多許多許多許多的點圖象,然後對其進行執行速度,方向,衰減的處理。不可少的,先定義一些全域性變數。const intmaxpoint 1000 粒子的個數 float slowdown 2.0f float xspeed 粒子的速度,這裡沒有給出。可以自己加 ...