今天在中国移动MM论坛HTML5跨平台开发讨论区看到一个不错的示例,分享给大家咯。展示一个使用HTML5的Canvas画布API制作的,具有响应鼠标动作的具有粒子特效的动画,丝毫不必flash效果差。
先来看下演示:
http://spielzeugz.de/html5/liquid-particles.html
在动画中间点击鼠标,左键按住不动,快速移动鼠标,都会出现意外的效果的 哈哈哈~
这个HTML5特效包括3部分代码,HTML部分,js部分和CSS部分,我分别给出源码的内容。
HTML5代码部分:
index.html
<!DOCTYPE html>
<html
lang="en">
<head>
<meta
charset=utf-8>
<title>粒子效果演示- www.lampbo.org canvas 教程 </title>
<meta
name="description"
content="HTML5/canvas demo, 500 particles to play around with."
/>
<meta
name="keywords"
content="html5,canvas,javascript,particles,interactive,velocity,programming,flash"
/>
<script
type="text/javascript"
src="liquid-particles.js"></script>
<link
rel="stylesheet"
type="text/css"
href="pages.css"
/>
</head>
<body>
<div
id="outer">
<div
id="canvasContainer">
<canvas
id="mainCanvas"
width="1000"
height="560"></canvas>
<div
id="output"></div>
</div>
</div>
</script>
</body>
</html>
这个HTML文档主要定义了Canvas标签
第二部分 liquid-particles.js
(function(){
var PI_2 = Math.PI * 2;
var canvasW = 1000;
var canvasH = 560;
var numMovers = 600;
var friction = 0.96;
var movers = [];
var canvas;
var ctx;
var canvasDiv;
var outerDiv;
var mouseX;
var mouseY;
var mouseVX;
var mouseVY;
var prevMouseX;
var prevMouseY;
var isMouseDown;
function init(){
canvas = document.getElementById("mainCanvas");
if ( canvas.getContext ){
setup();
setInterval( run , 33 );
trace('interact with the mouse, occasionally click or hold down the mousebutton<br>More here: <a href="http://www.lampbo.org/category/web-development/html">lampbo.org/html5</a> | Follow us on <a href="http://www.lampbo.org/" target="_blank">LAMPBO</a> or <a href="http://feed.feedsky.com/lampbo" target="_blank">FeedSky</a>');
}
else{
trace("Sorry, needs a recent version of Chrome, Firefox, Opera, Safari, or Internet Explorer 9.");
}
}
function setup(){
outerDiv = document.getElementById("outer");
canvasDiv = document.getElementById("canvasContainer");
ctx = canvas.getContext("2d");
var i = numMovers;
while ( i-- ){
var m = new Mover();
m.x = canvasW * 0.5;
m.y = canvasH * 0.5;
m.vX = Math.cos(i) * Math.random() * 34;
m.vY = Math.sin(i) * Math.random() * 34;
movers = m;
}
mouseX = prevMouseX = canvasW * 0.5;
mouseY = prevMouseY = canvasH * 0.5;
document.onmousedown = onDocMouseDown;
document.onmouseup = onDocMouseUp;
document.onmousemove = onDocMouseMove;
}
function run(){
ctx.globalCompositeOperation = "source-over";
ctx.fillStyle = "rgba(8,8,12,0.65)";
ctx.fillRect( 0 , 0 , canvasW , canvasH );
ctx.globalCompositeOperation = "lighter";
mouseVX = mouseX - prevMouseX;
mouseVY = mouseY - prevMouseY;
prevMouseX = mouseX;
prevMouseY = mouseY;
var toDist = canvasW * 0.86;
var stirDist = canvasW * 0.125;
var blowDist = canvasW * 0.5;
var Mrnd = Math.random;
var Mabs = Math.abs;
var i = numMovers;
while ( i-- ){
var m = movers;
var x = m.x;
var y = m.y;
var vX = m.vX;
var vY = m.vY;
var dX = x - mouseX;
var dY = y - mouseY;
var d = Math.sqrt( dX * dX + dY * dY ) || 0.001;
dX /= d;
dY /= d;
if ( isMouseDown ){
if ( d < blowDist ){
var blowAcc = ( 1 - ( d / blowDist ) ) * 14;
vX += dX * blowAcc + 0.5 - Mrnd();
vY += dY * blowAcc + 0.5 - Mrnd();
}
}
if ( d < toDist ){
var toAcc = ( 1 - ( d / toDist ) ) * canvasW * 0.0014;
vX -= dX * toAcc;
vY -= dY * toAcc;
}
if ( d < stirDist ){
var mAcc = ( 1 - ( d / stirDist ) ) * canvasW * 0.00026;
vX += mouseVX * mAcc;
vY += mouseVY * mAcc;
}
vX *= friction;
vY *= friction;
var avgVX = Mabs( vX );
var avgVY = Mabs( vY );
var avgV = ( avgVX + avgVY ) * 0.5;
if( avgVX < .1 ) vX *= Mrnd() * 3;
if( avgVY < .1 ) vY *= Mrnd() * 3;
var sc = avgV * 0.45;
sc = Math.max( Math.min( sc , 3.5 ) , 0.4 );
var nextX = x + vX;
var nextY = y + vY;
if ( nextX > canvasW ){
nextX = canvasW;
vX *= -1;
}
else
if ( nextX < 0 ){
nextX = 0;
vX *= -1;
}
if ( nextY > canvasH ){
nextY = canvasH;
vY *= -1;
}
else
if ( nextY < 0 ){
nextY = 0;
vY *= -1;
}
m.vX = vX;
m.vY = vY;
m.x = nextX;
m.y = nextY;
ctx.fillStyle = m.color;
ctx.beginPath();
ctx.arc( nextX , nextY , sc , 0 , PI_2 , true );
ctx.closePath();
ctx.fill();
}
}
function onDocMouseMove( e ){
var ev = e ? e : window.event;
mouseX = ev.clientX - outerDiv.offsetLeft - canvasDiv.offsetLeft;
mouseY = ev.clientY - outerDiv.offsetTop - canvasDiv.offsetTop;
}
function onDocMouseDown( e ){
isMouseDown = true;
return
false;
}
function onDocMouseUp( e ){
isMouseDown = false;
return
false;
}
function Mover(){
this.color = "rgb(" + Math.floor( Math.random()*255 ) + "," + Math.floor( Math.random()*255 ) + "," + Math.floor( Math.random()*255 ) + ")";
this.y = 0;
this.x = 0;
this.vX = 0;
this.vY = 0;
this.size = 1;
}
function rect( context , x , y , w , h ){
context.beginPath();
context.rect( x , y , w , h );
context.closePath();
context.fill();
}
function trace( str ){
document.getElementById("output").innerHTML = str;
}
window.onload = init;
})();
最后一部分pages.css:
html, body {
text-align: center;
margin:0;
padding:0;
background: #000000;
color: #666666;
line-height: 1.25em;
}
#outer {
position: absolute;
top: 50%;
left: 50%;
width: 1px;
height: 1px;
overflow: visible;
}
#canvasContainer {
position: absolute;
width: 1000px;
height: 560px;
top: -280px;
left: -500px;
}
canvas {
border: 1px
solid
#333333;
}
a {
color: #00CBCB;
text-decoration:none;
font-weight:bold;
}
a:hover {
color:#FFFFFF;
}
#output {
font-family: Arial, Helvetica, sans-serif;
font-size: 0.75em;
margin-top:4px;
}
#footer{
font-size: 0.6em;
font-family: Arial, Helvetica, sans-serif;
position: absolute;
bottombottom:8px;
width:98%;
}
文章来源
相关推荐
在“HTML5 Canvas实现的超炫粒子效果文字动画特效源码.txt”中,可能详细记录了项目的开发思路、代码实现步骤以及可能遇到的问题和解决方案。而“js”和“css”文件夹则分别包含了项目所需的JavaScript和CSS代码,...
至于 "超炫的 HTML5 粒子效果进度条动画特效源码.txt" 文件,很可能包含了实现这个特效的详细代码和说明。通过阅读和分析这个文本文件,你可以深入了解 Jack Rugile 是如何构造粒子系统,以及如何将它与进度条结合的...
在这个“HTML5 Canvas实现的超炫粒子效果文字动画特效源码”中,我们将深入探讨如何利用Canvas API来创建引人注目的视觉体验。 首先,Canvas是一个基于矢量图形的元素,通过JavaScript来操纵。它提供了丰富的绘图...
【超酷超炫粒子效果】是一种利用HTML5技术实现的视觉特效,常见于网页背景或者交互元素中,为用户带来动态、生动的视觉体验。在本项目中,开发者通过JavaScript和CSS3创建了一个粒子动画系统,使网页看起来更加现代...
在本资源"超炫的HTML5粒子效果进度条动画特效源码.zip"中,我们将会探讨如何使用HTML5和CSS3来创建一个引人注目的粒子效果进度条动画。 首先,HTML5的`<canvas>`元素是实现粒子效果的关键。`<canvas>`提供了一个...
“Html5特效”文件很可能包含了各种使用HTML5新特性和CSS3技术的实战示例,如轮播图、下拉菜单、滑块、粒子效果、全屏背景滚动、时间线展示、悬停效果、3D转场等。这些特效不仅能够提升用户体验,还能让网页设计更具...
网页模板中的超炫HTML5粒子效果进度条动画特效是一种创新且引人注目的设计技术,它结合了HTML5的新特性、CSS3动画以及JavaScript编程,为用户提供了丰富的视觉体验。这种特效通常用于网站加载界面或者作为页面元素的...
超炫背景粒子插件是一种基于JavaScript库,特别是jQuery的特效工具,主要用于创建全屏动态的粒子移动效果。这种插件通常被用作网站背景,以提升网页的视觉吸引力和用户体验。粒子效果通常由大量微小的图形元素(粒子...
在本案例中,"HTML5响应式3D翻转动画效果特效代码"是基于jQuery 1.10.2版本实现的,这是一个广泛使用的JavaScript库,能够简化DOM操作和事件处理,让开发者能更便捷地创建复杂的交互效果。 1. HTML5响应式设计:...
而"超炫js特效"则暗示了这些特效可能包括但不限于3D转换、视差滚动、粒子动画、时间轴展示等复杂且引人注目的效果。 【压缩包子文件的文件名称列表】中的"QQ浏览器官方网站.htm"可能是一个HTML文件,它是网页的基础...
"超炫"可能意味着这个效果包含了一些高级技巧,如粒子动画、3D转换或者复杂的视觉错觉。 在"FlowerPower_files"这个压缩包文件名中,我们可以推测这可能是一个与花朵相关的项目,或者是某个以花朵为主题的动态效果...
在这个项目中,“超炫”的形容词可能意味着动画效果做得十分吸引人,利用了Flash的高级特效和动作脚本,例如粒子系统来模拟逼真的雪花飘落。 ActionScript是Flash中的编程语言,它基于ECMAScript,允许开发者添加...
最后,`html5-canvas-fire-mouse`这个压缩包文件很可能包含了实现这个特效的示例代码,包括HTML、CSS和JavaScript文件。通过研究这些代码,你可以更好地理解上述步骤的实现,并从中学习到更多关于Canvas和JavaScript...
通常,这样的资源可能包含示例代码、教程文档或演示页面,帮助开发者学习和应用这些JS特效。 总的来说,"堪比Flash的超炫JS特效"代表了JavaScript在现代Web开发中的强大能力,开发者可以借助各种库和API创造出丰富...