JavaScript實(shí)現(xiàn)鼠標(biāo)移動(dòng)粒子跟隨效果
本文實(shí)例為大家分享了JavaScript實(shí)現(xiàn)鼠標(biāo)移動(dòng)粒子跟隨效果的具體代碼,供大家參考,具體內(nèi)容如下
※ 如上圖是最終顯示效果,跟隨鼠標(biāo)的移動(dòng),生成的粒子跟隨。
需要用到的js庫(kù):Underscore。Underscore是一個(gè)JavaScript實(shí)用庫(kù),提供了一整套函數(shù)式編程的實(shí)用功能,但是沒(méi)有擴(kuò)展任何JavaScript內(nèi)置對(duì)象。它是這個(gè)問(wèn)題的答案:“如果我在一個(gè)空白的HTML頁(yè)面前坐下,并希望立即開(kāi)始工作,我需要什么?”...它彌補(bǔ)了部分jQuery沒(méi)有實(shí)現(xiàn)的功能,同時(shí)又是Backbone.js必不可少的部分。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>鼠標(biāo)粒子demo</title> <style> canvas { background: #333; } </style> </head> <body> <canvas width="800" height="500">您的瀏覽器不支持此標(biāo)簽!</canvas> <script src="js/underscore.min.js"></script> <script> // 獲取canvas元素 var cvs = document.querySelector("canvas"); // 獲取上下文對(duì)象 var ctx = cvs.getContext("2d"); // 聲明一個(gè)空數(shù)組,用來(lái)放后面生成的小球 var ballsArr = []; // 創(chuàng)建一個(gè)小球類(lèi) function Balls (x, y){ // 坐標(biāo)x為傳進(jìn)來(lái)的x this.x = x; // 坐標(biāo)y為傳進(jìn)來(lái)的y this.y = y; // 生成的小球半徑為5到10中的任一整數(shù)(參數(shù)隨便) this.r = _.random(5, 10); // 生成的小球的顏色為這七種顏色中的隨機(jī)一種(參數(shù)隨便) this.c = _.sample(["red", "orange", "yellow", "green", "cyan", "blue", "white"]); // 小球坐標(biāo)x的增量為-4到4之間的整數(shù)(參數(shù)隨便) this.dx = _.random(-4, 4); // 小球坐標(biāo)y的增量為-4到4之間的整數(shù)(參數(shù)隨便) this.dy = _.random(-4, 4); // 把生成的小球存入數(shù)組ballsArr ballsArr.push(this); } // 給所有Balls綁定一個(gè)方法update,目的是為了每次都能按照隨機(jī)方向移動(dòng) Balls.prototype.update = function (){ // 每次x坐標(biāo)加上增量dx this.x += this.dx; // 每次y坐標(biāo)加上增量dy this.y += this.dy; // 每次半徑縮小0.5(參數(shù)隨便) this.r -= 0.5; // 半徑小于等于0的話,就從小球數(shù)組中移出 if(this.r <= 0){ _.without(ballsArr, this); } } // 給所有Balls綁定一個(gè)方法render,目的是畫(huà)圓。 Balls.prototype.render = function (){ // 半徑小于等于0就沒(méi)必要畫(huà)了 if(this.r <= 0){ return; } // 開(kāi)始繪制 ctx.beginPath(); // 繪制圓形,(圓心坐標(biāo)x,圓心坐標(biāo)y, 起始弧度,終止弧度,[順逆時(shí)針]) ctx.arc(this.x, this.y, this.r, 0, 2*Math.PI); // 顏色為數(shù)組中隨機(jī)的一個(gè) ctx.fillStyle = this.c; // 畫(huà)上畫(huà)布 ctx.fill(); // 終止繪制 ctx.closePath(); } // onmousemove事件監(jiān)聽(tīng) cvs.onmousemove = function (){ // 在當(dāng)前鼠標(biāo)的位置,生成倆球,然后只要鼠標(biāo)移動(dòng)就一直生成小球,每次兩個(gè) new Balls(event.offsetX, event.offsetY); new Balls(event.offsetX, event.offsetY); } // setInterval 模擬25FPS的幀率 setInterval(function (){ // 因?yàn)閏anvas上屏即像素化,所以先清屏 ctx.clearRect(0, 0, cvs.width, cvs.height); // _.each方法是針對(duì)每一個(gè)前面的元素,都運(yùn)行后面的方法 _.each(ballsArr, function (value){ value.update(); value.render(); }); }, 40); </script> </body> </html>
里面用到的underscore中的幾個(gè)方法,可以到 doc/underscore/ 中去查看具體的解釋。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- js canvas實(shí)現(xiàn)隨機(jī)粒子特效
- js實(shí)現(xiàn)三角形粒子運(yùn)動(dòng)
- js實(shí)現(xiàn)3D粒子酷炫動(dòng)態(tài)旋轉(zhuǎn)特效
- JavaScript動(dòng)畫(huà)實(shí)例之粒子文本的實(shí)現(xiàn)方法詳解
- JS實(shí)現(xiàn)躲避粒子小游戲
- javascript Canvas動(dòng)態(tài)粒子連線
- 基于three.js實(shí)現(xiàn)的3D粒子動(dòng)效實(shí)例代碼
- 原生JS+HTML5實(shí)現(xiàn)跟隨鼠標(biāo)一起流動(dòng)的粒子動(dòng)畫(huà)效果
- 使用3D引擎threeJS實(shí)現(xiàn)星空粒子移動(dòng)效果
- ThingJS粒子特效一鍵實(shí)現(xiàn)雨雪效果
相關(guān)文章
詳解Spring Boot使用系統(tǒng)參數(shù)表提升系統(tǒng)的靈活性
Spring Boot項(xiàng)目中常有一些相對(duì)穩(wěn)定的參數(shù)設(shè)置項(xiàng),其作用范圍是系統(tǒng)級(jí)的或模塊級(jí)的,這些參數(shù)稱(chēng)為系統(tǒng)參數(shù)。這些變量以參數(shù)形式進(jìn)行配置,從而提高變動(dòng)和擴(kuò)展的靈活性,保持代碼的穩(wěn)定性2021-06-06mybatis-plus指定字段模糊查詢的實(shí)現(xiàn)方法
最近項(xiàng)目中使用springboot+mybatis-plus來(lái)實(shí)現(xiàn),所以下面這篇文章主要給大家介紹了關(guān)于mybatis-plus實(shí)現(xiàn)指定字段模糊查詢的相關(guān)資料,需要的朋友可以參考下2022-04-04基于javassist進(jìn)行動(dòng)態(tài)編程過(guò)程解析
這篇文章主要介紹了基于javassist進(jìn)行動(dòng)態(tài)編程過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05Java旋轉(zhuǎn)數(shù)組中最小數(shù)字具體實(shí)現(xiàn)(圖文詳解版)
這篇文章主要給大家介紹了關(guān)于Java旋轉(zhuǎn)數(shù)組中最小數(shù)字具體實(shí)現(xiàn)的相關(guān)資料,旋轉(zhuǎn)數(shù)組,說(shuō)明數(shù)據(jù)不變,只是改變位置,文中通過(guò)代碼示例介紹的非常詳細(xì),需要的朋友可以參考下2023-08-08java實(shí)現(xiàn)的新浪微博分享代碼實(shí)例
這篇文章主要介紹了java實(shí)現(xiàn)的新浪微博分享代碼實(shí)例,是通過(guò)新浪API獲得授權(quán),然后接受客戶端請(qǐng)求的數(shù)據(jù),第三方應(yīng)用發(fā)送請(qǐng)求消息到微博,喚起微博分享界面,非常的實(shí)用,有相同需要的小伙伴可以參考下。2015-03-03java中rss解析器(rome.jar和jdom.jar)示例
這篇文章主要介紹了java中rss解析器(rome.jar和jdom.jar)示例,需要的朋友可以參考下2014-03-03微信小程序調(diào)用微信登陸獲取openid及java做為服務(wù)端示例
這篇文章主要介紹了微信小程序調(diào)用微信登陸獲取openid及java做為服務(wù)端示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01java如何實(shí)現(xiàn)多線程的順序執(zhí)行
多線程是java的一種重要技術(shù),但是多線程的運(yùn)行是沒(méi)有絕對(duì)的順序的,那么java如何實(shí)現(xiàn)多線程的順序執(zhí)行,下面就一起來(lái)了解一下2021-05-05