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

首頁 > 開發 > HTML5 > 正文

5分鐘實現Canvas鼠標跟隨動畫背景

2024-09-05 07:23:07
字體:
來源:轉載
供稿:網友

關于Canvas制作炫酷背景,我會在git上不定時去更新,并會附上詳細的解析,如果有喜歡的話,可以到git上瞧瞧

gitHub傳送門

前言

相信很多前端小白都看過這樣的背景動畫,也好奇如何去實現這種效果!將這種效果應用到自己的個人網站上,會讓整個網站變得與眾不同!

 

下面我會直擊重點,用最短的時間,使用 Canvas 制作 鼠標跟隨動畫

 如何制作動畫

常用的繪圖動畫的方式有以下幾種:

  • CSS3
  • SVG
  • Canvas
  • WebGL

讓我們先分析分析這些方法的優劣性

  • CSS3 通過css3的關鍵幀等方式實現動畫效果,看起來好像挺實用,但這樣增加了一個沒有意義的DOM節點,不符合語義化編程規范
  • SVG、Canvas 都可以使用腳本語言來實現動畫
    • SVG 本質上是使用XML描述2D圖形的語言(矢量圖),SVG創建的每一個元素都是一個獨立的DOM元素,既然是獨立的DOM元素,那表示我們可以通過CSS和JS來控制DOM,也可以對每一個DOM元素進行監聽,但由于都是DOM元素,所以如果我們修改了SVG中的DOM元素,瀏覽器就會自動進行DOM重繪
    • Canvas通過Javascript來繪制2D圖形(位圖),而Canvas只是一個HTML元素,其中的圖形不會單獨創建DOM元素,所以我們無法通過Js來操作Canvas內的圖形,也無法監聽具體圖形
  • WebGL 用于3D展示、動畫、游戲,說白了就是基于Canvas的3D框架

 Canvas、SVG適用場景

  • Canvas 適用于位圖,高數據量繪制頻率的場景,小游戲,小特效,繪制圖表、活動頁面、炫酷背景
  • SVG 適用于矢量圖,低數據量繪制頻率的場景,如圖形圖表

直擊重點,制作鼠標跟隨動畫

最終效果

需求分析:鼠標移動,經過的地方創建一個圓,圓的半徑大小由小變大,達到某個固定大小時該圓消失,圓的顏色隨機變化

創建全屏Canvas元素

var canvas = document.getElementById('canvas'),    ctx = canvas.getContext('2d'),    WIDTH = canvas.width = document.documentElement.clientWidth,    HEIGHT = canvas.height = document.documentElement.clientHeight,    para = {        num: 100,        color: false,    //  顏色  如果是false 則是隨機漸變顏色        radius: 0.9,          //   圓每次增加的半徑         o: 0.09,         //      判斷圓消失的條件,數值越大,消失的越快    },    color,    circleColor,    round_arr = [];     // 存放圓的數組 

監聽鼠標 onmousemove 事件

需求:在鼠標移動的過程中,不斷在鼠標滑過的位置產生一個逐漸變大的圓

Canvas中創建動畫的方式就是不斷的清除屏幕然后重繪

由于移動的軌跡是由一個個圓構成,那我們就應該使用數組存儲圓的信息(xy坐標,半徑),然后在鼠標移動的時候將鼠標的位置信息存放在數組中

所以監聽onmousemove事件就是為了拿到鼠標的信息

window.onmousemove = function(event) {    X = event.clientX  // 當前在屏幕的x位置    Y = event.clientY  // 當前在屏幕的y位置    // 將信息存入圓數組    round_arr.push({        X:X,        Y:Y,        radius:para.radius        o:1    })}

設置 color

在onmousemove中,我們已經將坐標信息和半徑存入round_arr圓數組中,接下來就設置顏色了

在para對象里,默認的color是false,說明圓的顏色是隨機的,如果color不為false,則圓的顏色就為color的顏色

if(para.color){    circleColor = para.color}else{    color = Math.random() * 360}若想要設置顏色漸變if (!para.color) {    color += .1;    circleColor = 'hsl(' + color + ',100%,80%)';}

如果要讓顏色變化,則需要將顏色變化的代碼放在一個會一直執行的函數

定義 animation() 函數 !important

function animate() {    if (!para.color) {         # 設置顏色        color += .1        color2 = 'hsl(' + color + ',100%,80%)'    }    ctx.clearRect(0, 0, WIDTH, HEIGHT)      # 清除屏幕    for (var i = 0; i < round_arr.length; i++) {        ctx.fillStyle = circleColor         ctx.beginPath()        ctx.arc( round_arr[i].X ,round_arr[i].Y,round_arr[i].radius,0, Math.PI * 2)     # 畫圓        ctx.closePath()        ctx.fill()        round_arr[i].radius += para.radius    # 增大半徑        round_arr[i].o -= para.o    # 消失快慢        if( round_arr[i].o <= 0){       # 移除圓            round_arr.splice(i,1)            i--        }    }    window.requestAnimationFrame(animate)   # 使用一個回調函數作為參數,這個回調函數會在瀏覽器重繪之前調用}

requestAnimationFrame()會告訴瀏覽器,你需要執行動畫,并請求瀏覽器調用指定的函數在下一次重繪之前更新動畫。requestAnimationFrame()使用一個回調函數作為參數,這個回調函數會在瀏覽器重繪之前調用

完整代碼

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>鼠標屏幕互動動畫</title>    <style>        * {            padding: 0;            margin: 0;        }                #canvas {            background: #000;        }    </style></head><body>    <canvas id="canvas"></canvas>    <script>        var canvas = document.getElementById('canvas'),            ctx = canvas.getContext('2d'),            WIDTH = canvas.width = document.documentElement.clientWidth,            HEIGHT = canvas.height = document.documentElement.clientHeight,            para = {                num: 100,                color: false, //  顏色  如果是false 則是隨機漸變顏色                radius: 0.9,                o: 0.09, //  判斷圓消失的條件,數值越大,消失的越快            },            color,            circleColor,            round_arr = [];        window.onmousemove = function(event) {            X = event.clientX            Y = event.clientY            round_arr.push({                X: X,                Y: Y,                radius: para.radius,                o: 1            })        }        // 判斷參數中是否設置color,設置則使用該color,否則為隨機        if (para.color) {            circleColor = para.color        } else {            color = Math.random() * 360        }        function animate() {            if (!para.color) {                color += .1                circleColor = 'hsl(' + color + ',100%,80%)'            }            ctx.clearRect(0, 0, WIDTH, HEIGHT) // 清除屏幕            for (var i = 0; i < round_arr.length; i++) {                ctx.fillStyle = circleColor                ctx.beginPath() // 開始路徑                ctx.arc(round_arr[i].X, round_arr[i].Y, round_arr[i].radius, 0, Math.PI * 2) // 畫圓                ctx.closePath() // 結束路徑                ctx.fill()                round_arr[i].radius += para.radius // 增大圓                round_arr[i].o -= para.o //  消失時間變快                if (round_arr[i].o <= 0) {                    round_arr.splice(i, 1);                    i--;                }            }            window.requestAnimationFrame(animate)        }        animate()    </script></body></html>

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩美女在线播放| 国产成人精品在线| 欧美电影在线播放| 少妇久久久久久| 欧美成人午夜视频| 欧美中文在线免费| 2019中文字幕在线免费观看| 国产精品18久久久久久麻辣| 免费99精品国产自在在线| 欧美成人午夜视频| 欧美日本黄视频| 久久99国产精品自在自在app| 国产99久久精品一区二区永久免费| 久久天天躁狠狠躁老女人| 色伦专区97中文字幕| 亚洲成人免费网站| 精品欧美激情精品一区| 国产日韩在线视频| 国产999精品视频| 国产精品久久久久久久久久久新郎| 国产精品精品一区二区三区午夜版| 久久精品夜夜夜夜夜久久| 亚洲二区在线播放视频| 国精产品一区一区三区有限在线| 2021久久精品国产99国产精品| 欧美视频专区一二在线观看| 538国产精品一区二区在线| 国产视频久久久久久久| 国产精品免费在线免费| 亚洲桃花岛网站| 精品欧美aⅴ在线网站| 97视频在线观看视频免费视频| 国产免费成人av| 亚洲国产精品高清久久久| 国产大片精品免费永久看nba| 在线视频欧美性高潮| 91久久嫩草影院一区二区| 国产一区二区三区日韩欧美| 日韩电视剧免费观看网站| 亚洲激情中文字幕| 国产精品入口尤物| 色婷婷综合成人| 国产精品吊钟奶在线| 欧美国产欧美亚洲国产日韩mv天天看完整| 91成人天堂久久成人| 九九热最新视频//这里只有精品| 美女精品视频一区| 最近的2019中文字幕免费一页| 久久91亚洲精品中文字幕奶水| 亚洲精品www久久久| 91久久久久久久久久久久久| 欧美激情图片区| 亚洲欧美综合区自拍另类| 久久黄色av网站| 国产精品久久婷婷六月丁香| 91沈先生作品| 国产欧美精品xxxx另类| 日韩av手机在线| 久久久久免费视频| 一区国产精品视频| 久久免费精品视频| 亚洲欧洲日韩国产| 国产精品7m视频| 欧美国产日韩视频| 久久国产精品影视| 亚洲一区二区三区久久| 欧美午夜片欧美片在线观看| 一区二区亚洲精品国产| 国产婷婷97碰碰久久人人蜜臀| 精品欧美aⅴ在线网站| 欧洲精品久久久| 日韩精品中文字幕在线观看| 国产成人一区二区三区| 国产精品视频公开费视频| 国产亚洲成精品久久| 亚洲老板91色精品久久| 中文字幕欧美在线| 亚洲高清一二三区| 91免费福利视频| 91网站免费观看| 一本色道久久综合狠狠躁篇的优点| 亚洲欧美综合精品久久成人| 欧美最顶级丰满的aⅴ艳星| 在线观看视频亚洲| 欧美午夜宅男影院在线观看| 一区二区三区日韩在线| 97精品国产91久久久久久| 国产69精品久久久久久| 精品国产乱码久久久久久虫虫漫画| 亚洲欧美另类国产| 国产成人精品a视频一区www| 亚洲系列中文字幕| 久久99精品久久久久久噜噜| 亚洲美女中文字幕| 日本亚洲欧美三级| 美女扒开尿口让男人操亚洲视频网站| 国产精品中文字幕在线| 日本久久久a级免费| 日韩欧美亚洲成人| 国产精品一区二区久久久久| 九九久久综合网站| 亚洲欧美一区二区激情| 琪琪亚洲精品午夜在线| 国产精品精品一区二区三区午夜版| 色樱桃影院亚洲精品影院| 国产欧美日韩中文| 久久久久久久久中文字幕| 91在线直播亚洲| 欧美一区二粉嫩精品国产一线天| 在线不卡国产精品| 国产视频久久网| 久久色在线播放| 美女少妇精品视频| 亚洲深夜福利网站| 热re91久久精品国99热蜜臀| 久久久精品欧美| 国产日韩综合一区二区性色av| 久久国产精品久久久久久| 国产精品色午夜在线观看| 亚洲欧洲日产国码av系列天堂| 日韩成人在线视频| 中文字幕精品www乱入免费视频| www亚洲欧美| 美女福利精品视频| 国产免费成人av| 成人写真视频福利网| 亚洲综合中文字幕68页| 91极品视频在线| 欧美国产日韩一区二区| 一本色道久久综合狠狠躁篇怎么玩| 亚洲free性xxxx护士hd| 亚洲国产精品嫩草影院久久| 国产精品一区二区电影| 亚洲伊人一本大道中文字幕| 91久久久亚洲精品| 国产精品扒开腿做爽爽爽的视频| 粉嫩老牛aⅴ一区二区三区| 亚洲国产精品yw在线观看| 欧美福利视频在线| 国产精品视频一| 美女啪啪无遮挡免费久久网站| 欧美电影免费播放| 一区二区三区美女xx视频| 成人做爰www免费看视频网站| 亚洲福利在线观看| 中文字幕日韩欧美在线| 69久久夜色精品国产69| 精品高清美女精品国产区| 在线播放日韩欧美| 亚洲影视九九影院在线观看| 成人中心免费视频| 久久国产精品影视| 亚洲偷欧美偷国内偷| 亚洲精品aⅴ中文字幕乱码| 中文字幕在线亚洲| 亚洲精品一区中文字幕乱码| 久久国产精品久久久| 欧美精品免费播放| 亚洲精品视频在线观看视频| 国产日韩欧美黄色| 精品国产乱码久久久久久虫虫漫画| 欧美性猛交视频| 亚洲一级黄色av| 欧美精品在线观看91|