<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.list-item {
display: flex;
align-items: center;
justify-content: center;
background: #f50;
height: 30px;
width: 300px;
color: #fff;
cursor: move;
user-select: none;
border-radius: 5px;
margin-bottom: 10px;
}
.list-item.moving {
background: transparent;
color: transparent;
border: 1px dashed #ccc;
}
</style>
</head>
<body>
<div class="list">
<div class="list-item" draggable="true">1</div>
<div class="list-item" draggable="true">2</div>
<div class="list-item" draggable="true">3</div>
<div class="list-item" draggable="true">4</div>
<div class="list-item" draggable="true">5</div>
</div>
<script>
const list = document.querySelector('.list')
let sourceNode
list.ondragstart = (e) => {
setTimeout(() => {
e.target.classList.add('moving')
}, 0)
sourceNode = e.target
e.dataTransfer.effectAllowed='move'
console.log( e.dataTransfer.effectAllover);
}
list.ondragover = (e) => {
e.preventDefault();
}
list.ondragenter = (e) => {
e.preventDefault();
if (e.target === list || e.target === sourceNode) {
return
}
const children = Array.from(list.children);
const sourceIndex = children.indexOf(sourceNode);
const targetIndex = children.indexOf(e.target);
if (sourceIndex < targetIndex) {
list.insertBefore(sourceNode, e.target.nextElementSibling);
} else {
list.insertBefore(sourceNode, e.target);
}
}
list.ondragend=(e)=>{
e.target.classList.remove('moving');
}
</script>
</body>
</html>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探