js实现移动
使用 CSS transform 实现元素移动
通过修改元素的 transform 属性实现平滑移动效果,这种方法不会影响页面布局,性能较好。
const element = document.getElementById('moveMe');
element.style.transform = 'translateX(100px) translateY(50px)';
修改 position 定位属性
当元素设置为 absolute 或 relative 定位时,可以通过改变 top/left 属性实现移动。
const box = document.querySelector('.box');
box.style.position = 'absolute';
box.style.left = '200px';
box.style.top = '100px';
使用 requestAnimationFrame 实现动画
创建流畅的动画效果需要配合 requestAnimationFrame 实现逐帧移动。
function animate(element, distance) {
let position = 0;
function step() {
position += 5;
element.style.transform = `translateX(${position}px)`;
if (position < distance) {
requestAnimationFrame(step);
}
}
requestAnimationFrame(step);
}
animate(document.getElementById('animated'), 300);
拖拽功能实现
通过监听鼠标事件实现元素拖拽移动功能。
const draggable = document.getElementById('draggable');
let isDragging = false;
let offsetX, offsetY;
draggable.addEventListener('mousedown', (e) => {
isDragging = true;
offsetX = e.clientX - draggable.getBoundingClientRect().left;
offsetY = e.clientY - draggable.getBoundingClientRect().top;
});
document.addEventListener('mousemove', (e) => {
if (!isDragging) return;
draggable.style.left = `${e.clientX - offsetX}px`;
draggable.style.top = `${e.clientY - offsetY}px`;
});
document.addEventListener('mouseup', () => {
isDragging = false;
});
使用 CSS 动画实现移动
通过 JavaScript 动态添加 CSS 动画类实现移动效果。
const animateElement = document.getElementById('animate');
animateElement.classList.add('move-animation');
// CSS 部分需要预先定义
// .move-animation {
// animation: move 2s forwards;
// }
// @keyframes move {
// to { transform: translate(100px, 100px); }
// }
平滑滚动到指定位置
实现页面滚动到指定元素的平滑效果。
document.getElementById('scrollBtn').addEventListener('click', () => {
const target = document.getElementById('section2');
target.scrollIntoView({ behavior: 'smooth' });
});
使用 Web Animations API
现代浏览器支持的 Web Animations API 提供更强大的动画控制能力。

const element = document.getElementById('waapi');
element.animate([
{ transform: 'translateX(0)' },
{ transform: 'translateX(300px)' }
], {
duration: 1000,
iterations: 1,
fill: 'forwards'
});






