用H5的canvas做恐怖动画


本文摘自PHP中文网,作者php中世界最好的语言,侵删。

这次给大家带来用H5的canvas做恐怖动画用H5的canvas做恐怖动画的注意事项有哪些,下面就是实战案例,一起来看一下。

canvas可以实现一些有趣的效果,动画实现。以一个简单的页面实现了解一下基础的画图方法。

效果

万圣节快乐

预备知识

1

let canvas = document.getElementById('canvas');let context = canvas.getContext('2d');

开始路径

1

context.beginPath();

beginPath()方法在画布上开始一条绘制路径,或重置当前的路径。

移动路径

1

context.moveTo();

moveTo()方法把路径移动到画布中指定点,不创建线条。

添加线条

1

context.lineTo();

lineTo()方法添加一个新点,在画布中创建该点到指定点的线条。

画图drawImage

1

context.drawImage(image,x,y);

drawImage()方法可以在画布上绘制图像、画布或视频,也可以绘制图像的某些部分,增加/减少图像的尺寸。

获取像素数据

1

context.getImageData(x,y,width,height);

getImageData()方法可以获取画布imageData对象,该对象指定了矩形的像素数据。

在imageData对象中每个像素都存在rgba值,以数组形式存储在data属性中。

放回像素数据

1

context.putImageData(imageData,x,y);

putImageData()方法将获取的图像数据放回到画布上。

实现

html

1

<canvas id="canvas"></canvas><button id="click" class="switch">Click</button>

css

1

2

3

4

5

6

7

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

(function () {    class Halloween {        constructor(id) {            this.canvas = document.getElementById(id);            this.ctx = this.canvas.getContext('2d');            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 = '60px Verdana';            this.ctx.fillStyle = '#ffffff';            this.ctx.fillText('万圣节快乐', 350, 280);

        }        //闪电

        lightning() {            let ctx = this.ctx;

            ctx.strokeStyle = '#fff';

            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('canvas');    let canvas = document.getElementById('canvas');    let ctx = canvas.getContext('2d');    let img = new Image();

    img.src = '/images/halloween.png';

    img.onload = () => {

        halloween.initDraw(img);

    }    document.getElementById('click').onclick = () => {

        halloween.thunder();

    }

})();


1.jpg

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

前端开发中的SVG动画

canvas怎样做出黑色背景带特效碎屑烟花

以上就是用H5的canvas做恐怖动画的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

h5的canvas做出圆形进度条并显示数字百分比

介绍几款引人注目的html5/jquery动画插件详情

h5 canvas api中drawimage(图像进行缩放或裁剪)的使用实例

canvas 动态图表

canvas 学习 3---画坐标系

html5 frameset标签的替代方案是什么?frameset标签替代的解决办法

h5和c3怎样做出太阳系行星运转的动画效果

如何通过html5实现摇一摇的功能

canvas像素点操作之视频绿幕抠图

html5标准学习-文档结构详解

更多相关阅读请进入《canvas》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...