您好,欢迎访问一九零五行业门户网

原生js分段动画的实现代码

本文主要和大家分享原生js分段动画的实现代码,希望能帮助到大家。
<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"><head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <title>函数的封装(多属性),动画的停止-分段动画</title> <style type="text/css"> * { margin: 0; padding: 0; } .box { width: 100px; height: 100px; background-color: #f10250; margin: 50px; position: relative; } </style> <script type="text/javascript"> function getstyle(element, stylename) { if (element.currentstyle) { return element.currentstyle[stylename]; } else { return window.getcomputedstyle(element, null)[stylename]; } } function animate(element, json, fun) { //element.timer的意思是给当前元素添加一个timer属性 //在这里是添加一个计时器 clearinterval(element.timer); var isstop = false; element.timer = setinterval(function() { for (var key in json) { isstop = true; //通过in循环,获取到的是json中的css属性名key //通过json[key],可以获取key属性的值 var target = json[key]; var current = parseint(getstyle(element, key)); var setp = (target - current) / 10; //当current的值是一个大于target的值的时候 //此时setp是一个小于零的数,此时向上取整为零 //所以需要判断setp是否大于零,大于零向上取整,小于零向下取整 setp = setp > 0 ? math.ceil(setp) : math.floor(setp); current += setp; console.log(current); //只要有一个属性动画没有结束,就不停止动画 //不能用只要有一个属性动画完成就停止动画的思路, //因为此时不是所有属性的动画都已经完成 //不停止动画 if (math.abs(target - current) > math.abs(setp)) { isstop = false; } else { //强制将current = target current = target; } element.style[key] = current + "px"; //停止动画 if (isstop) { clearinterval(element.timer); //添加回调函数 //判断传入的是一个函数 if (typeof fun == "function") { fun(); } } } }, 10); } window.onload = function() { var box = document.getelementsbyclassname("box")[0]; box.onclick = function() { animate(box, { left: 400, }, function() { animate(box, { width: 500 }, function() { animate(box, { height: 500 }, null); }); }); } } </script></head><body> <p class="box"></p> <p class="hezi" style="background-color: green"></p></body></html
以上就是原生js分段动画的实现代码的详细内容。
其它类似信息

推荐信息