JS实现拖曳式列表排序

前言

最近在巩固H5拖曳API,顺手写一个简单的JS拖曳式列表的排序,效果图如下:
JS实现拖曳式列表排序_第1张图片JS实现拖曳式列表排序_第2张图片
效果解释:使用鼠标拖曳列表项,与其他列表项交换位置,未放置时会有一个颜色反馈,放置后反馈消失。

如果你对H5拖曳API不太了解,请查看这篇文章:https://blog.csdn.net/weixin_44198965/article/details/100057338

Code


<html>
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>拖曳式列表排序title>
  
  <style>
      #container{
        list-style:none;
        cursor:move;
        width:300px;
        color:rgb(255,255,255)
      }
      .item{
        background:rgb(12, 145, 197);
        padding:20px;
        margin:3px 0 3px 0;
      }
  style>
head>
<body>
  
  <ul id="container">
    <li id="l1" class="item" draggable="true">【1】法拉利li>
    <li id="l2" class="item" draggable="true">【2】劳斯莱斯li>
    <li id="l3" class="item" draggable="true">【3】保时捷li>
    <li id="l4" class="item" draggable="true">【4】科尼赛克li>
    <li id="l5" class="item" draggable="true">【5】布加迪li>
  ul>

<script>
  // 获取DOM节点(ul)
  var Ul = document.getElementById('container')

  // 获取DOM节点(li)
  var items = document.querySelectorAll('.item')

  // 遍历DOM节点(列表)
  for(i=0, len = items.length; i<len; i++){
    
    items[i].ondragstart = function(e){//为 dataTransfer 存储数据(id)
      e.dataTransfer.setData('id',this.id)
    }

    // 取消默认事件(否则拖动无效)
    items[i].ondragover = function (){
      return false
    }

    // 放置反馈样式
    items[i].ondragenter = function (){
      this.style.background="red"
    }

    // 离开恢复样式
    items[i].ondragleave = function (){
      this.style.background="rgb(12,145,197)"
    }

    // 放置-insertBefore()方法实现换位置
    items[i].ondrop = function (e){
      var id = e.dataTransfer.getData('id')//正在拖动节点的id
      var dragging = document.getElementById(id)//正在拖动的节点
      Ul.insertBefore(dragging,this)//insertBefore方法插入
      this.style.background = "rgb(12,145,197)"// 放置后恢复颜色
    }
  }
script>
body>
html>

bug:由于 insertBefore 方法只能插入到上方,不能插入到列表项下方。

你可能感兴趣的:(+,JScript,JavaScript)