• 基于HTML5 Canvas 实现的 Loading 效果


    Sonic.js 是一个很小的 JavaScript 类,用于创建基于 HTML5 画布的加载图像。更强大的是 Sonic.js 还提供了基于现成的例子的创建工具,可以帮助你实现更多自定义的(Loading)加载动画效果。

    在线预览   源码下载

    实现的代码。

    html代码:

     var loaders = [
    
        {
    
             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]
            ]
        },
    
        {
    
             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]
            ]
        },
    
        {
    
             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]
            ]
        },
    
        {
    
             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]
            ]
        },
    
        {
    
             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]
            ]
        },
    
        {
    
             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]
            ]
        },
    
        {
    
             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]
            ]
        },
    
        {
    
             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]
            ]
    
        },
    
        {
    
             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';
    
                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();
    
            }

    via:http://www.w2bc.com/Article/26212

  • 相关阅读:
    放大镜功能
    background兼容IE9以下版本
    JSON解析
    vue.js 组件-全局组件和局部组件
    i++ ++i的原子性
    【转】程序员面试笔试宝典
    【转】函数调用栈 格式化操作
    【转】TCP三次握手过程
    一些面试题
    【转】HP(惠普)大中华区总裁孙振耀退休感言
  • 原文地址:https://www.cnblogs.com/liaohuolin/p/4322979.html
Copyright © 2020-2023  润新知