canvas实现雪花随机动态飘落效果(代码示例)


本文摘自PHP中文网,作者青灯夜游,侵删。

本篇文章给大家介绍一下使用canvas实现雪花随机动态飘落效果的方法,文中示例代码介绍的非常详细。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

用canvas实现雪花随机动态飘落,代码如下

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

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

<!DOCTYPE html>

<html lang="en">

<head>

  <meta charset="UTF-8">

  <meta name="viewport" content="width=device-width, initial-scale=1.0">

  <title>Document</title>

</head>

<style>

  body{

    margin: 0;

    padding: 0;

  }

  canvas{

    background: #000;

  }

</style>

<body>

  <canvas id = "snow">

 

  </canvas>

  <script>

    var canvas = document.getElementById('snow');

    var context = canvas.getContext('2d');

    // 获得可视区的宽高

    canvas.width = window.innerWidth;

    canvas.height = window.innerHeight;

    function snow(){

      context.save();

      // 开启路径

      context.beginPath();

      // 移动画布,确定雪花终点为中心点

      context.translate(100,100);

      //起点

      context.moveTo(-20,0);

      // 终点

      context.lineTo(20,0);

      // 线变成白色

      context.strokeStyle = '#fff';

      // 线变粗

      context.lineWidth = 10;

      // 线变圆头

      context.lineCap = 'round';

      context.stroke();

      // 角度转弧度

      var disX = Math.sin(30*Math.PI/180)*20;

      var disY = Math.sin(60*Math.PI/180)*20;

      // 画第二条线,左下到右上的线

      context.moveTo(-disX,disY);

      context.lineTo(disX,-disY);

      // 画第三条线

      context.moveTo(-disX,-disY);

      context.lineTo(disX,disY);

      context.stroke();

      context.restore();

    }

    // snow();

    //生成雪花的构造函数

    function Snow(x,y,scale,rotate,speedX,speedY,speedR){

           this.x = x;

           this.y = y;

           this.scale = scale;

           this.rotate = rotate;

           this.speedX = speedX;

           this.speedY = speedY;

           this.speedR = speedR;

          // 渲染雪花

          this.render = function(){

            context.save();

            context.beginPath();

            context.translate(this.x,this.y);

            context.scale(this.scale,this.scale);

            context.rotate(this.rotate*Math.PI/180);

            context.moveTo(-20,0);

            context.lineTo(20,0);

            context.strokeStyle = '#fff';

            context.lineWidth = 10;

            context.lineCap = 'round';

            context.stroke();

            var disX = Math.sin(30*Math.PI/180)*20;

            var disY = Math.sin(60*Math.PI/180)*20;

            context.moveTo(-disX,disY);

            context.lineTo(disX,-disY);

            context.moveTo(-disX,-disY);

            context.lineTo(disX,disY);

            context.stroke();

            context.restore();

 

          }

 

    }

    // var snow = new Snow(50,50,1,10,10,10,10);

    // snow.render();

    // 存储所有生成的雪花

    var snowArray = [];

    // 生成雪花

      function init(){

        var len = 100;

        for(var i = 0;i<len;i++){

          var x = Math.random()*canvas.width;

          var scale = Math.random()+0.5;

          var rotate = Math.random()*60;

          var speedX = Math.random()+1

          var speedY = Math.random()+5;

          var speedR = Math.random()*4+2;

          // var snow = new Snow(x,0,scale,rotate,speedX,speedY,speedR);

          // snow.render();

          (function(x,y,scale,rotate,speedX,speedY,speedR){

            setTimeout(function(){

            var snow = new Snow(x,0,scale,rotate,speedX,speedY,speedR);

            snow.render();

            snowArray.push(snow);

          },Math.random()*8000);  

          })(x,0,scale,rotate,speedX,speedY,speedR);

      }snowing();

    }init();

      // 动起来

      function snowing(){

        setInterval(function(){

          //先清除

          context.clearRect(0,0,canvas.width,canvas.height);

          for(var i = 0;i < snowArray.length;i++){

            snowArray[i].x = (snowArray[i].x+snowArray[i].speedX)%canvas.width;

            snowArray[i].y = (snowArray[i].y+snowArray[i].speedY)%canvas.height;

            snowArray[i].rotate = (snowArray[i].rotate+snowArray[i].speedR)%60;

            snowArray[i].render();

          }

        },30);

      }

     

    /**

     * sin60 = 对边/斜边 =>  对边 = sin60*斜边  =>  y=sin60*半径(r);

     */

  </script>

</body>

</html>

以上就是canvas实现雪花随机动态飘落效果(代码示例)的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

js如何实现图片的懒加载

js如何修改注册表

如何使用html5 canvas绘制文字

使用html5 canvas封装一个echarts实现不了的饼图

网页代码中js和css指的是什么

h5 canvas实现粒子时钟的详细方法

js 中 undefined 什么意思

箭头函数和普通函数区别

js怎么修改css属性

html5+canvas调用手机拍照功能实现图片上传功能(图文详解下篇)

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




打赏

取消

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

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

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

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

评论

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

    正在狠努力加载,请稍候...