激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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

服務器之家 - 編程語言 - JavaScript - js教程 - js canvas實現圓形流水動畫

js canvas實現圓形流水動畫

2022-03-06 21:30莫兮是我 js教程

這篇文章主要為大家詳細介紹了js canvas實現圓形流水動畫,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了canvas實現圓形流水動畫的具體代碼,供大家參考,具體內容如下

前言

特效展示

效果展示

js canvas實現圓形流水動畫

代碼展示

index.html

?
1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- <link rel="stylesheet" href="style.css" > -->
</head>
<body>
    <script src="main.js"></script>
</body>
</html>

main.js

?
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
/*
 * Noel Delgado - @pixelia_me
 */
 
(function() {
  var ctx, w, h, cx, cy, PI, PI_HALF, cos, sin, random, lineWidth, C,
      rings, ringsLength, data;
 
  ctx = document.createElement('canvas').getContext('2d');
  w = 600;
  h = 600;
  cx = (w / 2);
  cy = (h / 2);
  rings = [];
  ringsLength = 0;
  
  PI = Math.PI;
  PI_HALF = PI / 2;
  cos = Math.cos;
  sin = Math.sin;
  random = Math.random;
 
  lineWidth = 0.2;
  C = ["#ABF8FF", "#E76B76", "#1D2439", "#4F3762", "#67F9FF", "#0C0F18"];
  
  data = [
    /* ring {t:total_particles, r:radius, d:distance, s:speed, c:color} */
    [
      {t:80, r:(cx-10), d:40, s:30, c:C[1]},
      {t:60, r:(cx-20), d:40, s:80, c:C[2]},
      {t:20, r:(cx-30), d:20, s:80, c:C[2]},
    ],
    [
     {t:80, r:(cx-80),  d:40, s:40, c:C[4]},
       {t:80, r:(cx-90),  d:20, s:40, c:C[4]},
       {t:20, r:(cx-100), d:20, s:40, c:C[2]},
       {t:40, r:(cx-110), d:20, s:40, c:C[2]},
    ],
    [
     {t:60, r:(cx-160), d:40, s:20, c:C[2]},
       {t:20, r:(cx-170), d:30, s:60, c:C[2]},
       {t:40, r:(cx-180), d:40, s:60, c:C[2]},
    ],
    [
     {t:40, r:(cx-230), d:40, s:20, c:C[5]},
       {t:20, r:(cx-240), d:20, s:10, c:C[5]},
    ],
    [
       {t:10, r:(cx-290), d:10, s:10, c:C[4]}
    ]
  ];
 
  /* */
  ctx.canvas.width = w;
  ctx.canvas.height = h;
  document.body.appendChild(ctx.canvas);
 
  data.forEach(function(group) {
    var ring = [];
    
    group.forEach(function(orbit, i) {
      var total_particles, index;
      
      total_particles = orbit.t;
      index = 0;
      
      for (; index < total_particles; index++) {
        var radius, distance, speed, color, opacity;
 
        radius = orbit.r;
        distance = orbit.d;
        speed = random() / orbit.s;
        speed = i % 2 ? speed : speed * -1;
        color = orbit.c;
        opacity = orbit.o;
 
        ring.push(new P(radius, distance, speed, color, opacity));
 
        radius = distance = speed = color = opacity = null;
      }
    });
    
    rings.push(ring);
  });
 
  ringsLength = rings.length;
 
  /* */
  function P(radius, distance, speed, color) {
    this.a = PI / 180;
    this.d = distance;
    this.d2 = (this.d * this.d);
    this.x = cx + radius * cos(this.a);
    this.y = cy + radius * sin(this.a);
    this.c = color;
    this.r = (random() * 8);
    this.R = random() > 0.5 ? radius : radius - 5;
    this.s = speed;
    this.pos = random() * 360;
  }
  
  function draw() {
    var i, j, k, xd, yd, d, ring, ringLength, ringLength2, particle, p2;
 
    ctx.beginPath();
    ctx.globalCompositeOperation = "source-over";
    ctx.rect(0, 0 , w, h);
    ctx.fillStyle = "#151a28";
    ctx.fill();
    ctx.closePath();
 
    for (i = 0; i < ringsLength; i++) {
      ring = rings[i];
      ringLength = ring.length;
      ringLength2 = ringLength - 100;
      
      for (j = 0; j < ringLength; j++) {
        particle = ring[j];
 
        particle.x = cx + particle.R * sin(PI_HALF + particle.pos);
        particle.y = cy + particle.R * cos(PI_HALF + particle.pos);
        particle.pos += particle.s;
 
        ctx.beginPath();
        ctx.globalAlpha = 0.12;
        ctx.globalCompositeOperation = "lighter";
        ctx.fillStyle = particle.c;
        ctx.arc(particle.x, particle.y, particle.r, PI * 2, false);
        ctx.fill();
        ctx.closePath();
 
        for (k = 0; k < ringLength2; k++) {
          p2 = ring[k];
 
          yd = p2.y - particle.y;
          xd = p2.x - particle.x;
          d = ((xd * xd) + (yd * yd));
 
          if (d < particle.d2) {
            ctx.beginPath();
            ctx.globalAlpha = 1;
            ctx.lineWidth = lineWidth;
            ctx.moveTo(particle.x, particle.y);
            ctx.lineTo(p2.x, p2.y);
            ctx.strokeStyle = p2.c;
            ctx.stroke();
            ctx.closePath();
          }
        }
      }
    }
  }
 
  function loop() {
    draw();
    requestAnimationFrame(loop);
  }
 
  loop();
  
})();

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

原文鏈接:https://blog.csdn.net/u013362192/article/details/115247626

延伸 · 閱讀

精彩推薦
  • js教程Strve.js開發一個屬于自己的庫或框架

    Strve.js開發一個屬于自己的庫或框架

    Strve.js是一個可以將字符串轉換為視圖的JS庫。這里的字符串指的是模板字符串,所以你僅需要在JavaScript中開發視圖。Strve.js不僅易于上手,還便于靈活拆裝...

    前端歷劫之路6072021-12-23
  • js教程JS實現點擊掉落特效

    JS實現點擊掉落特效

    這篇文章主要介紹了JS實現點擊掉落特效,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下...

    小楊的旺仔沒有牛奶11812022-01-11
  • js教程微信小程序授權登錄的優雅處理方式

    微信小程序授權登錄的優雅處理方式

    這篇文章主要給大家介紹了關于微信小程序授權登錄的優雅處理方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值...

    FTD止水11622022-02-15
  • js教程nestjs返回給前端數據格式的封裝實現

    nestjs返回給前端數據格式的封裝實現

    這篇文章主要介紹了nestjs返回給前端數據格式的封裝實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋...

    水痕018882022-01-22
  • js教程詳解CocosCreator優化之DrawCall

    詳解CocosCreator優化之DrawCall

    這篇文章主要介紹了CocosCreator中DrawCall的優化,想研究游戲性能的同學,一定要看一看...

    路飛的小迷弟7062022-03-02
  • js教程JavaScript Dom實現輪播圖原理和實例

    JavaScript Dom實現輪播圖原理和實例

    這篇文章主要為大家詳細介紹了JavaScript Dom實現輪播圖原理和實例,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    ALonelyLemon3762022-01-21
  • js教程javascript中layim之查找好友查找群組

    javascript中layim之查找好友查找群組

    這篇文章主要介紹了javascript中layim之查找好友查找群組,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下...

    踮腳敲代碼9182022-01-19
  • js教程JavaScript中展開運算符及應用的實例代碼

    JavaScript中展開運算符及應用的實例代碼

    這篇文章主要介紹了JavaScript中展開運算符及應用的實例代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以...

    banana peel9672021-12-31
主站蜘蛛池模板: 精品国产乱码久久久久久丨区2区 | 欧美一区二区片 | 欧美不卡 | 日韩午夜片 | 国产日韩在线视频 | 97se亚洲综合在线韩国专区福利 | 亚洲一区二区三区精品在线观看 | 日本久久视频 | 久久性生活免费视频 | 九一传媒在线观看 | 91视频观看| 亚洲va在线| 日韩视 | 最新在线黄色网址 | 国产在线播放91 | 91精品国产91久久久久久 | 中文字幕在线观看免费 | 欧美顶级毛片在线播放小说 | 粉嫩粉嫩一区二区三区在线播放 | 草莓福利社区在线 | 成人 在线| 欧美日韩亚洲视频 | 青青草最新网址 | 国产在线地址 | 亚洲国产视频网 | 蜜桃传媒视频麻豆第一区免费观看 | 欧美精品成人一区二区在线观看 | 欧美日韩在线播放一区 | 国产亚洲精品久久777777 | 久久国产精品久久久久久 | 国产91在线高潮白浆在线观看 | 日韩精品中文字幕一区二区 | 欧美 国产 综合 | 噜噜噜躁狠狠躁狠狠精品视频 | 特级毛片全部免费播放器 | 国产一区二区精品免费 | 国产精品亚洲激情 | 日本成人一区二区三区 | 欧美日韩电影在线 | 羞羞网站在线看 | 国产视频第一区 |