婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Canvas制作的下雨動畫的示例

Canvas制作的下雨動畫的示例

熱門標(biāo)簽:鎮(zhèn)江智能外呼系統(tǒng)有效果嗎 云南大理400電話申請官方 四川點撥外呼系統(tǒng) 當(dāng)涂高德地圖標(biāo)注 電銷機器人電話用什么卡 南寧點撥外呼系統(tǒng)哪家公司做的好 黃島區(qū)地圖標(biāo)注 成都智能外呼系統(tǒng)平臺 江蘇智能電銷機器人哪家好

簡介

在codepen上看到一個Canvas做的下雨效果動畫,感覺蠻有意思的。就研究了下,這里來分享下,實現(xiàn)技巧。

效果截圖:

Canvas動畫基礎(chǔ)

大家都知道,Canvas其實只是一個畫板。我們可以應(yīng)用canvas的api在上面繪制各種圖形。

Canvas 2D 的API:https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D

那么Canvas繪制動畫的步驟就是:

  1. 繪制第一幀圖形(利用API繪圖)
  2. 清空畫板(應(yīng)用clearRect()或fillRect())
  3. 繪制下一幀動畫

用什么來控制動畫每一幀的繪制時間呢?大家很容易想到 window.setInterval()和window.setTimeout()。沒錯用這兩個也可以。除此之外,后來又出現(xiàn)一個新的方法:window.requestAnimationFrame(callback)。

requestAnimationFrame會告訴瀏覽器你要繪制一個動畫。讓瀏覽器要重繪時調(diào)用你指定的方法(callback)來繪制你的動畫。

使用方法如下:

function anim() {
    ctx.fillStyle = clearColor;
    ctx.fillRect(0,0,w,h);
    for(var i in drops){
        drops[i].draw();
    }
    requestAnimationFrame(anim);
}

一般情況下優(yōu)先使用requestAnimationFrame能保持動畫繪制的頻率和瀏覽器重繪的頻率一致。不幸的是requestAnimationFrame的兼容性還不是很好。IE9以下和addroid 4.3以下好像不支持這個屬性。不支持的瀏覽器要用setInterval或setTimeout做兼容。

雨滴下落效果

首先來講講雨滴下落的效果如何制作。雨滴其實是一個長方形,然后加殘影。殘影的繪制可以說是雨滴下落的關(guān)鍵。殘影是通過在前進的方向每一幀都繪制一個半透明的背景和一個長方形,然后前面繪制的圖形疊加產(chǎn)生的效果。由于前進方向的圖形最后繪制,所以顯得明亮,后面的圖形疊加的比較多,所以視覺上減弱。整體看起來后面的就像殘影。這里繪制具有透明度背景是關(guān)鍵,否則產(chǎn)生不了疊加效果。

那么來繪制個雨滴看看。首先準(zhǔn)備一個畫板:

html代碼:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>霓虹雨</title>
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <style type="text/css">
        .bg {
            background: #000;
            overflow: hidden;
        }
    </style>

</head>
<body class="bg">
<canvas id="canvas-club"></canvas>
<script type="text/javascript" src="raindrop.js"></script>
</body>
</html>

我在js文件里繪制動畫(raindrop.js),代碼如下:

var c = document.getElementById("canvas-club");
var ctx = c.getContext("2d");//獲取canvas上下文
var w = c.width = window.innerWidth;
var h = c.height = window.innerHeight;//設(shè)置canvas寬、高
var clearColor = 'rgba(0, 0, 0, .1)';//畫板背景,注意最后的透明度0.1 這是產(chǎn)生疊加效果的基礎(chǔ)

function random(min, max) {
    return Math.random() * (max - min) + min;
}

function RainDrop(){}
//雨滴對象 這是繪制雨滴動畫的關(guān)鍵
RainDrop.prototype = {
    init:function(){
        this.x =  random(0, w);//雨滴的位置x
        this.y = 0;//雨滴的位置y
        this.color = 'hsl(180, 100%, 50%)';//雨滴顏色 長方形的填充色
        this.vy = random(4, 5);//雨滴下落速度
        this.hit = random(h * .8, h * .9);//下落的最大值
        this.size = 2;//長方形寬度
    },
    draw:function(){
        if (this.y < this.hit) {
            ctx.fillStyle = this.color;
            ctx.fillRect(this.x, this.y, this.size, this.size * 5);//繪制長方形,通過多次疊加長方形,形成雨滴下落效果
        }
        this.update();//更新位置
    },
    update:function(){
        if(this.y < this.hit){
            this.y += this.vy;//未達(dá)到底部,增加雨滴y坐標(biāo)
        }else{
            this.init();
        }
    }
};

function resize(){
    w = c.width = window.innerWidth;
    h = c.height = window.innerHeight;
}

//初始化一個雨滴
var r = new RainDrop();
r.init();

function anim() {
    ctx.fillStyle = clearColor;//每一幀都填充背景色
    ctx.fillRect(0,0,w,h);//填充背景色,注意不要用clearRect,否則會清空前面的雨滴,導(dǎo)致不能產(chǎn)生疊加的效果
    r.draw();//繪制雨滴
    requestAnimationFrame(anim);//控制動畫幀
}

window.addEventListener("resize", resize);
//啟動動畫
anim();

漣漪效果

接著來繪制漣漪效果。與繪制雨滴的方式類似,也是通過具有透明度的背景來疊加前面的圖像產(chǎn)生內(nèi)陰影的效果。

代碼如下(rippling.js):

var c = document.getElementById("canvas-club");
var ctx = c.getContext("2d");//獲取canvas上下文
var w = c.width = window.innerWidth;
var h = c.height = window.innerHeight;//設(shè)置canvas寬、高
var clearColor = 'rgba(0, 0, 0, .1)';//畫板背景,注意最后的透明度0.1 這是產(chǎn)生疊加效果的基礎(chǔ)

function random(min, max) {
    return Math.random() * (max - min) + min;
}

function Rippling(){}
//漣漪對象 這是漣漪動畫的主要部分
Rippling.prototype = {
    init:function(){
        this.x = random(0,w);//漣漪x坐標(biāo)
        this.y = random(h * .8, h * .9);//漣漪y坐標(biāo)
        this.w = 2;//橢圓形漣漪寬
        this.h = 1;//橢圓漣漪高
        this.vw = 3;//寬度增長速度
        this.vh = 1;//高度增長速度
        this.a = 1;//透明度
        this.va = .96;//漣漪消失的漸變速度
    },
    draw:function(){
        ctx.beginPath();
        ctx.moveTo(this.x, this.y - this.h / 2);
        //繪制右弧線
        ctx.bezierCurveTo(
            this.x + this.w / 2, this.y - this.h / 2,
            this.x + this.w / 2, this.y + this.h / 2,
            this.x, this.y + this.h / 2);
        //繪制左弧線
        ctx.bezierCurveTo(
            this.x - this.w / 2, this.y + this.h / 2,
            this.x - this.w / 2, this.y - this.h / 2,
            this.x, this.y - this.h / 2);
        
        ctx.strokeStyle = 'hsla(180, 100%, 50%, '+this.a+')';
        ctx.stroke();
        ctx.closePath();
        this.update();//更新坐標(biāo)
    },
    update:function(){
        if(this.a > .03){
            this.w += this.vw;//寬度增長
            this.h += this.vh;//高度增長
            if(this.w > 100){
                this.a *= this.va;//當(dāng)寬度超過100,漣漪逐漸變淡消失
                this.vw *= .98;//寬度增長變緩慢
                this.vh *= .98;//高度增長變緩慢
            }
        } else {
            this.init();
        }

    }
};

function resize(){
    w = c.width = window.innerWidth;
    h = c.height = window.innerHeight;
}

//初始化一個漣漪
var r = new Rippling();
r.init();

function anim() {
    ctx.fillStyle = clearColor;
    ctx.fillRect(0,0,w,h);
    r.draw();
    requestAnimationFrame(anim);
}

window.addEventListener("resize", resize);
//啟動動畫
anim();

總結(jié)

這樣大家對整個下雨效果的制作方法,應(yīng)該有一定的了解了。Canvas用來繪制動畫的效果確實能讓人眼前一亮,讓web的視覺效果提升一大截。發(fā)動自己的智慧,相信能做出更多奇妙的動畫。這是我越來越喜歡web的原因之一吧 O(∩_∩)O~~。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

標(biāo)簽:咸寧 南京 酒泉 十堰 佳木斯 淮安 廣西 西寧

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Canvas制作的下雨動畫的示例》,本文關(guān)鍵詞  Canvas,制作,的,下雨,動,畫的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Canvas制作的下雨動畫的示例》相關(guān)的同類信息!
  • 本頁收集關(guān)于Canvas制作的下雨動畫的示例的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美日韩国产经典色站一区二区三区 | 制服丝袜国产精品| 中文字幕一区二区三区在线不卡| 亚洲色图清纯唯美| 美国毛片一区二区| 三级久久三级久久| 久久婷婷国产综合精品青草| 亚洲精品成人a在线观看| 自拍偷拍欧美激情| 色婷婷激情综合| 中文一区二区完整视频在线观看| 亚洲日本成人在线观看| 国产成a人亚洲精品| 视频一区二区不卡| 国产一区二区不卡在线 | 精品欧美一区二区在线观看| 日韩精品1区2区3区| 欧美一区二区久久| 天天操天天干天天综合网| 国产精品美女久久久久av爽李琼 | 久久久www成人免费无遮挡大片| 国产真实乱对白精彩久久| 夜夜嗨av一区二区三区网页 | 欧美肥妇毛茸茸| 免费观看成人av| 国产精品美女一区二区三区| aaa国产一区| 国产曰批免费观看久久久| 国产在线精品一区二区不卡了| 国产黄色成人av| 不卡一区二区在线| 欧美日韩国产不卡| 国产三级一区二区| 国产不卡在线播放| 日韩美女视频一区二区 | 国产精品影音先锋| 欧美大片国产精品| 成人性生交大合| 精品综合久久久久久8888| 色8久久精品久久久久久蜜| 视频在线观看一区| 伊人色综合久久天天人手人婷| 精品少妇一区二区三区在线播放| av综合在线播放| 国产.欧美.日韩| 日韩高清在线观看| 亚洲六月丁香色婷婷综合久久| 精品久久久久久久久久久久包黑料 | 欧洲av一区二区嗯嗯嗯啊| 国产精品影视在线| 国产成人高清在线| 99在线视频精品| av亚洲精华国产精华精| 99精品偷自拍| 欧美亚洲一区二区三区四区| 99久久综合国产精品| 国产福利一区二区三区在线视频| 久久99国产精品免费网站| 久久精品国产**网站演员| 久久国产精品露脸对白| 国产伦精一区二区三区| 国产激情91久久精品导航 | 亚洲最新在线观看| 亚洲成av人片在www色猫咪| 毛片不卡一区二区| 国产福利精品导航| 国产亚洲综合av| 欧美三区免费完整视频在线观看| 亚洲蜜臀av乱码久久精品| 精品亚洲成a人| 精品久久久久久最新网址| 国产乱码精品一区二区三区av | 欧美精品一区二区三区蜜桃视频| 亚洲影院在线观看| 91精品欧美久久久久久动漫| 经典三级一区二区| 亚洲伦在线观看| 99re这里只有精品6| 91精品国产综合久久久久| 亚洲成人久久影院| 综合网在线视频| 另类小说欧美激情| 欧美一区二区三区系列电影| 日本一区二区视频在线| 国产九色精品成人porny| 色婷婷综合久久久中文一区二区| 中文字幕欧美激情| 91在线码无精品| 中文字幕亚洲精品在线观看| 成人动漫中文字幕| 亚洲男人电影天堂| 精品一区二区国语对白| 日韩一级欧美一级| 老司机免费视频一区二区三区| 日本高清不卡aⅴ免费网站| 一区二区三区鲁丝不卡| 欧美日韩另类一区| 另类调教123区| 91精品蜜臀在线一区尤物| 麻豆精品久久精品色综合| 日韩欧美高清dvd碟片| 免费在线观看日韩欧美| 国产精品你懂的在线欣赏| 欧美精品日韩精品| 92国产精品观看| 国产在线观看一区二区| 极品美女销魂一区二区三区| 亚洲精品国产视频| 国产成人免费视频精品含羞草妖精| 日本道免费精品一区二区三区| 最新高清无码专区| 亚洲精品欧美二区三区中文字幕| 午夜精品福利一区二区三区av| 久久久久9999亚洲精品| 美女视频黄免费的久久| 精品一区二区三区香蕉蜜桃| 在线亚洲免费视频| 亚洲欧美一区二区三区极速播放| 国产在线精品视频| 国产乱码精品一区二区三| 久久女同性恋中文字幕| 岛国精品在线播放| 国产免费成人在线视频| 国产一区二区影院| 国产精品影视网| 国产一区二区三区免费观看| 蜜臀av性久久久久蜜臀aⅴ| 亚洲三级电影全部在线观看高清| 国产嫩草影院久久久久| 久久蜜桃av一区精品变态类天堂 | 精品精品国产高清一毛片一天堂| 欧美日韩精品一区二区| 欧美一区二区三区爱爱| 欧美精品一区二区蜜臀亚洲| 中文在线资源观看网站视频免费不卡| 国产精品视频在线看| 亚洲www啪成人一区二区麻豆 | 自拍偷在线精品自拍偷无码专区| 亚洲免费观看在线视频| 蜜臀av一区二区三区| 成人妖精视频yjsp地址| 欧美三片在线视频观看| 久久蜜桃一区二区| 美美哒免费高清在线观看视频一区二区| 国产在线日韩欧美| 精品视频1区2区| 亚洲六月丁香色婷婷综合久久 | 国产精品18久久久久| 欧美日本在线一区| 亚洲成人一区二区| 色老头久久综合| 中文字幕中文字幕一区二区| 久久99精品久久久久婷婷| 国产成人av电影免费在线观看| 色综合一区二区三区| 久久理论电影网| 精品一区二区三区视频| 日韩一区二区精品在线观看| 亚洲一区二区黄色| 欧美日韩国产成人在线免费| 自拍偷拍亚洲激情| 欧美亚洲禁片免费| 日韩高清在线电影| 日韩精品一区国产麻豆| 日韩精品高清不卡| 久久久91精品国产一区二区精品| 日韩vs国产vs欧美| 欧美一区二区三区在线电影| 性做久久久久久免费观看| 欧美妇女性影城| 国产美女娇喘av呻吟久久| 国产精品剧情在线亚洲| 欧美自拍丝袜亚洲| 国产一区91精品张津瑜| 亚洲视频资源在线| 欧美精品一区二区蜜臀亚洲| 99re这里只有精品视频首页| 一区二区三区欧美视频| 日韩视频免费观看高清在线视频| 国产在线精品视频| 日韩精品一二三四| 亚洲色欲色欲www| 国产亚洲综合色| 日韩免费观看高清完整版| 在线观看成人小视频| 成人午夜又粗又硬又大| 国产一区二区三区在线看麻豆| 亚洲电影中文字幕在线观看| 中文字幕不卡在线观看| 日韩欧美成人一区| 欧美丰满高潮xxxx喷水动漫| 91蜜桃在线观看| 在线免费不卡视频| 99这里只有精品| 色哟哟精品一区| 欧美性受xxxx黑人xyx性爽| k8久久久一区二区三区| 夫妻av一区二区| 成人免费视频网站在线观看| 精品一二三四区|