HTML5 画布的加载图像插件

所属分类:UI-加载

 40312  394  查看评论 (2)
分享到微信朋友圈
X
HTML5 画布的加载图像插件 ie兼容9
<script src="../src/sonic.js"></script>
<script>

var loaders = [

    {

        width: 100,
        height: 50,
        padding: 10,

        stepsPerFrame: 2,
        trailLength: 1,
        pointDistance: .03,

        strokeColor: '#FF7B24',
        
        step: 'fader',

        multiplier: 2,

        setup: function() {
            this._.lineWidth = 5;
        },

        path: [
        
            ['arc', 10, 10, 10, -270, -90],
            ['bezier', 10, 0, 40, 20, 20, 0, 30, 20],
            ['arc', 40, 10, 10, 90, -90],
            ['bezier', 40, 0, 10, 20, 30, 0, 20, 20]
        ]
    },

    {

        width: 30,
        height: 30,

        stepsPerFrame: 2,
        trailLength: .3,
        pointDistance: .1,
        padding: 10,

        fillColor: '#D4FF00',
        strokeColor: '#FFF',

        setup: function() {
            this._.lineWidth = 20;
        },

        path: [
            ['line', 0, 0, 30, 0],
            ['line', 30, 0, 30, 30],
            ['line', 30, 30, 0, 30],
            ['line', 0, 30, 0, 0]
        ]
    },

    {

        width: 100,
        height: 100,

        stepsPerFrame: 1,
        trailLength: 1,
        pointDistance: .025,

        strokeColor: '#05E2FF',

        fps: 20,

        setup: function() {
            this._.lineWidth = 2;
        },
        step: function(point, index) {

            var cx = this.padding + 50,
                cy = this.padding + 50,
                _ = this._,
                angle = (Math.PI/180) * (point.progress * 360);

            this._.globalAlpha = Math.max(.5, this.alpha);

            _.beginPath();
            _.moveTo(point.x, point.y);
            _.lineTo(
                (Math.cos(angle) * 35) + cx,
                (Math.sin(angle) * 35) + cy
            );
            _.closePath();
            _.stroke();

            _.beginPath();
            _.moveTo(
                (Math.cos(-angle) * 32) + cx,
                (Math.sin(-angle) * 32) + cy
            );
            _.lineTo(
                (Math.cos(-angle) * 27) + cx,
                (Math.sin(-angle) * 27) + cy
            );
            _.closePath();
            _.stroke();

        },
        path: [
            ['arc', 50, 50, 40, 0, 360]
        ]
    },

    {

        width: 100,
        height: 50,

        stepsPerFrame: 1,
        trailLength: 1,
        pointDistance: .1,
        fps: 15,
        padding: 10,
        //step: 'fader',

        fillColor: '#FF2E82',

        setup: function() {
            this._.lineWidth = 20;
        },

        path: [
            ['line', 0, 20, 100, 20],
            ['line', 100, 20, 0, 20]
        ]
    },

    {

        width: 100,
        height: 100,

        stepsPerFrame: 7,
        trailLength: .7,
        pointDistance: .01,
        fps: 30,

        setup: function() {
            this._.lineWidth = 10;
        },

        path: [
            ['line', 20, 70, 50, 20],
            ['line', 50, 20, 80, 70],
            ['line', 80, 70, 20, 70]
        ]
    },

    {

        width: 100,
        height: 100,

        stepsPerFrame: 4,
        trailLength: 1,
        pointDistance: .01,
        fps: 25,

        fillColor: '#FF7B24',

        setup: function() {
            this._.lineWidth = 10;
        },

        step: function(point, i, f) {

            var progress = point.progress,
                degAngle = 360 * progress,
                angle = Math.PI/180 * degAngle,
                angleB = Math.PI/180 * (degAngle - 180),
                size = i*5;

            this._.fillRect(
                Math.cos(angle) * 25 + (50-size/2),
                Math.sin(angle) * 15 + (50-size/2),
                size,
                size
            );

            this._.fillStyle = '#63D3FF';

            this._.fillRect(
                Math.cos(angleB) * 15 + (50-size/2),
                Math.sin(angleB) * 25 + (50-size/2),
                size,
                size
            );

            if (point.progress == 1) {

                this._.globalAlpha = f < .5 ? 1-f : f;

                this._.fillStyle = '#EEE';

                this._.beginPath();
                this._.arc(50, 50, 5, 0, 360, 0);
                this._.closePath();
                this._.fill();

            }


        },

        path: [
            ['line', 40, 10, 60, 90]
        ]
    },

    {

        width: 100,
        height: 100,

        stepsPerFrame: 3,
        trailLength: 1,
        pointDistance: .01,
        fps: 30,
        step: 'fader',

        strokeColor: '#D4FF00',

        setup: function() {
            this._.lineWidth = 6;
        },

        path: [
            ['arc', 50, 50, 20, 360, 0]
        ]
    },

    {

        width: 100,
        height: 100,

        stepsPerFrame: 1,
        trailLength: 1,
        pointDistance: .02,
        fps: 30,

        fillColor: '#05E2FF',

        step: function(point, index) {
            
            this._.beginPath();
            this._.moveTo(point.x, point.y);
            this._.arc(point.x, point.y, index * 7, 0, Math.PI*2, false);
            this._.closePath();
            this._.fill();

        },

        path: [
            ['arc', 50, 50, 30, 0, 360]
        ]

    },

    {

        width: 100,
        height: 100,

        stepsPerFrame: 1,
        trailLength: 1,
        pointDistance: .05,

        strokeColor: '#FF2E82',

        fps: 20,

        setup: function() {
            this._.lineWidth = 4;
        },
        step: function(point, index) {

            var cx = this.padding + 50,
                cy = this.padding + 50,
                _ = this._,
                angle = (Math.PI/180) * (point.progress * 360),
                innerRadius = index === 1 ? 10 : 25;

            _.beginPath();
            _.moveTo(point.x, point.y);
            _.lineTo(
                (Math.cos(angle) * innerRadius) + cx,
                (Math.sin(angle) * innerRadius) + cy
            );
            _.closePath();
            _.stroke();

        },
        path: [
            ['arc', 50, 50, 40, 0, 360]
        ]
    }

];

var d, a, container = document.getElementById('in');


for (var i = -1, l = loaders.length; ++i < l;) {
    
    d = document.createElement('div');
    d.className = 'l';
    console.log(i);
    a = new Sonic(loaders[i]);

    d.appendChild(a.canvas);
    container.appendChild(d);

    a.canvas.style.marginTop = (150 - a.fullHeight) / 2 + 'px';
    a.canvas.style.marginLeft = (150 - a.fullWidth) / 2 + 'px';

    a.play();

}

</script>


相关插件-加载

progress 标签制作加载(原创)

利用HTNL5新标签制作进度条加载,代码非常简单且实用。
  加载
 13239  213
  加载
 36257  365

11种Loading 动态效果+随机样式

css实现动态loading 效果
  加载
 69277  506

JS简单进度条

再也不愁JS进度条了
  加载
 39356  332

讨论这个项目(2)回答他人问题或分享插件使用方法奖励jQ币 评论用户自律公约

    1?5?8?0?7?3?3?4?0?0?0? 0
    2016/3/4 13:03:30
    非常漂亮 , 感谢分享 ! 好人一生平安 ! 回复
    西瓜 0
    2014/10/8 8:06:29
    非常不错,感谢分享。 回复
😃
  • 😀
  • 😉
  • 😥
  • 😵
  • 😫
  • 😘
  • 😡
  • 👍
  • 🌹
  • 👏
  • 🍺
  • 🍉
  • 🌙
  • 💖
  • 💔
😃
  • 😀
  • 😉
  • 😥
  • 😵
  • 😫
  • 😘
  • 😡
  • 👍
  • 🌹
  • 👏
  • 🍺
  • 🍉
  • 🌙
  • 💖
  • 💔
取消回复