亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

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

Canvas制作的下雨動畫的示例

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

簡介

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

效果截圖:

Canvas動畫基礎

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

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

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

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

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

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

使用方法如下:

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

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

雨滴下落效果

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

那么來繪制個雨滴看看。首先準備一個畫板:

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;//設置canvas寬、高
var clearColor = 'rgba(0, 0, 0, .1)';//畫板背景,注意最后的透明度0.1 這是產生疊加效果的基礎

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

function RainDrop(){}
//雨滴對象 這是繪制雨滴動畫的關鍵
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;//未達到底部,增加雨滴y坐標
        }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,否則會清空前面的雨滴,導致不能產生疊加的效果
    r.draw();//繪制雨滴
    requestAnimationFrame(anim);//控制動畫幀
}

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

漣漪效果

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

代碼如下(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;//設置canvas寬、高
var clearColor = 'rgba(0, 0, 0, .1)';//畫板背景,注意最后的透明度0.1 這是產生疊加效果的基礎

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

function Rippling(){}
//漣漪對象 這是漣漪動畫的主要部分
Rippling.prototype = {
    init:function(){
        this.x = random(0,w);//漣漪x坐標
        this.y = random(h * .8, h * .9);//漣漪y坐標
        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();//更新坐標
    },
    update:function(){
        if(this.a > .03){
            this.w += this.vw;//寬度增長
            this.h += this.vh;//高度增長
            if(this.w > 100){
                this.a *= this.va;//當寬度超過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();

總結

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

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

標簽:咸寧 南京 酒泉 十堰 佳木斯 淮安 廣西 西寧

巨人網絡通訊聲明:本文標題《Canvas制作的下雨動畫的示例》,本文關鍵詞  Canvas,制作,的,下雨,動,畫的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Canvas制作的下雨動畫的示例》相關的同類信息!
  • 本頁收集關于Canvas制作的下雨動畫的示例的相關信息資訊供網民參考!
  • 推薦文章
    99热精品一区| 国产麻豆精品视频| 成人a级高清视频在线观看| 一级毛片看真人在线视频| 香蕉视频久久| 国产国语在线播放视频| 免费毛片播放| 91麻豆tv| 国产麻豆精品hdvideoss| 国产视频一区二区在线播放| 日日爽天天| 免费国产一级特黄aa大片在线| 国产高清视频免费观看| 九九九国产| 精品视频在线看 | 国产成人欧美一区二区三区的| 99色视频在线| 日韩女人做爰大片| 一 级 黄 中国色 片| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 九九九国产| 国产一区精品| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 国产成人精品综合在线| 91麻豆国产福利精品| 99久久网站| 欧美激情在线精品video| 99色视频在线| 亚洲女初尝黑人巨高清在线观看| 青青青草影院| 亚洲精品中文一区不卡| 日韩中文字幕在线观看视频| 999久久66久6只有精品| 日本特黄一级| 九九久久国产精品| 一级片片| 色综合久久天天综合绕观看| 久久精品成人一区二区三区| 二级特黄绝大片免费视频大片| 成人免费福利片在线观看| 韩国毛片免费大片| 尤物视频网站在线观看| 久久99爰这里有精品国产| 一级女性大黄生活片免费| 国产高清视频免费观看| 日韩在线观看视频黄| 欧美电影免费看大全| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 午夜在线观看视频免费 成人| 日韩综合| 精品国产三级a∨在线观看| 四虎影视久久久| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 精品视频免费观看| 亚洲天堂免费观看| 精品在线观看一区| 国产伦久视频免费观看视频| 欧美激情一区二区三区在线 | 99久久网站| 久久国产精品自由自在| 国产极品精频在线观看| 麻豆网站在线看| 国产国语在线播放视频| 日韩在线观看免费| 国产高清视频免费观看| 日韩综合| 九九免费精品视频| 日韩中文字幕一区| 成人影视在线观看| 国产一区二区精品尤物| 日日夜夜婷婷| 一级毛片看真人在线视频| 青青久久网| 99色播| 亚洲爆爽| 欧美大片a一级毛片视频| 在线观看成人网| 久久国产精品自由自在| 国产成人欧美一区二区三区的| 天天做人人爱夜夜爽2020毛片| 天天色色色| 精品视频免费在线| 韩国三级香港三级日本三级la | 国产精品123| 成人影院一区二区三区| 精品国产三级a∨在线观看| 国产麻豆精品视频| 一级女性全黄生活片免费| 亚洲精品影院一区二区| 国产成人欧美一区二区三区的| 精品国产一级毛片| 精品国产香蕉在线播出| 成人免费观看的视频黄页| 亚洲精品久久玖玖玖玖| 欧美日本免费| 97视频免费在线观看| 日韩在线观看视频网站| 久久国产精品自由自在| 免费一级片在线观看| 精品国产亚洲人成在线| 国产国产人免费视频成69堂| 亚洲 国产精品 日韩| 日本在线不卡视频| 深夜做爰性大片中文| 国产福利免费观看| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 国产不卡在线观看| 亚洲第一色在线| 天天色色色| 精品视频在线观看免费| 91麻豆精品国产综合久久久| 亚欧乱色一区二区三区| 国产高清视频免费观看| 国产美女在线观看| 可以在线看黄的网站| 国产一区二区精品| 天天做人人爱夜夜爽2020毛片| 国产一区二区精品| 欧美激情在线精品video| 成人免费观看的视频黄页| 九九九国产| 日本特黄特黄aaaaa大片| 成人高清视频免费观看| 精品视频在线看 | 亚洲女初尝黑人巨高清在线观看| 日韩综合| 国产福利免费观看| 韩国毛片免费大片| 天堂网中文在线| 亚洲精品影院一区二区| 久久国产精品自由自在| 国产视频久久久| 亚洲第一页色| 麻豆午夜视频| 久久精品道一区二区三区| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 91麻豆精品国产综合久久久| 天天做日日干| 久久国产精品自由自在| 亚洲精品中文一区不卡| 精品视频一区二区三区| 麻豆网站在线看| 国产视频在线免费观看| 欧美一级视| 亚洲第一色在线| 精品视频在线观看免费| 国产原创中文字幕| 黄视频网站免费观看| 九九久久国产精品| 成人a大片高清在线观看| 日韩免费在线视频| 99久久精品国产免费| 国产亚洲精品aaa大片| 成人a级高清视频在线观看| 精品视频免费在线| 韩国毛片免费大片| 国产亚洲精品aaa大片| 久久精品免视看国产明星| 日韩av成人| 999久久66久6只有精品| 精品视频在线看 | 日韩中文字幕在线观看视频| 在线观看成人网| 黄视频网站免费观看| 久久99中文字幕| 国产欧美精品午夜在线播放| 成人免费一级毛片在线播放视频| 日韩中文字幕一区| 国产高清视频免费观看| 国产欧美精品午夜在线播放| 欧美1区| 亚洲第一页色| 亚洲精品中文一区不卡| 午夜精品国产自在现线拍| 尤物视频网站在线观看| 国产成人欧美一区二区三区的| 免费的黄色小视频| 一级片片| 午夜激情视频在线观看| 99热精品一区| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 免费的黄色小视频| 久久精品免视看国产明星| 一本高清在线| 国产亚洲精品aaa大片| 色综合久久天天综合观看| 青青青草影院| 亚洲精品影院一区二区| 午夜精品国产自在现线拍| 日韩中文字幕一区| 精品视频在线观看免费| 日本特黄一级| 日韩中文字幕一区| 日本特黄特黄aaaaa大片| 一级毛片视频免费| 成人a大片高清在线观看| 欧美国产日韩在线| 亚洲 国产精品 日韩| 97视频免费在线观看| 韩国三级香港三级日本三级la |