手机拖拽排序是一种常见的用户界面交互方式,允许用户通过触摸屏幕来拖动列表项,从而改变它们的顺序。这种功能通常用于任务管理、联系人排序、图片编辑等场景。
以下是一个简单的单列拖拽排序的JavaScript示例,使用了HTML5的拖放API:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Drag and Drop Sorting</title>
<style>
.list {
list-style-type: none;
padding: 0;
}
.item {
padding: 10px;
border: 1px solid #ccc;
margin-bottom: 5px;
cursor: grab;
}
</style>
</head>
<body>
<ul id="sortableList" class="list">
<li class="item" draggable="true">Item 1</li>
<li class="item" draggable="true">Item 2</li>
<li class="item" draggable="true">Item 3</li>
<li class="item" draggable="true">Item 4</li>
</ul>
<script>
const list = document.getElementById('sortableList');
let draggedItem = null;
list.addEventListener('dragstart', (event) => {
draggedItem = event.target;
event.dataTransfer.effectAllowed = 'move';
});
list.addEventListener('dragover', (event) => {
event.preventDefault();
const overItem = event.target;
if (overItem && overItem.nodeName === 'LI' && overItem !== draggedItem) {
const rect = overItem.getBoundingClientRect();
const relY = event.clientY - rect.top;
const height = rect.bottom - rect.top;
const parent = overItem.parentNode;
if (relY > height / 2) {
parent.insertBefore(draggedItem, overItem.nextSibling);
} else {
parent.insertBefore(draggedItem, overItem);
}
}
});
list.addEventListener('dragend', () => {
draggedItem = null;
});
</script>
</body>
</html>
transform
属性来移动元素,减少重绘和回流的影响。touchstart
、touchmove
和touchend
事件,并进行适当的处理。通过以上方法,可以有效实现和优化手机拖拽排序功能。
领取专属 10元无门槛券
手把手带您无忧上云