查看效果:http://keleyi.com/keleyi/phtml/html5/26.htm


完整代码如下:

  1 <!DOCTYPE html>
  2 <html>
  3 <head>
  4 <meta charset='UTF-8'>
  5 <title>HTML5有特色的进度条-柯乐义</title>
  6 <base target="_blank" />
  7 <style>
  8 body {
  9 background: #111;
 10 color:White;
 11 }
 12 a{color:White;}
 13 canvas {
 14 background: #111;
 15 border: 1px solid #171717;
 16 display: block;
 17 left: 50%;
 18 margin: -51px 0 0 -201px;
 19 position: absolute;
 20 top: 50%;
 21 }
 22 </style>
 23 </head>
 24 <body>
 25 <script type="text/javascript">
 26 /*==================keleyi.com============================*/
 27 /* Light Loader
 28 /*==================柯乐义================================*/
 29 var lightLoader = function (c, cw, ch) {
 30 
 31 var _this = this;
 32 this.c = c;
 33 this.ctx = c.getContext('2d');
 34 this.cw = cw;
 35 this.ch = ch;
 36 
 37 this.loaded = 0;
 38 this.loaderSpeed = .6;
 39 this.loaderHeight = 10;
 40 this.loaderWidth = 310;
 41 this.loader = {
 42 x: (this.cw / 2) - (this.loaderWidth / 2),
 43 y: (this.ch / 2) - (this.loaderHeight / 2)
 44 };
 45 this.particles = [];
 46 this.particleLift = 180;
 47 this.hueStart = 0
 48 this.hueEnd = 120;
 49 this.hue = 0;
 50 this.gravity = .15;
 51 this.particleRate = 4;
 52 
 53 /*========================================================*/
 54 /* Initialize
 55 /*========================================================*/
 56 this.init = function () {
 57 this.loop();
 58 };
 59 
 60 /*========================================================*/
 61 /* Utility Functions
 62 /*========================================================*/
 63 this.rand = function (rMi, rMa) { return ~ ~((Math.random() * (rMa - rMi + 1)) + rMi); };
 64 this.hitTest = function (x1, y1, w1, h1, x2, y2, w2, h2) { return !(x1 + w1 < x2 || x2 + w2 < x1 || y1 + h1 < y2 || y2 + h2 < y1); };
 65 
 66 /*========================================================*/
 67 /* Update Loader
 68 /*========================================================*/
 69 this.updateLoader = function () {
 70 if (this.loaded < 100) {
 71 this.loaded += this.loaderSpeed;
 72 } else {
 73 this.loaded = 0;
 74 }
 75 };
 76 
 77 /*========================================================*/
 78 /* Render Loader
 79 /*========================================================*/
 80 this.renderLoader = function () {
 81 this.ctx.fillStyle = '#000';
 82 this.ctx.fillRect(this.loader.x, this.loader.y, this.loaderWidth, this.loaderHeight);
 83 
 84 this.hue = this.hueStart + (this.loaded / 100) * (this.hueEnd - this.hueStart);
 85 
 86 var newWidth = (this.loaded / 100) * this.loaderWidth;
 87 this.ctx.fillStyle = 'hsla(' + this.hue + ', 100%, 40%, 1)';
 88 this.ctx.fillRect(this.loader.x, this.loader.y, newWidth, this.loaderHeight);
 89 
 90 this.ctx.fillStyle = '#222';
 91 this.ctx.fillRect(this.loader.x, this.loader.y, newWidth, this.loaderHeight / 2);
 92 };
 93 
 94 /*========================================================*/
 95 /* Particles
 96 /*========================================================*/
 97 this.Particle = function () {
 98 this.x = _this.loader.x + ((_this.loaded / 100) * _this.loaderWidth) - _this.rand(0, 1);
 99 this.y = _this.ch / 2 + _this.rand(0, _this.loaderHeight) - _this.loaderHeight / 2;
100 this.vx = (_this.rand(0, 4) - 2) / 100;
101 this.vy = (_this.rand(0, _this.particleLift) - _this.particleLift * 2) / 100;
102 this.width = _this.rand(1, 4) / 2;
103 this.height = _this.rand(1, 4) / 2;
104 this.hue = _this.hue;
105 };
106 
107 this.Particle.prototype.update = function (i) {
108 this.vx += (_this.rand(0, 6) - 3) / 100;
109 this.vy += _this.gravity;
110 this.x += this.vx;
111 this.y += this.vy;
112 
113 if (this.y > _this.ch) {
114 _this.particles.splice(i, 1);
115 }
116 };
117 
118 this.Particle.prototype.render = function () {
119 _this.ctx.fillStyle = 'hsla(' + this.hue + ', 100%, ' + _this.rand(50, 70) + '%, ' + _this.rand(20, 100) / 100 + ')';
120 _this.ctx.fillRect(this.x, this.y, this.width, this.height);
121 };
122 
123 this.createParticles = function () {
124 var i = this.particleRate;
125 while (i--) {
126 this.particles.push(new this.Particle());
127 };
128 };
129 
130 this.updateParticles = function () {
131 var i = this.particles.length;
132 while (i--) {
133 var p = this.particles[i];
134 p.update(i);
135 };
136 };
137 
138 this.renderParticles = function () {
139 var i = this.particles.length;
140 while (i--) {
141 var p = this.particles[i];
142 p.render();
143 };
144 };
145 
146 
147 /*========================================================*/
148 /* Clear Canvas
149 /*========================================================*/
150 this.clearCanvas = function () {
151 this.ctx.globalCompositeOperation = 'source-over';
152 this.ctx.clearRect(0, 0, this.cw, this.ch);
153 this.ctx.globalCompositeOperation = 'lighter';
154 };
155 
156 /*========================================================*/
157 /* Animation Loop 柯 乐 义
158 /*========================================================*/
159 this.loop = function () {
160 var loopIt = function () {
161 requestAnimationFrame(loopIt, _this.c);
162 _this.clearCanvas();
163 
164 _this.createParticles();
165 
166 _this.updateLoader();
167 _this.updateParticles();
168 
169 _this.renderLoader();
170 _this.renderParticles();
171 
172 };
173 loopIt();
174 };
175 
176 };
177 
178 /*========================================================*/
179 /* Check Canvas Support
180 /*========================================================*/
181 var isCanvasSupported = function () {
182 var elem = document.createElement('canvas');
183 return !!(elem.getContext && elem.getContext('2d'));
184 };
185 
186 /*========================================================*/
187 /* Setup requestAnimationFrame
188 /*========================================================*/
189 var setupRAF = function () {
190 var lastTime = 0;
191 var vendors = ['ms', 'moz', 'webkit', 'o'];
192 for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
193 window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];
194 window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];
195 };
196 
197 if (!window.requestAnimationFrame) {
198 window.requestAnimationFrame = function (callback, element) {
199 var currTime = new Date().getTime();
200 var timeToCall = Math.max(0, 16 - (currTime - lastTime));
201 var id = window.setTimeout(function () { callback(currTime + timeToCall); }, timeToCall);
202 lastTime = currTime + timeToCall;
203 return id;
204 };
205 };
206 
207 if (!window.cancelAnimationFrame) {
208 window.cancelAnimationFrame = function (id) {
209 clearTimeout(id);
210 };
211 };
212 };
213 
214 /*========================================================*/
215 /* Define Canvas and Initialize
216 /*========================================================*/
217 if (isCanvasSupported) {
218 var c = document.createElement('canvas');
219 c.width = 400;
220 c.height = 100;
221 var cw = c.width;
222 var ch = c.height;
223 document.body.appendChild(c);
224 var cl = new lightLoader(c, cw, ch);
225 
226 setupRAF();
227 cl.init();
228 }
229 </script>
230 <div style="position:absolute; top: 0;width:100%">
231 <div class="footer-banner" style="width:728px;margin:10px auto;color:White">
232 HTML5进度条<br />
233 请使用<a href="http://keleyi.com/a/bjac/g039tue3.htm">支持HTML5的浏览器</a>查看本页 <a href="http://keleyi.com/a/bjad/8lva67xl.htm">原文</a></div>
234 </div>
235 
236 </body>
237 </html>

转载自:http://keleyi.com/a/bjad/8lva67xl.htm

web前端资源:http://www.cnblogs.com/jihua/p/webfront.html

posted on 2014-12-07 08:44  计划  阅读(4535)  评论(0编辑  收藏  举报