原生JS实现各种运动之复合运动
程序员文章站
2022-06-19 17:54:12
本文给大家分享一个用原生js实现的复合运动,所谓复合运动就是在同一个进间段内不同的属性都会发生变化,效果如下:实现代码如下,欢迎大家复制粘贴及吐槽。
本文给大家分享一个用原生js实现的复合运动,所谓复合运动就是在同一个进间段内不同的属性都会发生变化,效果如下:
实现代码如下,欢迎大家复制粘贴及吐槽。
<!doctype html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title>原生js实现各种运动之复合运动</title> <style> #div1 { width: 100px; height: 100px; background: red; opacity: 0.3; } </style> <script> function getstyle(obj, attr) { if (obj.currentstyle) { return obj.currentstyle[attr]; } else { return getcomputedstyle(obj, false)[attr]; } } function startmove(obj, json, fn) { clearinterval(obj.timer); obj.timer = setinterval(function () { //设定开关,防止某一个值达到后其它值停止变化 var bstop = true; for (var attr in json) { var icur = 0; if (attr == 'opacity') { icur = parseint(parsefloat(getstyle(obj, attr)) * 100); } else { icur = parseint(getstyle(obj, attr)); }; var ispeed = (json[attr] - icur) / 8; ispeed = ispeed > 0 ? math.ceil(ispeed) : math.floor(ispeed); //如果某一个值还没有达到,bstop就为false if (icur != json[attr]) { bstop = false; }; if (attr == 'opacity') { obj.style.filter = 'alpha(opacity:' + (icur + ispeed) + ')'; obj.style.opacity = (icur + ispeed) / 100; } else { obj.style[attr] = icur + ispeed + 'px'; } } //最后一轮循环时如果为true,才清除定时器 if (bstop) { clearinterval(obj.timer); if (fn) { fn(); } } }, 30) } </script> <script> window.onload = function () { var obtn = document.getelementbyid('btn1'); var odiv = document.getelementbyid('div1'); obtn.onclick = function () { startmove(odiv, { width: 400, height: 200, opacity: 100 }); }; }; </script> </head> <body style="background:#0f0;"> <input id="btn1" type="button" value="开始运动" /> <div id="div1"></div> </body> </html>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。