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中switch语句的使用方法

jquery easyui收费的么

javascript如何删除子节点属性

html css js是什么?

js遍历对象有几种方法

如何使用js实现简单日历效果

ajax获取网页添加到div中的方法

html5 canvas绘制五角星的方法

如何在html5画布中绘制文本图形

jquery选择器怎么写

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




打赏

取消

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

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

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

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

评论

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