亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > HTML > 正文

canvas粒子動畫背景的實現示例

2024-08-26 00:20:57
字體:
來源:轉載
供稿:網友

效果 :)

不帶連線效果:

canvas,粒子動畫

帶連線的效果:

canvas,粒子動畫

教程

要實現這樣的效果其實很簡單,大概分為這么幾個步驟:

創建canvas

首先需要在需要展示粒子背景的父元素中創建一個canvas標簽, 指定widthheight, 在我們生成隨機點坐標的時候需要用widthheight來做參照。widthheight等于父元素的寬和高。

// 假如父元素是bodyconst ele = document.body;const canvas = document.createElement('canvas');canvas.width = ele.clientWidth;canvas.height = ele.clientHeight;// 將canvas標簽插入ele.appendChild(canvas);

隨機生成一定數量的點坐標信息

widthheight做參照隨機生成一定數量的點坐標信息,包含xyrateX(點在X軸的移動速率), rateY(點在Y軸移動的速率), rateXrateY決定了點的運動軌跡。

const points = [];// 隨機生成點的坐標,需指定radius的最大值function getPoint(radius) {  const x = Math.ceil(Math.random() * this.width), // 粒子的x坐標    y = Math.ceil(Math.random() * this.height), // 粒子的y坐標    r = +(Math.random() * this.radius).toFixed(4), // 粒子的半徑    rateX = +(Math.random() * 2 - 1).toFixed(4), // 粒子在x方向運動的速率    rateY = +(Math.random() * 2 - 1).toFixed(4); // 粒子在y方向運動的速率  return { x, y, r, rateX, rateY };}// 隨機生成100個點的坐標信息for (let i = 0; i < 100; i++) {  points.push(this.getPoint());}

將生成的點數組畫到canvas上

function drawPoints() {  points.forEach((item, i) => {    ctx.beginPath();    ctx.arc(item.x, item.y, item.r, 0, Math.PI*2, false);    ctx.fillStyle = '#fff';    ctx.fill();    // 根據rateX和rateY移動點的坐標    if(item.x > 0 && item.x < width && item.y > 0 && item.y < height) {      item.x += item.rateX * rate;      item.y += item.rateY * rate;    } else {      // 如果粒子運動超出了邊界,將這個粒子去除,同時重新生成一個新點。      points.splice(i, 1);      points.push(getPoint(radius));    }  });}

畫線

遍歷點數組,兩兩比較點坐標,如果兩點之間距離小于某個值,在兩個點之間畫一條直線,lineWidth隨兩點之間距離改變,距離越大,線越細。

// 計算兩點之間的距離function dis(x1, y1, x2, y2) {  var disX = Math.abs(x1 - x2),    disY = Math.abs(y1 - y2);  return Math.sqrt(disX * disX + disY * disY);}function drawLines() {  const len = points.length;  //對圓心坐標進行兩兩判斷  for(let i = 0; i < len; i++) {    for(let j = len - 1; j >= 0; j--) {      const x1 = points[i].x,        y1 = points[i].y,        x2 = points[j].x,        y2 = points[j].y,        disPoint = dis(x1, y1, x2, y2);      // 如果兩點之間距離小于150,畫線      if(disPoint <= 150) {        ctx.beginPath();        ctx.moveTo(x1, y1);        ctx.lineTo(x2, y2);        ctx.strokeStyle = '#fff';        //兩點之間距離越大,線越細,反之亦然        ctx.lineWidth = 1 - disPoint / distance;        ctx.stroke();      }    }  }}

動畫

使用requestAnimationFrame循環調用draw方法(draw方法里包含畫點和畫線),同時在draw的時候根據rateXrateY來改動點的位置。

// 調用draw函數開啟動畫(function draw() {  ctx.clearRect(0, 0, width, height);  drawPoints();  // 如果不需要畫線,取消下面這行代碼即可。  drawLines();  window.requestAnimationFrame(draw);}());

完整代碼請看: https://github.com/PengJiyuan/particle-bg

我的Github:https://github.com/PengJiyuan

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到HTML教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品久久电影观看| 国产精品欧美久久久| 日韩网站免费观看高清| 久久久久久这里只有精品| 欧美精品一区在线播放| 国产精品久久久久久av下载红粉| 国产精品国内视频| 91亚洲国产精品| 成人免费网站在线观看| 国产精品日韩专区| 欧美日韩高清区| 亚洲码在线观看| 亚洲国产日韩欧美在线动漫| 亚洲无av在线中文字幕| 国产欧美日韩综合精品| 欧美日韩精品在线观看| 欧美大片免费看| 亚洲精品中文字| 亚洲人在线观看| 美女国内精品自产拍在线播放| 日韩欧美在线观看视频| 亚洲午夜小视频| 一本色道久久88综合亚洲精品ⅰ| 欧美巨猛xxxx猛交黑人97人| 一本色道久久88亚洲综合88| 国产一区视频在线| 国产一区二区三区三区在线观看| 国产欧美日韩中文字幕| 91色精品视频在线| 国产手机视频精品| 欧美巨乳美女视频| 久久亚洲成人精品| 亚洲国产精品一区二区三区| 欧美日韩成人精品| 永久免费毛片在线播放不卡| 国内精品久久久久| 亚洲国产99精品国自产| 欧美壮男野外gaytube| 88xx成人精品| 日韩欧美极品在线观看| 久久久久久国产精品久久| 久久国产精品久久国产精品| 欧美专区第一页| 国产成+人+综合+亚洲欧美丁香花| 亚洲人a成www在线影院| 国产免费亚洲高清| 欧美成人精品一区二区| 亚洲最大成人在线| 成人免费观看49www在线观看| 欧美激情久久久久| 国产精品极品尤物在线观看| 77777亚洲午夜久久多人| 国产精品爽爽爽| 在线观看国产精品91| 久久久久久久久久久亚洲| 91最新在线免费观看| 国产一区深夜福利| 国产精品免费网站| 久久影视电视剧凤归四时歌| 欧美成年人视频网站| 91精品久久久久久久久久久久久| 97色在线播放视频| 国产综合色香蕉精品| 国产精品中文字幕在线观看| 一区二区国产精品视频| 午夜精品一区二区三区在线视| 欧美亚洲国产视频小说| 久久精品国产一区| 日韩av最新在线| 欧美成人中文字幕在线| 久久综合久中文字幕青草| 精品中文字幕乱| 麻豆国产va免费精品高清在线| 久久人人97超碰精品888| 91亚洲国产成人精品性色| 亚洲精品www久久久久久广东| 久久精品国产亚洲精品2020| 91精品久久久久久久久久另类| 欧美成人精品不卡视频在线观看| 国产成人精品av| 欧美午夜影院在线视频| 日韩成人中文字幕在线观看| 欧美日韩美女在线观看| 亚洲第一二三四五区| 疯狂做受xxxx高潮欧美日本| 日本国产高清不卡| 亚洲精品一区av在线播放| 日韩不卡在线观看| 欧美自拍大量在线观看| 毛片精品免费在线观看| 亚洲小视频在线观看| 欧美日韩国产精品一区| 91精品国产乱码久久久久久久久| 国产精品欧美日韩| 91在线观看免费网站| 欧美猛交免费看| 久久视频在线免费观看| 国产精品视频导航| 国产精品一区二区久久| 欧美一级淫片aaaaaaa视频| 亚洲天堂2020| 国产日韩欧美在线播放| 精品无人国产偷自产在线| 精品亚洲夜色av98在线观看| 亚洲欧美激情精品一区二区| 91精品久久久久久| 国产色视频一区| 精品国偷自产在线视频99| 92看片淫黄大片看国产片| 亚洲一区二区三区sesese| 国内精品视频一区| 国产精品九九九| 国产自摸综合网| 欧美性猛交xxxx乱大交蜜桃| 国产视频精品一区二区三区| 国产a级全部精品| 欧美成人激情视频| 欧美高清自拍一区| 亚洲黄色www| 伊人久久久久久久久久久久久| 91国在线精品国内播放| 国产亚洲精品久久久久动| 一区二区三区四区视频| 欧美高清在线播放| 91在线免费视频| 国产午夜精品久久久| 日韩国产精品一区| 国产精国产精品| 国产精品视频精品| 久久亚洲精品一区二区| 久久综合伊人77777尤物| 中文字幕精品影院| 45www国产精品网站| 91sa在线看| 亚洲精品午夜精品| 国产999精品久久久| 日韩av电影在线网| 精品国产一区二区三区久久狼5月| 亚洲精品免费一区二区三区| 一区二区三区美女xx视频| 成人深夜直播免费观看| 91精品国产综合久久久久久蜜臀| 少妇av一区二区三区| 久久精品视频播放| 国产成一区二区| 日韩精品在线免费观看视频| 亚洲香蕉成人av网站在线观看| 久久久久亚洲精品国产| 91精品视频免费看| 亚洲色图激情小说| 欧美成aaa人片在线观看蜜臀| 欧美日韩在线第一页| 6080yy精品一区二区三区| 97视频网站入口| 国产精品欧美激情| 日韩av免费在线播放| 国产精品久久999| 欧美激情在线视频二区| 亚洲欧美在线一区二区| 亚洲一区二区福利| 国产精品免费视频xxxx| 国产91在线播放精品91| 亚洲高清在线观看| 狠狠色香婷婷久久亚洲精品|