原生JS+HTML5实现跟随鼠标一起流动的粒子动画效果
这篇文章主要介绍了原生JS+HTML5实现跟随鼠标一起流动的粒子动画效果,涉及javascript事件响应、数值运算及页面元素属性动态操作相关实现技巧,需要的朋友可以参考下
本文实例讲述了原生JS+HTML5实现跟随鼠标一起流动的粒子动画效果。分享给大家供大家参考,具体如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset=gbk> <title>www.jb51.net 粒子效果演示</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" /> <style type="text/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%; } </style> </head> <body> <p id="outer"> <p id="canvasContainer"> <canvas id="mainCanvas" width="1000" height="560"></canvas> <p id="output"></p> </p> </p> <script type="text/javascript"> //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> </body> </html>
相关推荐:
以上是原生JS+HTML5实现跟随鼠标一起流动的粒子动画效果的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

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

本文将介绍如何在Win11系统中关闭鼠标移动任务栏图标时显示的缩略图功能。这一功能在默认情况下是开启的,当用户将鼠标指针悬停在任务栏上的应用程序图标上时,会显示该应用程序的当前窗口缩略图。然而,有些用户可能觉得这个功能不太实用或者会干扰到他们的使用体验,因此想要关闭它。任务栏缩略图可能很有趣,但它们也可能分散注意力或烦人。考虑到您将鼠标悬停在该区域的频率,您可能无意中关闭了重要窗口几次。另一个缺点是它使用更多的系统资源,因此,如果您一直在寻找一种提高资源效率的方法,我们将向您展示如何禁用它。不过

本站7月12日消息,雷蛇今日宣布推出雷蛇|宝可梦耿鬼款无线鼠标、鼠标垫。其单品定价分别为1299元和299元,包含两款产品的套装价则为1549元。这并非雷蛇首次推出耿鬼联名的外设产品,2023年雷蛇就推出过耿鬼款的八岐大蛇V2游戏鼠标。此次推出两款新品整体均采用与鬼斯、鬼斯通、耿鬼家族外观类似的深紫色底色,印有这三只宝可梦和精灵球的线条轮廓,中间则为耿鬼这一经典幽灵属性宝可梦的彩色大图。本站发现,雷蛇|宝可梦耿鬼款无线鼠标基于此前发布的毒蝰V3专业版打造。其整体重量为55g,搭载雷蛇第二代FOC

本站3月31日消息,惠普近日在京东上架了一款Professor1三模蓝牙鼠标,可选黑白奶茶色,首发价99元,需要支付10元定金。据介绍,这款鼠标重量106克,采用人体工程学设计,尺寸为127.02x79.59x51.15mm,可选七档4000DPI,搭载蓝影RAW3220传感器,使用650毫安时电池,号称一次充电续航可以使用2个月。本站附鼠标参数信息如下:

这篇文章探讨了在MicrosoftWord中鼠标无法选择或突出显示文本时可能出现的问题,以及如何解决这些问题。为什么我无法在MicrosoftWord中选择文本?在MSWord中无法选择文本可能受多种原因影响,如权限限制、文档受保护、鼠标驱动问题或文件损坏。以下将提供解决这些问题的方法。修复MicrosoftWord无法使用鼠标选择或突出显示文本如果MicrosoftWord无法使用鼠标选择或突出显示文本,请遵循下面提到的解决方案:确保您的鼠标左键正在工作检查您是否有资格更改该文件更新鼠标的驱动

本站8月12日消息,VGN于8月6日推出了联名《艾尔登法环》键鼠系列产品,包含键盘、鼠标和鼠标垫,采用菈妮/褪色者定制主题设计,目前系列产品已上架京东,售价99元起。本站附联名新品信息如下:VGN丨艾尔登法环S99PRO键盘该键盘采用纯铝合金外壳,辅以五层消音结构,使用GASKET板簧结构,拥有单键开槽PCB、原厂高度PBT材质键帽、铝合金个性化背板;支持三模连接和SMARTSPEEDX低延迟技术;接入VHUB,可一站式管理多款设备,首发549元。VGN丨艾尔登法环F1PROMAX无线鼠标该鼠标

很多用户不知道自己雷蛇驱动安装的文件去了哪里,这些驱动文件一般都是安装在了系统盘,也就是电脑的C盘,具体位置在programfiles下的RAZE文件夹。雷蛇鼠标驱动在哪个文件夹答:在系统C盘的programfiles下的RAZE文件夹。一般驱动都会安装在C盘,按照位置去找就可以了。雷蛇鼠标驱动安装方法介绍1、下载好官网的文件以后双击运行自己下载的EXE文件。2、等待软件加载。3、在这里可以选择你要安装的哪个驱动。4、选择好以后点击右下角的“安装”就可以了。

CPI又叫做countperinch,鼠标中的CPI就是鼠标的灵敏度的高低,在使用的时候CPI数字越高说明鼠标越灵敏,现在小编在本篇文章中给大家带来了鼠标cpi按钮功能介绍。cpi含义x和y轴含义左键变成右键滚轮上下失灵灵敏度怎么调鼠标不动恢复鼠标cpi是什么意思答案:动态移动中每英寸反馈回来的坐标点数,就是鼠标的灵敏度的高低。按钮功能介绍:1、调节鼠标的移动速度按键;2、通过按cpi键调节鼠标灵敏度;3、衡量鼠标灵敏度的动态指标;4、可对CPI在500/1000CPI之间自由调节;

如果罗技的驱动在使用时遇到了无法识别鼠标或检测不到鼠标的问题,可能是由于鼠标或接口故障,或者安装的驱动版本错误。请检查鼠标和接口的连接,尝试更新正确的驱动版本。罗技驱动为什么无法识别我的鼠标:一、可能是鼠标或者接口的问题1、要确定用户的鼠标是不是正版的罗技鼠标,不确定可以去咨询罗技的售后客服。2、用户可以检查下电脑的USB接口和鼠标连接线是否正常,否则也会影响罗技驱动的识别。二、可能是驱动版本不对1、罗技驱动的最新版无法识别旧的设备,因此使用旧版鼠标就无法被识别。2、同样使用新版鼠标也无法被旧的
