一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務(wù)器之家 - 編程語(yǔ)言 - JavaScript - js教程 - html+css+js實(shí)現(xiàn)canvas跟隨鼠標(biāo)的小圓特效源碼

html+css+js實(shí)現(xiàn)canvas跟隨鼠標(biāo)的小圓特效源碼

2022-02-17 19:37北極光之夜。 js教程

這篇文章主要介紹了html+css+js實(shí)現(xiàn)canvas跟隨鼠標(biāo)的小圓特效源碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

效果(源碼在最后):

html+css+js實(shí)現(xiàn)canvas跟隨鼠標(biāo)的小圓特效源碼

實(shí)現(xiàn):

1.定義標(biāo)簽:

?
1
2
3
4
<h1>北極光之夜</h1>
<canvas id="draw" style=" position: fixed; display: block;"
           當(dāng)前瀏覽器不支持Canvas,請(qǐng)更換瀏覽器后再試
</canvas>

2. 文字的基本樣式:

?
1
2
3
4
5
6
7
8
9
h1{
   position: absolute;
   top: 50%;
   left: 50%;
   transform: translate(-50%,-50%);
   font-size: 5em;
   font-family: 'fangsong';
   color: rgb(38, 205, 247);
  }

top: 50%;
left: 50%;
transform: translate(-50%,-50%); 居中對(duì)齊
3. js部分,詳細(xì)看注釋 :

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
<script>
  /* 首先獲取canvas畫布 */
  var canvas = document.querySelector("#draw");
  var yuan = canvas.getContext("2d"); 
  /* 綁定窗口大小發(fā)生改變事件,讓canvas隨時(shí)鋪滿瀏覽器可視區(qū) */
   window.onresize=resizeCanvas;
  function resizeCanvas(){
   canvas.width=window.innerWidth;
   canvas.height=window.innerHeight;
  }
  resizeCanvas();
 
  /* 定義數(shù)組,存下面觸發(fā)移動(dòng)事件時(shí)產(chǎn)生的小圓 */
  var arr = [];
  
  /* 繪制小圓形的方法,x與y是初始位置,r是圓半徑 */
  function circle (x,y,r){
   this.x=x;
   this.y=y;
   this.r=r;
   /* 得一個(gè)隨機(jī)顏色 */
   this.color = `rgb(${255*Math.random()},${255*Math.random()},${255*Math.random()})`
   /* 圓的移動(dòng)方向,random函數(shù)為隨機(jī)返回一個(gè)0.0到1.0的數(shù),x可得隨機(jī)正負(fù)數(shù),y為隨機(jī)正數(shù) */
   this.xZou = parseInt(Math.random()*10-5);
   this.yZou = parseInt(Math.random()*10); 
   /* 向arr數(shù)組末尾添加這個(gè)元素 */
   arr.push(this);
  }
 
  /* 更新圓形的方法 */
   circle.prototype.updated = function() {
    /* x和y增加,呈現(xiàn)圓形一直走 */
   this.x = this.x + this.xZou ;
   this.y = this.y + this.yZou ;
   /* 半徑慢慢減少 */
   this.r = this.r - 0.1 ;
   /* 當(dāng)半徑小于1清除這個(gè)圓 */
   if(this.r<0){
    this.remove();
   }
   }
   /* 刪除小圓的函數(shù) */
   circle.prototype.remove = function (){
    /* 遍歷數(shù)組,找到和調(diào)用這個(gè)函數(shù)相同的圓后用splice函數(shù)刪除 */
   for(let i=0;i<arr.length;i++){
     if(this==arr[i])
     {
      arr.splice(i,1);
     }
   }
  }
   /* 渲染小圓 */
   circle.prototype.render = function(){
 
   yuan.beginPath();
   yuan.arc(this.x,this.y,this.r,0,2*3.14,false);
   yuan.fillStyle = this.color;
   yuan.fill();
   }
   /* 給畫布綁定鼠標(biāo)經(jīng)過(guò)事件 */
   canvas.addEventListener('mousemove',function(e){
    /* 傳入x,y,r。offsetX距離左側(cè)距離,.., */
   new circle(e.offsetX,e.offsetY,Math.random()*15);
   })
 
    /* 定時(shí)器渲染小圓,開始動(dòng)畫 ,30毫秒一次 */
   setInterval(function(){
     /* 清屏 */
    yuan.clearRect(0,0,canvas.width,canvas.height);
    /* 循環(huán)數(shù)組,給每個(gè)小圓更新和渲染 */
    for(let i=0;i<arr.length;i++){
     /* 更新 */
     arr[i].updated();
     /* 如果瀏覽器支持,則渲染 */
     if(arr[i].render()){
      arr[i].render();
     }
     
    }
 
   },30)
 
 </script>

canvas鏈接
splice()方法鏈接
random()方法鏈接
push()方法鏈接
resize事件鏈接

完整源碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
<!DOCTYPE html>
<html lang="zh-CN">
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <title>Document</title>
 <style>
  *{
   margin: 0;
   padding: 0;
   box-sizing: border-box;
  }
  
  body{
   background-color: rgb(72, 75, 122);
  }
  
  h1{
   position: absolute;
   top: 50%;
   left: 50%;
   transform: translate(-50%,-50%);
   font-size: 5em;
   font-family: 'fangsong';
   color: rgb(38, 205, 247);
  }
  
 </style>
</head>
<body>
 
  <h1>北極光之夜</h1>
 
 <canvas id="draw" style=" position: fixed; display: block;"
            當(dāng)前瀏覽器不支持Canvas,請(qǐng)更換瀏覽器后再試
 </canvas>
 
 <script>
  /* 首先獲取canvas畫布 */
  var canvas = document.querySelector("#draw");
  var yuan = canvas.getContext("2d"); 
  /* 綁定窗口大小發(fā)生改變事件,讓canvas隨時(shí)鋪滿瀏覽器可視區(qū) */
   window.onresize=resizeCanvas;
  function resizeCanvas(){
   canvas.width=window.innerWidth;
   canvas.height=window.innerHeight;
  }
  resizeCanvas();
 
  /* 定義數(shù)組,存下面觸發(fā)移動(dòng)事件時(shí)產(chǎn)生的小圓 */
  var arr = [];
  
  /* 繪制小圓形的方法,x與y是初始位置,r是圓半徑 */
  function circle (x,y,r){
   this.x=x;
   this.y=y;
   this.r=r;
   /* 得一個(gè)隨機(jī)顏色 */
   this.color = `rgb(${255*Math.random()},${255*Math.random()},${255*Math.random()})`
   /* 圓的移動(dòng)方向,random函數(shù)為隨機(jī)返回一個(gè)0.0到1.0的數(shù),x可得隨機(jī)正負(fù)數(shù),y為隨機(jī)正數(shù) */
   this.xZou = parseInt(Math.random()*10-5);
   this.yZou = parseInt(Math.random()*10); 
   /* 向arr數(shù)組末尾添加這個(gè)元素 */
   arr.push(this);
  }
 
  /* 更新圓形的方法 */
   circle.prototype.updated = function() {
    /* x和y增加,呈現(xiàn)圓形一直走 */
   this.x = this.x + this.xZou ;
   this.y = this.y + this.yZou ;
   /* 半徑慢慢減少 */
   this.r = this.r - 0.1 ;
   /* 當(dāng)半徑小于1清除這個(gè)圓 */
   if(this.r<0){
    this.remove();
   }
   }
   /* 刪除小圓的函數(shù) */
   circle.prototype.remove = function (){
    /* 遍歷數(shù)組,找到和調(diào)用這個(gè)函數(shù)相同的圓后用splice函數(shù)刪除 */
   for(let i=0;i<arr.length;i++){
     if(this==arr[i])
     {
      arr.splice(i,1);
     }
   }
  }
   /* 渲染小圓 */
   circle.prototype.render = function(){
 
   yuan.beginPath();
   yuan.arc(this.x,this.y,this.r,0,2*3.14,false);
   yuan.fillStyle = this.color;
   yuan.fill();
   }
   /* 給畫布綁定鼠標(biāo)經(jīng)過(guò)事件 */
   canvas.addEventListener('mousemove',function(e){
    /* 傳入x,y,r。offsetX距離左側(cè)距離,.., */
   new circle(e.offsetX,e.offsetY,Math.random()*15);
   })
 
    /* 定時(shí)器渲染小圓,開始動(dòng)畫 ,30毫秒一次 */
   setInterval(function(){
     /* 清屏 */
    yuan.clearRect(0,0,canvas.width,canvas.height);
    /* 循環(huán)數(shù)組,給每個(gè)小圓更新和渲染 */
    for(let i=0;i<arr.length;i++){
     /* 更新 */
     arr[i].updated();
     /* 如果瀏覽器支持,則渲染 */
     if(arr[i].render()){
      arr[i].render();
     }
     
    }
 
   },30)
 
 </script>
</body>
</html>

其它:

今日三省吾身:安逸的生活沒意思,充滿挑戰(zhàn),取得勝利,才是生命真諦。

到此這篇關(guān)于html+css+js實(shí)現(xiàn)canvas跟隨鼠標(biāo)的小圓特效源碼的文章就介紹到這了,更多相關(guān)canvas跟隨鼠標(biāo)的小圓內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://blog.csdn.net/luo1831251387/article/details/114714705

延伸 · 閱讀

精彩推薦
  • js教程原生JavaScript實(shí)現(xiàn)進(jìn)度條

    原生JavaScript實(shí)現(xiàn)進(jìn)度條

    這篇文章主要為大家詳細(xì)介紹了原生JavaScript實(shí)現(xiàn)進(jìn)度條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下...

    weixin_441349725612022-01-21
  • js教程JavaScript中arguments的使用方法詳解

    JavaScript中arguments的使用方法詳解

    這篇文章主要給大家介紹了關(guān)于JavaScript中arguments的使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的...

    等待的L先生3732021-12-15
  • js教程js實(shí)現(xiàn)碰撞檢測(cè)

    js實(shí)現(xiàn)碰撞檢測(cè)

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)碰撞檢測(cè),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下...

    搬磚大法8192022-01-11
  • js教程JavaScript 實(shí)現(xiàn)繼承的幾種方式

    JavaScript 實(shí)現(xiàn)繼承的幾種方式

    這篇文章主要介紹了JavaScript 實(shí)現(xiàn)繼承的幾種方式,幫助大家更好的理解和使用JavaScript,感興趣的朋友可以了解下...

    him89822022-01-21
  • js教程選擇 JavaScript 測(cè)試框架的標(biāo)準(zhǔn)

    選擇 JavaScript 測(cè)試框架的標(biāo)準(zhǔn)

    由于 JavaScript 被廣泛認(rèn)為是“web語(yǔ)言”,因此該語(yǔ)言的測(cè)試自動(dòng)化框架是最豐富和最受歡迎的也就不足為奇了。通過(guò)考慮不同框架的屬性,你將更加清楚哪...

    粵嵌教育6962022-01-07
  • js教程7道關(guān)于JS this的面試題,你能答對(duì)幾個(gè)

    7道關(guān)于JS this的面試題,你能答對(duì)幾個(gè)

    這篇文章主要給大家介紹了7道關(guān)于JS this的面試題,來(lái)看看你能答對(duì)幾個(gè),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)...

    前端小混混3512022-02-12
  • js教程JS中箭頭函數(shù)與this的寫法和理解

    JS中箭頭函數(shù)與this的寫法和理解

    這篇文章主要給大家介紹了關(guān)于JS中箭頭函數(shù)與this的寫法和理解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需...

    limingru10442021-12-31
  • js教程js面向?qū)ο蠓庋b級(jí)聯(lián)下拉菜單列表的實(shí)現(xiàn)步驟

    js面向?qū)ο蠓庋b級(jí)聯(lián)下拉菜單列表的實(shí)現(xiàn)步驟

    這篇文章主要介紹了js面向?qū)ο蠓庋b級(jí)聯(lián)下拉菜單列表的實(shí)現(xiàn)步驟,幫助大家更好的理解和使用JavaScript,感興趣的朋友可以了解下...

    蔣偉平8682022-01-19
主站蜘蛛池模板: 欧美一级视频在线高清观看 | 精品久久久麻豆国产精品 | 成年人免费观看的视频 | 亚洲精品国产成人99久久 | 国产福利在线观看91精品 | 亚洲精品一区在线观看 | 免费成年人在线视频 | 91东航翘臀女神在线播放 | 亚洲经典激情春色另类 | a一级毛片录像带 录像片 | 日本制服丝袜 | 我在厨房摸岳的乳HD在线观看 | 性关系视频免费网站在线观看 | 特级毛片免费观看视频 | 国产肥女bbwbbw | 青青热久免费精品视频网站 | 亚洲精品国产精品麻豆99 | 欧美成人影院免费观 | bl双性受乖调教改造身体 | 天美麻豆 | 国产一级片免费观看 | nhdta系列媚药系列 | 国产精品青青青高清在线观看 | 久草高清在线 | 美女扒开腿让男生捅 | 2015小明台湾永久区域免费 | 亚洲欧美午夜 | 欧美同性gayvidoes | 精品久久久久久综合网 | 丝袜护士强制脚足取精 | h高潮娇喘抽搐 | 午夜福利电影网站鲁片大全 | 俄罗斯一级淫片 | 日韩播放 | 大香焦在线| 韩国美女vip内部2020 | 我们日本在线观看免费动漫下载 | 超91精品手机国产在线 | 日本在线观看免费高清 | kkkk4444在线看片 | 99热久久这里只有精品6国产网 |