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

在线预览   源码下载

实现的代码。

html代码:

 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'; 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

基于HTML5 Canvas 实现的 Loading 效果的更多相关文章

  1. 基于HTML5 Canvas可撕裂布料效果

    分享一款布料效果的 HTML5 Canvas 应用演示,效果逼真.你会看到,借助 Canvas 的强大绘图和动画功能,只需很少的代码就能实现让您屏息凝神的效果. 在线预览   源码下载 实现的代码. ...

  2. 基于HTML5 Canvas粒子效果文字动画特效

    之前我们分享过很多超酷的文字特效,其中也有利用HTML5和CSS3的.今天我们要来分享一款基于HTML5 Canvas的文字特效,输入框中输入想要展示的文字,回车后即可在canvas上绘制出粒子效果的 ...

  3. 基于HTML5 Canvas生成粒子效果的人物头像

    前面我们分享过一个HTML5 Canvas实现的图像马赛克模糊效果,HTML5处理图片真的非常简单.今天我们要再利用HTML5 Canvas实现一个粒子效果的人物头像,你可以任意选择一张头像图片,接下 ...

  4. 超酷!!HTML5 Canvas 水流样式 Loading 动画

    今天我们要分享另外一款基于HTML5 Canvas的液体流动样式Loading加载动画,这款Loading动画在加载时会呈现液体流动的动画效果,并且由于和背景颜色的对比,也略微呈现发光的动画效果. 效 ...

  5. 基于HTML5 Canvas实现的图片马赛克模糊特效

    效果请点击下面网址: http://hovertree.com/texiao/html5/1.htm 一.开门见山受美国肖像画家Chuck Close的启发,此脚本通过使用HTML5 canvas元素 ...

  6. 基于html5 canvas和js实现的水果忍者网页版

    今天爱编程小编给大家分享一款基于html5 canvas和js实现的水果忍者网页版. <水果忍者>是一款非常受喜欢的手机游戏,刚看到新闻说<水果忍者>四周年新版要上线了.网页版 ...

  7. 基于 HTML5 Canvas 的智能安防 SCADA 巡逻模块

    基于 HTML5 Canvas 的智能安防 SCADA 巡逻模块 前言 最近学习了 HT for Web flow 插件,除了正常的 flow 效果,其中还有两个十分好用的两个接口 getPercen ...

  8. 基于HTML5 Canvas和jQuery 的绘图工具的实现

    简单介绍 HTML5 提供了强大的Canvas元素.使用Canvas并结合Javascript 能够实现一些很强大的功能.本文就介绍一下基于HTML5 Canvas 的绘图工具的实现.废话少说,先看成 ...

  9. 18个基于 HTML5 Canvas 开发的图表库

    如今,HTML5 可谓如众星捧月一般,受到许多业内巨头的青睐.很多Web开发者也尝试着用 HTML 5 来制作各种各样的富 Web 应用.HTML 5 规范引进了很多新特性,其中之一就是 Canvas ...

随机推荐

  1. java.lang.IllegalArgumentException:Document base ……does not exist or is not a readable directory错误的解决方案

    关于Tomcat的 Document base ……does not exist or is not a readable directory错误 java.lang.IllegalArgumentE ...

  2. git/github运用

    了解git和svn很久了,但是一直没有拿来做过版本控制管理,虽然svn有用到过,但是觉得还是运用git的比较多吧,尤其github. Git术语                             ...

  3. 恢复计算机崩溃数据的五款最佳Linux发行版

    嗨,Linux 新手们!你们在尝试运行命令时有没有搞坏过计算机系统?我相信你们有过这种经历.这一幕经常发生:你想尝试运行命令,或者安装测试更新版,结果下一次重启时计算机就崩溃了.我在本文将逐一介绍五款 ...

  4. T-SQL 之 公用表表达式(CTE)

    在编写T-SQL代码时,往往需要临时存储某些结果集.在CTE之前常用的两种临时存储结果集为:临时表和表变量.除此之外,还可以使用公用表表达式的方法. 公用表表达式(Common Table Expre ...

  5. java创建二叉树并实现非递归中序遍历二叉树

    java创建二叉树并递归遍历二叉树前面已有讲解:http://www.cnblogs.com/lixiaolun/p/4658659.html. 在此基础上添加了非递归中序遍历二叉树: 二叉树类的代码 ...

  6. CentOS 6.2下二进制安装 MySQL 5.6

    在CentOS 6.2上 二进制方式安装 MySQL5.6二进制包 可以参考这篇文章: http://www.cnblogs.com/xiaoit/p/3988640.html 一路配置下来很顺利.. ...

  7. 在Jquery validation里验证通过后,自定义提交不同的action路径,适合一个窗口既可以作为添加对话框也可以作为编辑对话框

    $("#myform").validate({ debug: true, //调试模式取消submit的默认提交功能 ignore: '#Password,#ConfirmPass ...

  8. Java泛型中extends和super的理解

    作者:zhang siege链接:https://www.zhihu.com/question/20400700/answer/91106397来源:知乎著作权归作者所有.商业转载请联系作者获得授权, ...

  9. 〖Android〗(CM10.2)Android4.2/4.3中的boot.img打包方法(合适三星exynos4 CPU)

    #!/bin/bash - #=============================================================================== # # F ...

  10. 一次安装win10 ubuntu16.0经过记录

    步骤摘要 三个U盘: 1.制作WIN8 PE启动盘,使用的软件为“U深度装机版”,可自行百度下载 2.制作WIN10系统安装盘,使用UltraISO,这里使用的win10镜像为: 链接: http:/ ...