- 核心:动态计算步长,随着时间的变化,步长减少
- 封装运动函数(缓冲效果)
<style>
.box1 {
width: 100px;
background-color: pink;
position: absolute;
height: 100px;
left: 0;
top: 0;
}
</style>
</head>
<body>
<div class="box1"></div>
</body>
<script>
var box1 = document.querySelector('.box1');
var target = 400;
var t;
box1.onmouseover = function () {
move(box1, {
left: 500,
}, function () {
move(box1, {
top: 500,
}, function () {
move(box1, {
left: 0,
}, function () {
move(box1, {
top: 0,
})
})
})
})
}
function move(ele, obj, cb) {
clearInterval(ele.t);
ele.t = setInterval(function () {
var flag = true;
for (var i in obj) {
var now = parseInt(getStyle(ele, i));
var speed = (obj[i] - now) / 7;
speed = speed < 0 ? Math.floor(speed) : Math.ceil(speed);
ele.style[i] = now + speed + 'px';
if (now !== obj[i]) {
flag = false;
}
if (flag) {
clearInterval(ele.t)
cb && cb();
}
}
}, 30)
}
function getStyle(ele, attr) {
if (ele.currentStyle) {
return (ele.currentStyle[attr]);
} else {
return (getComputedStyle(ele)[attr]);
}
}
</script>