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;})();

登录后复制

这里使用本站HTML/CSS/JS在线运行测试工具:http://tools.jb51.net/code/HtmlJsRun,可得到如下测试运行效果:

JS+HTML5实绑定鼠标事件的粒子动画

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

推荐阅读:

JS实现雪花飘落动画步骤详解

怎样使用Vue+canvas实现移动端手写板功能

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

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

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

(0)
上一篇 2025年3月8日 06:07:24
下一篇 2025年2月19日 21:03:46

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

相关推荐

  • 使用JS判断字符串中包含内容方法总结

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

    编程技术 2025年3月8日
    200
  • vue.js中v-bind和v-on使用案例详解

    这次给大家带来vue.js中v-bind和v-on使用案例详解,vue.js中v-bind和v-on使用的注意事项有哪些,下面就是实战案例,一起来看一下。 百度一下 百度一下 百度一下 更改图片 更改图片 new Vue({ el: ‘#t…

    编程技术 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中共有六种数据类型,其中有五种是基本数据类型,还有一种则是引用数据类型。五种基本数据类型分别是:number 数值类型、string 字符串类型、boolean 布尔类型, null 空类型、以及undefined 未…

    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

发表回复

登录后才能评论