国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

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

服務器之家 - 編程語言 - JavaScript - js教程 - JavaScript canvas實現雨滴特效

JavaScript canvas實現雨滴特效

2021-12-29 16:02huangdong1931 js教程

這篇文章主要為大家詳細介紹了JavaScript canvas實現雨滴特效,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了canvas實現雨滴特效的具體代碼,供大家參考,具體內容如下

一、雨滴特效需求

雨滴從窗口頂部隨機下落到達底部將呈現波紋逐漸散開變淡直到消失,雨滴特效隨窗口變化自適應

二、雨滴實現思路

1. 用面向對象的思維 首先創建canvas畫布 ,繪制一個雨滴的初始化形狀
2. 在給雨滴添加運動的方法
3. 通過定時器讓雨滴運動起來

三、具體分析

1.雨滴初始化需要的屬性有哪些?
坐標x,y 寬高w,h 。
2.雨滴下落是逐漸加速下落不是勻速需要給一個加速度的屬性,也就是y軸坐標不斷加上加速度的值
3.雨滴下落到底部某一個區域后開始呈現波紋逐漸散開,也就是到達底部某個范圍內開始畫圓,圓逐漸變大并且變淡加上透明度
4.雨滴下落拖尾效果需要繪制一層陰影覆蓋之前運動的雨滴

四、代碼

?
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
<!DOCTYPE html>
<html lang="en">
 
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <title>canvas</title>
 <style>
  * {
   margin: 0;
   padding: 0;
  }
 
  canvas {
   vertical-align: middle;
   background: #000;
  }
 </style>
</head>
 
<body>
 <canvas id="myCanvas"></canvas>
 <script>
  // 創建畫布
  let myCanvas = document.getElementById('myCanvas')
  let ctx = myCanvas.getContext('2d')
  // 自適應窗口
  let width = myCanvas.width = window.innerWidth
  let height = myCanvas.height = window.innerHeight
  window.addEventListener('resize', () => {
   width = myCanvas.width = window.innerWidth
   height = myCanvas.height = window.innerHeight
  })
  // 繪制雨滴
  let raindropArr = []
  function Raindrop(x, y, w, h, l, r, dr, maxR, a, va) {
   this.x = rand(0, window.innerWidth) // 雨滴的x軸
   this.y = y || 0 // 雨滴的y軸
   this.dy = rand(2, 4) // 雨滴的加速度
   this.w = w || 2 // 雨滴的寬度
   this.h = h || 10 // 雨滴的高度
   this.l = rand(0.8 * height, 0.9 * height) // 雨滴的下落高度
   this.r = r || 1 // 波紋半徑
   this.dr = dr || 1 // 波紋增加半徑
   this.maxR = maxR || 50 // 波紋最大半徑
   this.a = a || 1 // 波紋透明度
   this.va = 0.96 // 波紋透明度系數
  }
  Raindrop.prototype = {
   draw: function (index) { // 繪制雨滴
    if (this.y > this.l) {
     ctx.beginPath()
     ctx.arc(this.x, this.y, this.r, 0, Math.PI * 2)
     ctx.strokeStyle = `rgba(0,191,255,${this.a})`
     ctx.stroke()
    } else {
     ctx.fillStyle = 'skyBlue'
     ctx.fillRect(this.x, this.y, this.w, this.h)
    }
    this.update(index)
   },
   update: function (index) { // 更新雨滴坐標 運動起來
    if (this.y > this.l) {
     if (this.a > 0.03) {
      this.r += this.dr
      if (this.r > this.maxR) {
       this.a *= this.va
      }
     } else {
      this.a = 0
      raindropArr.splice(index, 1)
     }
    } else {
     this.y += this.dy
    }
   }
  }
  function rand(min, max) {
   return Math.random() * (max - min) + min
  }
  setInterval(() => {
   let raindrop = new Raindrop()
   raindropArr.push(raindrop)
  }, 100)
  setInterval(() => {
   ctx.fillStyle = 'rgba(0, 0, 0, 0.1)'
   ctx.fillRect(0, 0, myCanvas.width, myCanvas.height)
   for (let i = 0; i < raindropArr.length; i++) {
    raindropArr[i].draw(i)
   }
  }, 30)
 </script>
</body>
 
</html>

五、總結

canvas基本上任何運動,特效,都是通過js定時器改變坐標的方式實現。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/dzhi1931/article/details/112362649

延伸 · 閱讀

精彩推薦
  • js教程JavaScript實現點擊切換驗證碼及校驗

    JavaScript實現點擊切換驗證碼及校驗

    這篇文章主要為大家詳細介紹了JavaScript實現點擊切換驗證碼及校驗,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    棟棟很優秀啊3532021-12-29
  • js教程利用JS判斷元素是否為數組的方法示例

    利用JS判斷元素是否為數組的方法示例

    這篇文章主要給大家介紹了關于利用JS判斷元素是否為數組的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價...

    Fahrenheitzz9942021-12-29
  • js教程在HTML中使用JavaScript的兩種方法

    在HTML中使用JavaScript的兩種方法

    這篇文章主要介紹了在HTML中使用JavaScript的兩種方法,幫助大家更好的理解和制作網頁,感興趣的朋友可以了解下...

    itbsl9222021-12-18
  • js教程JavaScript實現通訊錄功能

    JavaScript實現通訊錄功能

    這篇文章主要為大家詳細介紹了JavaScript實現通訊錄功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    書寫夢想的鉛筆頭5622021-12-20
  • js教程js實現移動端輪播圖滑動切換

    js實現移動端輪播圖滑動切換

    這篇文章主要為大家詳細介紹了js實現移動端輪播圖滑動切換,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    浪漫前端11272021-12-15
  • js教程JavaScript 中 find() 和 filter() 方法的區別

    JavaScript 中 find() 和 filter() 方法的區別

    JavaScript 在 ES6 上有很多數組方法,每種方法都有獨特的用途和好處。...

    鋒享前端4502021-12-28
  • js教程JavaScript實現雪花飄落效果實例

    JavaScript實現雪花飄落效果實例

    這篇文章主要為大家詳細介紹了JavaScript實現雪花飄落效果實例,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    小蟲蟲~3682021-12-21
  • js教程基于 Next.js 的 SSR/SSG 方案了解一下?

    基于 Next.js 的 SSR/SSG 方案了解一下?

    服務端渲染(SSR,Server Side Render)與客戶端渲染(CSR,Client Side Render)的核心區分點簡單來說就是完整的 HTML 文檔在服務端還是瀏覽器里組裝完成。...

    DYBOY4452021-12-27
主站蜘蛛池模板: 国产看片网站 | 国产高清在线精品一区二区三区 | 婷婷午夜激情网 | av一区二区三区四区 | 亚洲电影在线播放 | 在线看av的网址 | 依人在线免费视频 | 伊人黄| 精品亚洲一区二区 | 国产狂做受xxxxx高潮 | 九色在线 | 亚洲三级精品 | www.国产| 日韩中文一区二区 | 99久色| 久久久久一区 | 91在线在线 | 久久久青草婷婷精品综合日韩 | 国产一区日韩精品 | 久久久久久免费毛片精品 | 成人av一区二区三区 | 国产毛片在线 | 一级在线看 | 三级成人在线 | 欧美一区二区黄色 | 伊人av成人 | 色婷婷av一区二区三区大白胸 | 久久综合久色欧美综合狠狠 | 久久aⅴ乱码一区二区三区 一区二区精品视频 | 国产精品久久久久一区二区三区 | 视频一区二区国产 | 国产成人精品一区二区三区网站观看 | 久久99蜜桃综合影院免费观看 | 一级做a爰片性色毛片精油 欧美中文字幕在线观看 | 亚洲九九 | 日本视频免费 | 成人片免费看 | 先锋久久| 俺去俺来也在线www色官网 | 糈精国产xxxx在线观看 | 亚洲欧美激情精品一区二区 |