js 拖拽添加dom怎么添加动画,看起来更加流畅,用完整的html
时间: 2024-03-01 22:50:25 浏览: 21
好的,下面是一个完整的 HTML 示例代码,演示如何通过 JS 实现拖拽添加 DOM 元素并添加动画效果:
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Drag and Drop with Animation</title>
<style>
.draggable {
position: absolute;
background-color: #f00;
color: #fff;
width: 100px;
height: 100px;
text-align: center;
line-height: 100px;
cursor: move;
transition: transform 0.3s ease-in-out;
}
.dragging {
transition: transform 0.5s ease-in-out;
}
</style>
</head>
<body>
<div class="draggable" draggable="true">拖拽我</div>
<script>
const container = document.body;
const draggable = document.querySelector('.draggable');
let offsetX = 0;
let offsetY = 0;
draggable.addEventListener('dragstart', (event) => {
event.preventDefault();
offsetX = event.offsetX;
offsetY = event.offsetY;
});
draggable.addEventListener('drag', (event) => {
const x = event.clientX - offsetX;
const y = event.clientY - offsetY;
draggable.style.transform = `translate(${x}px, ${y}px)`;
});
draggable.addEventListener('dragend', () => {
draggable.classList.add('dragging');
const newElement = document.createElement('div');
newElement.classList.add('draggable');
newElement.style.left = draggable.style.left;
newElement.style.top = draggable.style.top;
newElement.innerText = '新元素';
container.appendChild(newElement);
requestAnimationFrame(() => {
newElement.style.transform = 'none';
});
draggable.style.transform = 'none';
});
</script>
</body>
</html>
```
在这个示例中,我们首先定义了一个可拖拽的红色方块,当用户拖拽它时,会实时更新方块的位置。当拖拽结束时,我们会在页面上添加一个新的红色方块,并通过 `requestAnimationFrame()` 方法来启用 CSS 动画效果,使新方块以流畅的动画效果出现在页面上。
需要注意的是,由于新方块是通过 JS 动态创建的,因此需要在 CSS 中给它设置默认的位置和样式,例如:
```css
.draggable {
position: absolute;
background-color: #f00;
color: #fff;
width: 100px;
height: 100px;
text-align: center;
line-height: 100px;
cursor: move;
transition: transform 0.3s ease-in-out;
left: -100px;
top: -100px;
}
```
这样,新方块就会有一个默认的位置,可以随后通过 JS 来更新它的位置和样式。