js实现div位置
使用 CSS 属性定位
通过 style.position 设置定位方式,配合 style.left/style.top 等属性调整位置:
const div = document.getElementById('myDiv');
div.style.position = 'absolute'; // 或 'fixed'/'relative'
div.style.left = '100px';
div.style.top = '50px';
动态计算位置
结合 getBoundingClientRect() 获取元素尺寸信息:
const target = document.getElementById('targetElement');
const div = document.createElement('div');
div.style.position = 'absolute';
div.style.left = `${target.offsetLeft + 200}px`;
div.style.top = `${target.offsetTop}px`;
document.body.appendChild(div);
使用 transform 进行平滑移动
CSS transform 性能更优且不影响文档流:

const div = document.querySelector('.movable');
div.style.transform = 'translate(120px, 80px)';
响应式定位
根据窗口大小动态调整位置:
function repositionDiv() {
const div = document.getElementById('responsiveDiv');
div.style.left = `${window.innerWidth * 0.7}px`;
}
window.addEventListener('resize', repositionDiv);
相对父元素定位
当需要相对于父级容器定位时:

const parent = document.querySelector('.parent');
const child = document.createElement('div');
parent.style.position = 'relative'; // 必须设置
child.style.position = 'absolute';
child.style.right = '0';
parent.appendChild(child);
动画效果实现
使用 requestAnimationFrame 实现动画移动:
let pos = 0;
function animate() {
const div = document.getElementById('animatedDiv');
pos += 2;
div.style.left = `${pos}px`;
if (pos < 300) requestAnimationFrame(animate);
}
animate();
拖拽功能实现
基础拖拽功能实现逻辑:
let isDragging = false;
const draggable = document.getElementById('draggable');
draggable.addEventListener('mousedown', (e) => {
isDragging = true;
const shiftX = e.clientX - draggable.getBoundingClientRect().left;
const shiftY = e.clientY - draggable.getBoundingClientRect().top;
function moveAt(pageX, pageY) {
draggable.style.left = `${pageX - shiftX}px`;
draggable.style.top = `${pageY - shiftY}px`;
}
function onMouseMove(e) {
if (!isDragging) return;
moveAt(e.pageX, e.pageY);
}
document.addEventListener('mousemove', onMouseMove);
document.addEventListener('mouseup', () => {
isDragging = false;
document.removeEventListener('mousemove', onMouseMove);
});
});






