日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

html canvas粒子线条组合动画背景特效

發布時間:2023/12/8 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 html canvas粒子线条组合动画背景特效 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

代碼如下:

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body> <canvas id="cas" width="840" height="945"></canvas><script>var canvas = document.getElementById("cas");var ctx = canvas.getContext("2d");resize();window.onresize = resize;function resize() {canvas.width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;canvas.height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;}var RAF = (function() {return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function(callback) {window.setTimeout(callback, 1000 / 60);};})();// 鼠標活動時,獲取鼠標坐標var warea = {x: null, y: null, max: 20000};window.onmousemove = function(e) {e = e || window.event;warea.x = e.clientX;warea.y = e.clientY;};window.onmouseout = function(e) {warea.x = null;warea.y = null;};// 添加粒子// x,y為粒子坐標,xa, ya為粒子xy軸加速度,max為連線的最大距離var dots = [];for (var i = 0; i < 300; i++) {var x = Math.random() * canvas.width;var y = Math.random() * canvas.height;var xa = Math.random() * 2 - 1;var ya = Math.random() * 2 - 1;dots.push({x: x,y: y,xa: xa,ya: ya,max: 6000})}// 延遲100秒開始執行動畫,如果立即執行有時位置計算會出錯setTimeout(function() {animate();}, 100);// 每一幀循環的邏輯function animate() {ctx.clearRect(0, 0, canvas.width, canvas.height);// 將鼠標坐標添加進去,產生一個用于比對距離的點數組var ndots = [warea].concat(dots);dots.forEach(function(dot) {// 粒子位移dot.x += dot.xa;dot.y += dot.ya;// 遇到邊界將加速度反向dot.xa *= (dot.x > canvas.width || dot.x < 0) ? -1 : 1;dot.ya *= (dot.y > canvas.height || dot.y < 0) ? -1 : 1;// 繪制點ctx.fillRect(dot.x - 0.5, dot.y - 0.5, 1, 1);// 循環比對粒子間的距離for (var i = 0; i < ndots.length; i++) {var d2 = ndots[i];if (dot === d2 || d2.x === null || d2.y === null) continue;var xc = dot.x - d2.x;var yc = dot.y - d2.y;// 兩個粒子之間的距離var dis = xc * xc + yc * yc;// 距離比var ratio;// 如果兩個粒子之間的距離小于粒子對象的max值,則在兩個粒子間畫線if (dis < d2.max) {// 如果是鼠標,則讓粒子向鼠標的位置移動if (d2 === warea && dis > (d2.max / 2)) {dot.x -= xc * 0.03;dot.y -= yc * 0.03;}// 計算距離比ratio = (d2.max - dis) / d2.max;// 畫線ctx.beginPath();ctx.lineWidth = ratio / 2;//線條顏色ctx.strokeStyle = 'rgba(0,0,0,' + (ratio + 0.2) + ')';ctx.moveTo(dot.x, dot.y);ctx.lineTo(d2.x, d2.y);ctx.stroke();}}// 將已經計算過的粒子從數組中刪除ndots.splice(ndots.indexOf(dot), 1);});RAF(animate);} </script></body> </html>

效果如下:

?

總結

以上是生活随笔為你收集整理的html canvas粒子线条组合动画背景特效的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。