利用定时器做动画的元素需要相对或绝对定位;
通过改变元素的边距使元素移动:
<style> .box { width: 100px; height: 100px; background-color: royalblue; position: relative; } </style>
<input type="button" value="go400" id="btn1"/> <input type="button" value="go800" id="btn2"/> <div class="box"></div>
// 获取对象 var btn1 = document.querySelector('#btn1'); var box = document.querySelector('.box'); // 添加事件 btn1.addEventListener('click', function () { animate(box, 500); }); /** * js简单动画 * @param { element: DOM } 作动画的元素 * @param { target: number } 移动距离 */ function animate(element, target) { // 如果存在已经开启的定时器,先关闭 if (element.timer) { clearInterval(element.timer); } element.timer = setInterval(function () { // 左边距 var leader = element.offsetLeft; console.log(leader); // 每次移动的距离 var step = 10; if (target < leader) { step = -step; } var distance = Math.abs(target - leader); if (distance >= Math.abs(step)) { leader = leader + step; element.style.left = leader + "px"; } else { clearInterval(element.timer); element.style.left = target + "px"; } }, 15); }
利用定时器做动画的元素需要相对或绝对定位;
通过改变元素的边距使元素移动:
<style> .box { width: 100px; height: 100px; background-color: royalblue; position: relative; } </style>
<input type="button" value="go400" id="btn1"/> <input type="button" value="go800" id="btn2"/> <div class="box"></div>
// 获取对象
var btn1 = document.querySelector('#btn1');
var box = document.querySelector('.box');
// 添加事件
btn1.addEventListener('click', function () {
animate(box, 500);
});
/**
* js简单动画
* @param { element: DOM } 作动画的元素
* @param { target: number } 移动距离
*/
function animate(element, target) {
// 如果存在已经开启的定时器,先关闭
if (element.timer) {
clearInterval(element.timer);
}
element.timer = setInterval(function () {
// 左边距
var leader = element.offsetLeft;
console.log(leader);
// 每次移动的距离
var step = 10;
if (target < leader) {
step = -step;
}
var distance = Math.abs(target - leader);
if (distance >= Math.abs(step)) {
leader = leader + step;
element.style.left = leader + "px";
} else {
clearInterval(element.timer);
element.style.left = target + "px";
}
}, 15);
}
807

被折叠的 条评论
为什么被折叠?



