记录--JS特效:跟随鼠标移动的小飞机
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助
前端网页中,用JS实现鼠标移动时,页面中的小飞机向着鼠标移动。
效果
源码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | <!DOCTYPE html> <html> <head> <style> *{ margin: 0; padding: 0; } body{ height: 100vh; background: linear-gradient(200deg,#005bea,#00c6fb); } #plane{ color: #fff; font-size: 70px; position: absolute; display: flex; justify-content: center; align-items: center; } </style> </head> <body> <div id= "plane" > <i aria-hidden= "true" >✈</i> </div> <script> var plane=document.getElementById( 'plane' ); var deg=0,ex=0,ey=0,vx=0,vy=0,count=0; window.addEventListener( 'mousemove' ,(e)=>{ ex=e.pageX-plane.offsetLeft-plane.clientWidth/2; ey=e.pageY-plane.offsetTop-plane.clientHeight/2; deg=360*Math.atan(ey/ex)/(2*Math.PI)+5; if (ex<0){ deg+=180; } count=0; }) function draw(){ plane.style.transform= 'rotate(' +deg+ 'deg)' ; if (count<100){ vx+=ex/100; vy+=ey/100; } plane.style.left=vx+ 'px' ; plane.style.top=vy+ 'px' ; count++; } setInterval(draw,1); </script> </body> </html> |
实现的原理是:当鼠标在网页中移动时,获取鼠标位置,同时设置飞机指向、并移动飞机位置,直至飞机到达鼠标位置。
重点代码是mousemove事件接管函数和移动飞机位置函数draw。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | window.addEventListener( 'mousemove' ,(e)=>{ ex=e.pageX-plane.offsetLeft-plane.clientWidth/2; ey=e.pageY-plane.offsetTop-plane.clientHeight/2; deg=360*Math.atan(ey/ex)/(2*Math.PI)+5; if (ex<0){ deg+=180; } count=0; }) function draw(){ plane.style.transform= 'rotate(' +deg+ 'deg)' ; if (count<100){ vx+=ex/100; vy+=ey/100; } plane.style.left=vx+ 'px' ; plane.style.top=vy+ 'px' ; count++; } |
由代码中即可知道实现逻辑。如果想独自享用此功能,不想让他人知道原理、不想被他人修改,可以将核心JS代码进行混淆加密。
比如用JShaman对上述JS代码加密。
加密后的代码,会成为以下形式,使用起来还跟加密前一样。
1 2 3 4 5 6 | window.addEventListener( 'mousemove' ,(e)=>{ (function(_0x5e2a74,_0x3d2559){ var _0x5e2331=_0x5e2a74();function _0x4514c1(_0x56e61e,_0x24cc3c,_0xced7a6,_0x2eee50,_0x30fa4e){ return _0xc941(_0xced7a6- -0x94,_0x2eee50);}function _0x447b09(_0x2bf694,_0x3c6d87,_0x2bfc91,_0x14456b,_0x28fe70){ return _0xc941(_0x3c6d87- -0x3b,_0x28fe70);}function _0x12756f(_0x58c768,_0x1cd95f,_0x188173,_0x5baeba,_0x59fb94){ return _0xc941(_0x1cd95f- -0x32b,_0x5baeba);}function _0x3c2cef(_0x3a3ce5,_0x274c07,_0x15ea13,_0x4aa242,_0x449d14){ return _0xc941(_0x274c07- -0x1f6,_0x4aa242);}function _0x5516f2(_0x51af28,_0x27889e,_0x34f94f,_0x3756b4,_0x34e9e7){ return _0xc941(_0x51af28-0x6e,_0x34e9e7);} while (!![]){ try { var _0x1361cf=parseInt(_0x12756f(-0x31f,-0x322,-0x31b,-0x324,-0x319))/0x1*(-parseInt(_0x12756f(-0x330,-0x329,-0x333,-0x322,-0x326))/0x2)+-parseInt(_0x3c2cef(-0x1f0,-0x1f2,-0x1e9,-0x1f1,-0x1f2))/0x3*(-parseInt(_0x4514c1(-0x85,-0x83,-0x8c,-0x8a,-0x96))/0x4)+-parseInt(_0x5516f2(0x79,0x7f,0x72,0x71,0x73))/0x5*(-parseInt(_0x447b09(-0x44,-0x3b,-0x42,-0x38,-0x3b))/0x6)+parseInt(_0x4514c1(-0x88,-0x8a,-0x8d,-0x97,-0x88))/0x7*(-parseInt(_0x4514c1(-0x8b,-0x88,-0x91,-0x8f,-0x8c))/0x8)+parseInt(_0x447b09(-0x25,-0x28,-0x24,-0x30,-0x2e))/0x9*(-parseInt(_0x4514c1(-0x7c,-0x83,-0x85,-0x7d,-0x85))/0xa)+-parseInt(_0x5516f2(0x74,0x74,0x71,0x7b,0x79))/0xb+-parseInt(_0x4514c1(-0x8c,-0x95,-0x8f,-0x91,-0x91))/0xc*(-parseInt(_0x447b09(-0x2c,-0x2a,-0x29,-0x22,-0x23))/0xd); if (_0x1361cf===_0x3d2559){ break ;} else {_0x5e2331[ "\u0070\u0075\u0073\u0068" ](_0x5e2331[ "\u0073\u0068\u0069\u0066\u0074" ]());}} catch (_0x12462f){_0x5e2331[ "\u0070\u0075\u0073\u0068" ](_0x5e2331[ "\u0073\u0068\u0069\u0066\u0074" ]());}}})(_0x2138,0x5eefa);function _0x2138(){ var _0x3f76d0=[ "\u0063\u006c\u0069\u0065\u006e\u0074\u0048\u0065\u0069\u0067\u0068\u0074" , "\u0063\u006c\u0069\u0065\u006e\u0074\u0057\u0069\u0064\u0074\u0068" , "JrgkzB035" .split( "" ).reverse(). join ( "" ), "Xegap" .split( "" ).reverse(). join ( "" ), "SyQffy23819" .split( "" ).reverse(). join ( "" ), "poTtesffo" .split( "" ).reverse(). join ( "" ), "ipqYMm50751" .split( "" ).reverse(). join ( "" ), "AqmLUY411" .split( "" ).reverse(). join ( "" ), "\u0070\u0061\u0067\u0065\u0059" , "xWOaei206" .split( "" ).reverse(). join ( "" ), "LeZbPZ428" .split( "" ).reverse(). join ( "" ), "GxweQb21" .split( "" ).reverse(). join ( "" ), "pskjDZ465" .split( "" ).reverse(). join ( "" ), "jljclz6152674" .split( "" ).reverse(). join ( "" ), '26985yqvBrA' , '301452FNGmnL' , "\u0031\u0039\u0031\u006c\u0059\u004b\u004d\u0072\u006d" , 'offsetLeft' , "fSfKNj525391" .split( "" ).reverse(). join ( "" ), "\u0061\u0074\u0061\u006e" ];_0x2138=function(){ return _0x3f76d0;}; return _0x2138();}ex=e[ 'pageX' ]-plane[ 'offsetLeft' ]-plane[ "\u0063\u006c\u0069\u0065\u006e\u0074\u0057\u0069\u0064\u0074\u0068" ]/(0xe2994^0xe2996);ey=e[ "\u0070\u0061\u0067\u0065\u0059" ]-plane[ "\u006f\u0066\u0066\u0073\u0065\u0074\u0054\u006f\u0070" ]-plane[ "\u0063\u006c\u0069\u0065\u006e\u0074\u0048\u0065\u0069\u0067\u0068\u0074" ]/(0xc7c08^0xc7c0a);deg=(0xc5a81^0xc5be9)*Math[ "\u0061\u0074\u0061\u006e" ](ey/ex)/((0x350f1^0x350f3)*Math[ 'PI' ])+(0x4ebc3^0x4ebc6); if (ex<(0x7f58a^0x7f58a)){deg+=0x3611b^0x361af;}function _0xc941(_0x20d997,_0x21385e){ var _0xc941d=_0x2138();_0xc941=function(_0x1c87e9,_0x16a339){_0x1c87e9=_0x1c87e9-0x0; var _0x1c1df3=_0xc941d[_0x1c87e9]; return _0x1c1df3;}; return _0xc941(_0x20d997,_0x21385e);}count=0x84c22^0x84c22; }) function draw(){ (function(_0x228270,_0x49c561){function _0x1a7320(_0x4d8e0a,_0x4a154f,_0x39e417,_0x3351c1,_0x309eea){ return _0x38eb(_0x4a154f- -0x390,_0x39e417);} var _0x5708e4=_0x228270();function _0x9be745(_0x32a1,_0x343ed0,_0xb88373,_0x328e52,_0x923750){ return _0x38eb(_0xb88373-0x37,_0x923750);}function _0x556527(_0x56c686,_0x3c0b6e,_0x2f3681,_0x32b652,_0x3a844e){ return _0x38eb(_0x3a844e-0x356,_0x32b652);}function _0x1cff65(_0x4a8e90,_0x538331,_0x35ecc0,_0x27c079,_0x1ad156){ return _0x38eb(_0x35ecc0-0x295,_0x27c079);}function _0x1ca2c5(_0x1ae530,_0x12dbfa,_0xff68f6,_0x370048,_0xcf6eb1){ return _0x38eb(_0x1ae530-0x244,_0xcf6eb1);} while (!![]){ try { var _0x4d0db3=parseInt(_0x1ca2c5(0x24c,0x247,0x252,0x248,0x252))/0x1*(parseInt(_0x556527(0x35f,0x350,0x35c,0x355,0x358))/0x2)+-parseInt(_0x556527(0x365,0x363,0x360,0x35d,0x35d))/0x3*(-parseInt(_0x556527(0x358,0x358,0x355,0x355,0x35a))/0x4)+-parseInt(_0x1cff65(0x293,0x29c,0x29a,0x293,0x294))/0x5+parseInt(_0x1ca2c5(0x24f,0x24b,0x255,0x248,0x254))/0x6+-parseInt(_0x1ca2c5(0x245,0x240,0x23f,0x248,0x24a))/0x7+-parseInt(_0x556527(0x367,0x362,0x367,0x360,0x360))/0x8+parseInt(_0x556527(0x35a,0x363,0x365,0x35a,0x362))/0x9; if (_0x4d0db3===_0x49c561){ break ;} else {_0x5708e4[ "\u0070\u0075\u0073\u0068" ](_0x5708e4[ "\u0073\u0068\u0069\u0066\u0074" ]());}} catch (_0x4057b8){_0x5708e4[ "\u0070\u0075\u0073\u0068" ](_0x5708e4[ "\u0073\u0068\u0069\u0066\u0074" ]());}}})(_0x15e5,0x6b59f);function _0x4da06f(_0x10d466,_0x20ab24,_0x408802,_0x869b10,_0x64532e){ return _0x38eb(_0x869b10-0x294,_0x20ab24);}plane[ "\u0073\u0074\u0079\u006c\u0065" ][ "\u0074\u0072\u0061\u006e\u0073\u0066\u006f\u0072\u006d" ]=_0x4da06f(0x297,0x29b,0x299,0x297,0x298)+deg+_0x4da06f(0x2a5,0x2a2,0x2a4,0x2a1,0x29d);function _0x38eb(_0xf88e34,_0x15e593){ var _0x38eb7d=_0x15e5();_0x38eb=function(_0x1b2a3d,_0x46bf66){_0x1b2a3d=_0x1b2a3d-0x0; var _0x23a19a=_0x38eb7d[_0x1b2a3d]; return _0x23a19a;}; return _0x38eb(_0xf88e34,_0x15e593);} if (count<(0xcf802^0xcf866)){vx+=ex/(0xecfb8^0xecfdc);vy+=ey/(0x667f3^0x66797);}function _0x15e5(){ var _0x1a56cf=[ "KMHgjO12" .split( "" ).reverse(). join ( "" ), "pot" .split( "" ).reverse(). join ( "" ), "\u0036\u0033\u0034\u0032\u0035\u0036\u0038\u004f\u006d\u0048\u0065\u0055\u0057" , "\u0034\u0030\u0031\u0038\u0031\u0032\u0032\u0044\u006a\u0057\u006e\u0058\u0043" , "VmFQAb2646603" .split( "" ).reverse(). join ( "" ), ")ged" .split( "" ).reverse(). join ( "" ), "elyts" .split( "" ).reverse(). join ( "" ), "\u0074\u0072\u0061\u006e\u0073\u0066\u006f\u0072\u006d" , "VgmPeO2141391" .split( "" ).reverse(). join ( "" ), "kvRLZy63064" .split( "" ).reverse(). join ( "" ), "(etator" .split( "" ).reverse(). join ( "" ), "\u0031\u0031\u0032\u0034\u0072\u0055\u0046\u0046\u007a\u007a" , "TRaCTh0401222" .split( "" ).reverse(). join ( "" ), "\u006c\u0065\u0066\u0074" , "oLkDOm9984" .split( "" ).reverse(). join ( "" )];_0x15e5=function(){ return _0x1a56cf;}; return _0x15e5();}plane[ 'style' ][ 'left' ]=vx+ "\u0070\u0078" ;plane[ "\u0073\u0074\u0079\u006c\u0065" ][ 'top' ]=vy+ "xp" .split( "" ).reverse(). join ( "" );function _0x27ce93(_0x4b6716,_0x4781f6,_0x57584e,_0x4dbb11,_0x295d49){ return _0x38eb(_0x4b6716-0x233,_0x4781f6);}count++; } |
分类:
前端特效合集
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2020-12-09 uni-app开发经验分享十五: uni-app 蓝牙打印功能