0


前端使用H5中draggable实现拖拽排序效果 两种实现效果

文章目录

一、实现效果①

将一个节点拖到另一个节点之前或之后

1、实现代码

<!DOCTYPEhtml><style>*{padding: 0;margin: 0;}body{display: flex;width: 100%;height: 100vh;justify-content: center;align-items: center;}.list{display: flex;width: 336px;flex-wrap: wrap
    }.list-item{width: 100px;height: 50px;margin-top: 10px;border: 1px solid gray;margin-right: 10px;background-color: gray;color: #fff;}/*list-item 和 moving 同时在一个元素时生效*/.list-item.moving{color: transparent;background-color: transparent;border: 1px dashed gray !important;}</style><body><divclass="list"><divdraggable="true"class="list-item">1</div><divdraggable="true"class="list-item">2</div><divdraggable="true"class="list-item">3</div><divdraggable="true"class="list-item">4</div><divdraggable="true"class="list-item">5</div><divdraggable="true"class="list-item">6</div><divdraggable="true"class="list-item">7</div><divdraggable="true"class="list-item">8</div><divdraggable="true"class="list-item">9</div></div></body><scripttype="text/javascript">let sourceNode;const list = document.querySelector(".list");// 当拖拽开始的时候
    list.ondragstart=(e)=>{
        console.log("当前拖动的节点:");
        console.log(e.target);
        e.target.classList.add("moving");
        sourceNode = e.target;};// 当拖拽进入某个节点时候
    list.ondragenter=(e)=>{if(e.target === list || e.target === sourceNode){return;}
        console.log("拖拽到节点:");
        console.log(e.target);// Array.from ES6:将类数组对象 转成真正的数组  就可以使用数组自带的方法indexOf了const children = Array.from(list.children);const sourceIndex = children.indexOf(sourceNode);const targetIndex = children.indexOf(e.target);// insertBefore 插入的节点如果在list中存在,那么则会删除,再插入新的位置if(sourceIndex < targetIndex){// 拖拽节点下标小于目标节点的下标// 在目标节点的下一个元素之前插入拖拽的节点
            list.insertBefore(sourceNode, e.target.nextElementSibling);}else{// 拖拽节点下标大于目标节点的下标// 在目标节点之前插入拖拽的节点
            list.insertBefore(sourceNode, e.target);}};// 当前拖拽节点拖拽结束
    list.ondragend=(e)=>{
        e.target.classList.remove('moving');}// 381 245 976</script></html>

2、效果演示

在这里插入图片描述

二、实现效果②

两个节点单纯的进行互换位置操作

1.实现代码

<!DOCTYPEhtml><style>*{padding: 0;margin: 0;}body{display: flex;width: 100%;height: 100vh;justify-content: center;align-items: center;}.list{display: flex;width: 336px;flex-wrap: wrap
    }.list-item{width: 100px;height: 50px;margin-top: 10px;border: 1px solid gray;margin-right: 10px;background-color: gray;color: #fff;}/*list-item 和 moving 同时在一个元素时生效*/.list-item.moving{color: transparent;background-color: transparent;border: 1px dashed gray !important;}</style><body><divclass="list"><divdraggable="true"class="list-item">1</div><divdraggable="true"class="list-item">2</div><divdraggable="true"class="list-item">3</div><divdraggable="true"class="list-item">4</div><divdraggable="true"class="list-item">5</div><divdraggable="true"class="list-item">6</div><divdraggable="true"class="list-item">7</div><divdraggable="true"class="list-item">8</div><divdraggable="true"class="list-item">9</div></div></body><scripttype="text/javascript">let sourceNode;const list = document.querySelector(".list");// 当拖拽开始的时候
    list.ondragstart=(e)=>{
        console.log("当前拖动的节点:");
        console.log(e.target);
        e.target.classList.add("moving");
        sourceNode = e.target;};

    list.ondragover=(e)=>{
        e.preventDefault();};// 当拖拽放入某个目标节点后
    list.ondrop=(e)=>{if(e.target === list || e.target === sourceNode){return;}
        console.log("拖拽到节点:");
        console.log(e.target);// Array.from ES6:将类数组对象 转成真正的数组  就可以使用数组自带的方法indexOf了let targetSbin = e.target.nextElementSibling;let sourceSbin = sourceNode.nextElementSibling;// 在目标节点的下一个节点之前插入拖动节点
        list.insertBefore(sourceNode, targetSbin);// 在拖动节点的下一个节点之前插入目标节点
        list.insertBefore(e.target, sourceSbin);};// 当前拖拽节点拖拽结束
    list.ondragend=(e)=>{
        e.target.classList.remove('moving');}// 381 245 976</script></html>

2.效果演示

在这里插入图片描述

标签: 前端

本文转载自: https://blog.csdn.net/dgfdhgghd/article/details/132836598
版权归原作者 这里是杨杨吖 所有, 如有侵权,请联系我们删除。

“前端使用H5中draggable实现拖拽排序效果 两种实现效果”的评论:

还没有评论