<head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> * { margin: 0; padding: 0; }
.a { width: 100px; height: 100px; background-color: pink; position: absolute; left: 0; } </style> </head>
<body> <div class="a"></div> <script> var oDiv = document.querySelector('.a') move(20, 1300, oDiv, 'left', function () { move(20, 600, oDiv, 'top', function () { move(20, 0, oDiv, 'left', function () { move(20, 0, oDiv, 'top') }) }) }) function move(speed, end, ele, attr, cb) { // var cur = ele.offsetLeft;得到的是数字 // var cur = ele.style.left;得到的是一个字符串 px // 实际上只有行内样式可以被读取 var cur = parseInt(getStyle(ele, attr)); var speed = end > cur ? speed : -speed; var t = setInterval(function () { cur += speed; ele.style[attr] = cur + 'px' // 定时器结束的条件 if (Math.abs(cur - end) < Math.abs(speed)) { cur = end ele.style[attr] = cur + 'px' clearInterval(t) //运动之后要做什么用一个函数包起来 //如果cb传参,才执行 if (cb) { cb() } // 逻辑与运算 见假即短路 // cb&&cb() } }, 50) } //获取css样式的兼容写法函数 function getStyle(ele, attr) { if (window.getComputedStyle) { return getComputedStyle(ele)[attr] } return ele.currentStyle[attr] } </script> </body>
</html>