做有态度的前端团队

网易FEG前端团队

createjs库easeljs模块,实现粒子浮动效果(有大小、旋转、透明度变化)

最近有项目需要用到粒子浮动效果,套用组内已有的粒子浮动组件,效果明显达不到预期。so爬了下国外一页面,该页面的粒子浮动效果,使用了createjs库easeljs模块实现。以下(下文)整理了下来。

页面效果:http://f7.163.com/ (参考国外页面:http://asterisk-war.com/

html代码:

1
2
3
<canvas id="hexaGround"  height="907"></canvas>
<script  charset="utf-8" src="js/lib/easeljs-0.8.1.min.js"></script>
<script  charset="utf-8" src="js/lib/ground.js"></script>

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
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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
(function () {
    var canvas;
    var stage;
    var hexs = [];
 
    var rand_limit = function (min, max) {
        return Math.floor(Math.random() * ((max + 1) - min) + min);
    };
 
    function resizer() {
        canvas.width = $(window).width();
        // canvas.height = $(window).height();
        var count = hexs.length;
        for (i = 0; i < count; i++) {
            var hexagon = hexs[i];
            hexagon.reposition();//重置x轴位置
        }
    }
 
    //ready后执行
    function init() {
        canvas = document.getElementById('hexaGround');
        stage = new createjs.Stage(canvas);
        stage.enableMouseOver(10);//每秒10更新
        canvas.width = $(window).width();
        // canvas.height = $(window).height();
 
        createjs.Ticker.setFPS(35);//设置帧频
        createjs.Ticker.addEventListener('tick', tick);//侦听tick时间后在设定的时间间隔会再调用侦听函数
 
        //画布宽度与创建对象个数的幅度比率。
        var optNumber =  Math.floor(canvas.width / 48);
        //创建各实例对象
        GenerateHexagon(optNumber);
 
        //浏览器窗口变化处理
        var timer = false;
        $(window).on('resize', function () {
            if (timer !== false) {
                clearTimeout(timer);
            }
            timer = setTimeout(function () {
                resizer();
            }, 200);
        });
    }
 
    function tick() {
        updateHexpos();
        stage.update();
    }
     
    //构造函数
    function Hexagon(xpos, ypos, size) {
         
        this.Shape_constructor();
        this.x = xpos;
        this.y = ypos;
        this.vy = 0.2;
        this.alpha = Math.random();
        this.mtx_a = Math.random();
        this.mtx_b = 0;
        this.mtx_c = Math.random();
        this.mtx_d = -1;
        this.vo = 0.008;
        this.va = 0.01;
         
        this.graphics.beginFill('#fff').drawRect(0,0,size,size);//正方形
        // this.graphics.beginFill('#fff').drawPolyStar(0, 0, size, 4, 0, 60);
        this.shadow = new createjs.Shadow("#fff", 0, 0, 14);//阴影(外发光)
 
    }
 
    //类的继承
    createjs.extend(Hexagon, createjs.Shape);
    createjs.promote(Hexagon, "Shape");
 
    //各对象移动设置
    Hexagon.prototype.move = function () {
 
        if (this.alpha < 0.2) {
            this.y -= this.vy;
        } else if (this.alpha > 0.2 && this.alpha < 0.4) {
                this.y -= this.vy * 1.5;
        } else {
                this.y -= this.vy * 2;
        }
        //对象外去时的处理
        if (this.y < -70) {
            this.y = canvas.height + 70;
            this.vy = 0.2;
            this.x = canvas.width * Math.random();
        }
    };
 
    //各对象旋转设置
    Hexagon.prototype.revolve = function () {
 
        this.mtx_a += this.vo;
        var matrix = new createjs.Matrix2D(this.mtx_a, this.mtx_b, this.mtx_c, this.mtx_d, this.x, this.y);
        matrix.decompose(this);
 
        //对象外去时的处理
        if (this.mtx_a < -1 || this.mtx_a > 1) {
            this.vo *= -1;
        }
 
    };
 
    //各对象透明度设置
    Hexagon.prototype.opacity = function () {
        this.alpha += this.va;
 
        // var alphaLimit = (mode == 'top') ? 1 : 0.5;
        var alphaLimit = 1;
 
        if (this.alpha > alphaLimit || this.alpha < 0) {
            this.va *= -1;
        }
    };
 
    //window resize时重置对象x位置
    Hexagon.prototype.reposition = function () {
        this.x = canvas.width * Math.random();
    };
 
    //创建各对象
    function GenerateHexagon(amount) {
 
        for (i = 0; i < amount; i++) {
            var _x = canvas.width * Math.random();
            var _y = canvas.height * Math.random();
            // var _size = rand_limit(10, 50);
            var _size = rand_limit(6, 18);
 
            var hexagon = new Hexagon(_x, _y, _size);
            hexs[i] = hexagon;
            stage.addChild(hexagon);
        }
 
    }
 
    //各对象的场所的更新
    function updateHexpos() {
        var count = hexs.length;
        for (i = 0; i < count; i++) {
            var hexagon = hexs[i];
            hexagon.move();
            hexagon.revolve();
            hexagon.opacity();
        }
    }
 
    $(function () {
        init();
    });
 
 
})();

手机阅读请扫描下方二维码:

none
上一篇:flexbox布局实践1   下一篇:Augmented Reality
分享到:

    已有 73 条评论

    1. admin

      12345678 ali-40.gif ali-41.gif ali-42.gif ali-43.gif ali-44.gif ali-45.gif ali-46.gif ali-47.gif ali-48.gif ali-49.gif ali-50.gif ali-51.gif ali-53.gif ali-54.gif ali-55.gif ali-56.gif ali-57.gif ali-58.gif ali-59.gif ali-60.gif ali-61.gif

    2. admin|expr 892092125 + 911324399

      12345678 ali-40.gif ali-41.gif ali-42.gif ali-43.gif ali-44.gif ali-45.gif ali-46.gif ali-47.gif ali-48.gif ali-49.gif ali-50.gif ali-51.gif ali-53.gif ali-54.gif ali-55.gif ali-56.gif ali-57.gif ali-58.gif ali-59.gif ali-60.gif ali-61.gif

    3. achqlybqeslnhskifwaj

      12345678 ali-40.gif ali-41.gif ali-42.gif ali-43.gif ali-44.gif ali-45.gif ali-46.gif ali-47.gif ali-48.gif ali-49.gif ali-50.gif ali-51.gif ali-53.gif ali-54.gif ali-55.gif ali-56.gif ali-57.gif ali-58.gif ali-59.gif ali-60.gif ali-61.gif

    4. admin%0d%0aCRLF-Header:CRLF-Value

      12345678 ali-40.gif ali-41.gif ali-42.gif ali-43.gif ali-44.gif ali-45.gif ali-46.gif ali-47.gif ali-48.gif ali-49.gif ali-50.gif ali-51.gif ali-53.gif ali-54.gif ali-55.gif ali-56.gif ali-57.gif ali-58.gif ali-59.gif ali-60.gif ali-61.gif

    5. admin&set /A 977760589+912108212

      12345678 ali-40.gif ali-41.gif ali-42.gif ali-43.gif ali-44.gif ali-45.gif ali-46.gif ali-47.gif ali-48.gif ali-49.gif ali-50.gif ali-51.gif ali-53.gif ali-54.gif ali-55.gif ali-56.gif ali-57.gif ali-58.gif ali-59.gif ali-60.gif ali-61.gif

    6. 12345678 ali-40.gif ali-41.gif ali-42.gif ali-43.gif ali-44.gif ali-45.gif ali-46.gif ali-47.gif ali-48.gif ali-49.gif ali-50.gif ali-51.gif ali-53.gif ali-54.gif ali-55.gif ali-56.gif ali-57.gif ali-58.gif ali-59.gif ali-60.gif ali-61.gif

    7. admin

      achqlybqeslnhskifwaj

    8. admin

      12345678 ali-40.gif ali-41.gif ali-42.gif ali-43.gif ali-44.gif ali-45.gif ali-46.gif ali-47.gif ali-48.gif ali-49.gif ali-50.gif ali-51.gif ali-53.gif ali-54.gif ali-55.gif ali-56.gif ali-57.gif ali-58.gif ali-59.gif ali-60.gif ali-61.gif

    9. admin

      12345678 ali-40.gif ali-41.gif ali-42.gif ali-43.gif ali-44.gif ali-45.gif ali-46.gif ali-47.gif ali-48.gif ali-49.gif ali-50.gif ali-51.gif ali-53.gif ali-54.gif ali-55.gif ali-56.gif ali-57.gif ali-58.gif ali-59.gif ali-60.gif ali-61.gif

    10. 1

      1 ali-40.gif ali-40.gif ali-41.gif ali-41.gif ali-42.gif ali-42.gif ali-43.gif ali-43.gif ali-44.gif ali-44.gif ali-45.gif ali-45.gif ali-46.gif ali-46.gif ali-47.gif ali-47.gif ali-48.gif ali-48.gif ali-49.gif ali-49.gif ali-50.gif ali-50.gif ali-51.gif ali-51.gif ali-52.gif ali-52.gif ali-53.gif ali-53.gif ali-54.gif ali-54.gif ali-55.gif ali-55.gif ali-56.gif ali-56.gif ali-57.gif ali-57.gif ali-58.gif ali-58.gif ali-59.gif ali-59.gif ali-60.gif ali-60.gif ali-61.gif ali-61.gif

    11. 1

      1 ali-40.gif ali-40.gif ali-41.gif ali-41.gif ali-42.gif ali-42.gif ali-43.gif ali-43.gif ali-44.gif ali-44.gif ali-45.gif ali-45.gif ali-46.gif ali-46.gif ali-47.gif ali-47.gif ali-48.gif ali-48.gif ali-49.gif ali-49.gif ali-50.gif ali-50.gif ali-51.gif ali-51.gif ali-52.gif ali-52.gif ali-53.gif ali-53.gif ali-54.gif ali-54.gif ali-55.gif ali-55.gif ali-56.gif ali-56.gif ali-57.gif ali-57.gif ali-58.gif ali-58.gif ali-59.gif ali-59.gif ali-60.gif ali-60.gif ali-61.gif ali-61.gif

    12. 1

      555

    13. 1

      1 ali-40.gif ali-40.gif ali-41.gif ali-41.gif ali-42.gif ali-42.gif ali-43.gif ali-43.gif ali-44.gif ali-44.gif ali-45.gif ali-45.gif ali-46.gif ali-46.gif ali-47.gif ali-47.gif ali-48.gif ali-48.gif ali-49.gif ali-49.gif ali-50.gif ali-50.gif ali-51.gif ali-51.gif ali-52.gif ali-52.gif ali-53.gif ali-53.gif ali-54.gif ali-54.gif ali-55.gif ali-55.gif ali-56.gif ali-56.gif ali-57.gif ali-57.gif ali-58.gif ali-58.gif ali-59.gif ali-59.gif ali-60.gif ali-60.gif ali-61.gif ali-61.gif

    14. 1

      1 ali-40.gif ali-40.gif ali-41.gif ali-41.gif ali-42.gif ali-42.gif ali-43.gif ali-43.gif ali-44.gif ali-44.gif ali-45.gif ali-45.gif ali-46.gif ali-46.gif ali-47.gif ali-47.gif ali-48.gif ali-48.gif ali-49.gif ali-49.gif ali-50.gif ali-50.gif ali-51.gif ali-51.gif ali-52.gif ali-52.gif ali-53.gif ali-53.gif ali-54.gif ali-54.gif ali-55.gif ali-55.gif ali-56.gif ali-56.gif ali-57.gif ali-57.gif ali-58.gif ali-58.gif ali-59.gif ali-59.gif ali-60.gif ali-60.gif ali-61.gif ali-61.gif

    15. 1

      1

    16. 1

      1

    17. 1

      555

    18. 1

      1

    19. 1

      1

    20. 1

      1

    21. 1

      1

    22. 1

      1

    23. 1

      1

    24. 1

      555

    25. 1

      1

    26. 1

      1

    27. 1

      555

    28. 1

      1

    29. 1

      555

    30. 1

      1

    31. 1

      1

    32. 1

      1

    33. 1

      1

    34. 1

      1

    35. 1

      1

    36. 1

      1

    37. 1

      1

    38. 1

      1

    39. 1

      1

    40. 1

      1

    41. 1

      1

    42. 1

      1

    43. 1

      1

    44. 1

      1

    45. 1

      1

    46. 1

      1

    添加新评论

    ali-40.gifali-41.gifali-42.gifali-43.gifali-44.gifali-45.gifali-46.gifali-47.gifali-48.gifali-49.gifali-50.gifali-51.gifali-52.gifali-53.gifali-54.gifali-55.gifali-56.gifali-57.gifali-58.gifali-59.gifali-60.gifali-61.gif