JS+HTML5做出鼠标绑定粒子流动画

这次给大家带来JS+HTML5做出鼠标绑定粒子流动画,JS+HTML5做出鼠标绑定粒子流动画的注意事项有哪些,下面就是实战案例,一起来看一下。

粒子效果演示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%;}

//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 canvasW ){nextX = canvasW;vX *= -1;}else if ( nextX 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;})();

登录后复制

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

Vue+canvas实现移动端手写板步骤详解

vue裁切预览组件使用详解

以上就是JS+HTML5做出鼠标绑定粒子流动画的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2761949.html

(0)
上一篇 2025年3月8日 09:42:04
下一篇 2025年2月28日 04:57:37

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • JS判断某个字符串包含内容总结

    这次给大家带来JS判断某个字符串包含内容总结,JS判断某个字符串包含内容总结的注意事项有哪些,下面就是实战案例,一起来看一下。 String对象的方法 方法一: indexOf()   (推荐) var str = “123” consol…

    编程技术 2025年3月8日
    200
  • VueJs中V-bind指令怎样使用

    这次给大家带来VueJs中V-bind指令怎样使用,VueJs中V-bind指令使用的注意事项有哪些,下面就是实战案例,一起来看一下。 引子 v-bind  主要用于属性绑定,Vue官方提供了一个简写方式 :bind,例如: 登录后复制  …

    编程技术 2025年3月8日
    200
  • nodejs日志模块winston使用方法总结

    这次给大家带来nodejs日志模块winston使用方法总结,nodejs日志模块winston使用的注意事项有哪些,下面就是实战案例,一起来看一下。 winston 日志模块 在使用 nodejs winston 模块中,加上相关的两个模…

    编程技术 2025年3月8日
    200
  • JavaScript中继承的几种实现方式

    本篇文章将为你介绍javascript中继承的几种实现方式,希望在看完本篇文章后,各位对javascript的继承有一定的了解! JavaScript中继承的几种实现方式 继承 想要实现继承,首先就得有个父类(构造函数)来提供属性和方法。 …

    2025年3月8日
    200
  • 解析Json字符串方法总结

    这次给大家带来解析Json字符串方法总结,解析Json字符串的注意事项有哪些,下面就是实战案例,一起来看一下。 下面将介绍日常中使用的三种解析json字符串的方法  1.首先,我们先看一下什么是 json 格式字符串数据,很简单,就是 js…

    编程技术 2025年3月8日
    200
  • redis在nodejs中应用案例详解

    这次给大家带来redis在nodejs中应用案例详解,redis在nodejs中应用的注意事项有哪些,下面就是实战案例,一起来看一下。 redis是一个性能非常好的内存数据库,部署在应用程序和mysql数据中间做注意事项库,可以极大的提升应…

    编程技术 2025年3月8日
    200
  • 不用JS做出菜单打开与关闭

    这次给大家带来不用JS做出菜单打开与关闭,不用JS做出菜单打开与关闭的注意事项有哪些,下面就是实战案例,一起来看一下。 我在写有菜单栏的网页时,基本都会用响应式设计来适配移动端,例如把不重要的菜单选项隐藏,或者创建一个菜单按钮来控制的菜单的…

    2025年3月8日
    200
  • Vue项目中使用d3.js案例详解

    这次给大家带来Vue项目中使用d3.js案例详解,Vue项目中使用d3.js的注意事项有哪些,下面就是实战案例,一起来看一下。 之前写一个 Demo里面 有些东西要使用d3实现一些效果 但是在很多论坛找资源都找不到可以在Vue里面使用D3.…

    2025年3月8日
    200
  • 调用缓存实现JS方法步骤详解

    这次给大家带来调用缓存实现JS方法步骤详解,调用缓存实现JS方法的注意事项有哪些,下面就是实战案例,一起来看一下。 1.什么是方法重载 方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数。简而言之就是:…

    编程技术 2025年3月8日
    200
  • JS实现缓冲运动作用详解

    这次给大家带来JS实现缓冲运动作用详解,JS实现缓冲运动的注意事项有哪些,下面就是实战案例,一起来看一下。 缓冲需要用到数值取整,向上取整:Math.ceil()  向下取整Math.floor() 移动的速度慢慢减慢的效果,移动速度=(终…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论