欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 游戏 > js 原生拖拽排序功能 简单实现

js 原生拖拽排序功能 简单实现

2024/11/29 19:12:30 来源:https://blog.csdn.net/weixin_45591772/article/details/144028686  浏览:    关键词:js 原生拖拽排序功能 简单实现
拖拽排序功能还是挺常见的, 涉及到的api 还是挺多的,这里笔记记录一下以免忘记找不到了!
老规矩先上效果图

拖动排序在这里插入图片描述

html部分

 <div class="list-box"><div draggable="true" class="item">1</div><div draggable="true" class="item">2</div><div draggable="true" class="item">3</div><div draggable="true" class="item">4</div><div draggable="true" class="item">5</div><div draggable="true" class="item">6</div></div>

js 部分

 <script>const list = document.querySelector('.list-box');let sourceNode;// 开始 拖拽list.ondragstart = (e) => {setTimeout(() => {e.target.classList.add('moving');}, 0)sourceNode = e.target};// 禁止元素在列表上方释放list.ondragover = (e) => {e.preventDefault();};// 拖拽进入list.ondragenter = (e) => {// 阻止默认行为e.preventDefault();// 排除 拖拽到外面 和 拖拽原本的位置if (e.target == list || e.target == sourceNode) return;const chidList = [...list.children]// 获取拖拽元素的下标const sourceIndex = chidList.indexOf(sourceNode);// 进入的元素下标const targetIndex = chidList.indexOf(e.target);if (sourceIndex < targetIndex) {// 将拖拽元素放在当前元素下方list.insertBefore(sourceNode, e.target.nextElementSibling)} else {// 将拖拽元素放在当前元素上方list.insertBefore(sourceNode, e.target)}};// 拖动结束移除默认样式list.ondragend = () => {sourceNode.classList.remove('moving')} </script>

css 部分 这个图拽动画 要是相弄得好看还是有难度的 ,我就随便写了点样式

<style>.list-box {list-style: none;width: 500px;margin: 0 auto;/* line-height: 30px; */}.item {background: aquamarine;height: 40px;line-height: 40px;border-radius: 4px;margin-bottom: 10px;user-select: none;transition: background-color 0.3s ease;}.item.moving {background: transparent;color: transparent;border: 1px dashed #ccc;transition: none;}</style>

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com