首頁 > web前端 > H5教程 > 主體

用H5的canvas做恐怖動畫

php中世界最好的语言
發布: 2018-03-13 16:33:45
原創
3356 人瀏覽過

這次帶給大家用H5的canvas來做恐怖動畫,用H5的canvas做恐怖動畫的注意事項有哪些,以下就是實戰案例,一起來看一下。

canvas可以實現一些有趣的效果,動畫實作。以一個簡單的頁面實作了解一下基礎的畫圖方法。

效果

萬聖節快樂

預備知識

let canvas = document.getElementById('canvas');let context = canvas.getContext('2d');
登入後複製

開始路徑

context.beginPath();
登入後複製

beginPath()方法在畫布上開始一條繪製路徑,或重置目前的路徑。

移動路徑

context.moveTo();
登入後複製

moveTo()方法把路徑移到畫布中指定點,不建立線條。

新增線條

context.lineTo();
登入後複製

lineTo()方法新增一個新點,在畫布中建立該點到指定點的線條。

畫圖drawImage

context.drawImage(image,x,y);
登入後複製

drawImage()方法可以在畫布上繪製圖像、畫布或視頻,也可以繪製圖像的某些部分,增加/減少圖像的尺寸。

取得像素資料

context.getImageData(x,y,width,height);
登入後複製

getImageData()方法可以取得畫布imageData對象,該物件指定了矩形的像素資料。

在imageData物件中每個像素都存在rgba值,以數組形式儲存在data屬性中。

放回像素資料

context.putImageData(imageData,x,y);
登入後複製

putImageData()方法將取得的影像資料放回畫布上。

實作

html

<canvas id="canvas"></canvas><button id="click" class="switch">Click</button>
登入後複製

css

#
html,body,canvas {    width: 100%;    height: 100%;    margin: 0;
}.switch {    position: absolute;    top: 70%;    right: 10%;    width: 50px;    height: 50px;    border-radius: 50px;    outline: none;    cursor: pointer;    animation: switch-animate alternate infinite ease 1s 0s;
}
@keyframes switch-animate {    from {        box-shadow: 0 0 30px #ece9c5;
    }    to {        box-shadow: 0 0 100px #eae5a7;
    }
}
登入後複製

js

(function () {    class Halloween {        constructor(id) {            this.canvas = document.getElementById(id);            this.ctx = this.canvas.getContext(&#39;2d&#39;);            this.w = this.canvas.width;            this.h = this.canvas.height;            this.data = [];
        }        //初始画布
        initDraw(img) {            this.w = this.canvas.width = img.width;            this.h = this.canvas.height = img.height;            this.ctx.drawImage(img, 0, 0);            this.data = this.ctx.getImageData(0, 0, this.w, this.h);
        }        //显示文字
        drawText() {            this.ctx.font = &#39;60px Verdana&#39;;            this.ctx.fillStyle = &#39;#ffffff&#39;;            this.ctx.fillText(&#39;万圣节快乐&#39;, 350, 280);
        }        //闪电
        lightning() {            let ctx = this.ctx;
            ctx.strokeStyle = &#39;#fff&#39;;
            ctx.lineWidth = 2;
            ctx.beginPath();
            ctx.moveTo(800, 10);
            ctx.lineTo(600, 100);
            ctx.lineTo(500, 200);
            ctx.stroke();
            ctx.beginPath();
            ctx.moveTo(600, 100);
            ctx.lineTo(650, 170);
            ctx.stroke()
        }        //打雷
        thunder() {            let timer = Math.floor(800 * Math.random());            this.reverse();            this.lightning();            this.drawText();
            setTimeout(() => {                this.reset();
            }, timer);
        }        //反转画布
        reverse() {            let imgData = this.ctx.getImageData(0, 0, this.w, this.h);            for (var i = 0, len = imgData.data.length; i < len; i += 4) {
                imgData.data[i] = 255 - imgData.data[i];
                imgData.data[i + 1] = 255 - imgData.data[i + 1];
                imgData.data[i + 2] = 255 - imgData.data[i + 2];
                imgData.data[i + 3] = 255;
            }            this.ctx.putImageData(imgData, 0, 0);
        }        //重置画布
        reset() {            this.ctx.putImageData(this.data, 0, 0);
        }
    }    let halloween = new Halloween(&#39;canvas&#39;);    let canvas = document.getElementById(&#39;canvas&#39;);    let ctx = canvas.getContext(&#39;2d&#39;);    let img = new Image();
    img.src = &#39;/images/halloween.png&#39;;
    img.onload = () => {
        halloween.initDraw(img);
    }    document.getElementById(&#39;click&#39;).onclick = () => {
        halloween.thunder();
    }
})();
登入後複製


用H5的canvas做恐怖動畫

相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!

推薦閱讀:

前端開發中的SVG動畫

#canvas怎麼做出黑色背景帶特效碎屑煙火

#

以上是用H5的canvas做恐怖動畫的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!