这次给大家带来JS HTML5做出鼠标绑定粒子流动画,JS HTML5做出鼠标绑定粒子流动画的注意事项有哪些,下面就是实战案例,一起来看一下。
nbsp;html> <meta> <title>粒子效果演示</title> <meta> <meta> <style> 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%; } </style> <p> </p><p> <canvas></canvas> </p><p></p> <script> //javascript部分 (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 canvasp; var outerp; 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('你们好'); } else{ trace("Sorry, needs a recent version of Chrome, Firefox, Opera, Safari, or Internet Explorer 9."); } } function setup(){ outerp = document.getElementById("outer"); canvasp = 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[i] = 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[i]; 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 - outerp.offsetLeft - canvasp.offsetLeft; mouseY = ev.clientY - outerp.offsetTop - canvasp.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; })(); </script>
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
以上是JS HTML5做出鼠标绑定粒子流动画的详细内容。更多信息请关注PHP中文网其他相关文章!

去掉重复并排序的方法:1、使用“Array.from(new Set(arr))”或者“[…new Set(arr)]”语句,去掉数组中的重复元素,返回去重后的新数组;2、利用sort()对去重数组进行排序,语法“去重数组.sort()”。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于Symbol类型、隐藏属性及全局注册表的相关问题,包括了Symbol类型的描述、Symbol不会隐式转字符串等问题,下面一起来看一下,希望对大家有帮助。

怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯CSS也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助!

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于对象的构造函数和new操作符,构造函数是所有对象的成员方法中,最早被调用的那个,下面一起来看一下吧,希望对大家有帮助。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于面向对象的相关问题,包括了属性描述符、数据描述符、存取描述符等等内容,下面一起来看一下,希望对大家有帮助。

方法:1、利用“点击元素对象.unbind("click");”方法,该方法可以移除被选元素的事件处理程序;2、利用“点击元素对象.off("click");”方法,该方法可以移除通过on()方法添加的事件处理程序。

foreach不是es6的方法。foreach是es3中一个遍历数组的方法,可以调用数组的每个元素,并将元素传给回调函数进行处理,语法“array.forEach(function(当前元素,索引,数组){...})”;该方法不处理空数组。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于BOM操作的相关问题,包括了window对象的常见事件、JavaScript执行机制等等相关内容,下面一起来看一下,希望对大家有帮助。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

Atom编辑器mac版下载
最流行的的开源编辑器

Dreamweaver CS6
视觉化网页开发工具

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器