利用定时器做动画的元素需要相对或绝对定位;
通过改变元素的边距使元素移动:
<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); }