1.前言

<script src="https://cdn.bootcdn.net/ajax/libs/Sortable/1.14.0/Sortable.js"></script>
  • 个人理解:对传入Dom容器的子元素进行事件监听(事件委托),自动完成子元素位置的转换,并提供相关配置项和钩子函数来控制拖拽

2.基本使用

  • 插件初始化时,需要传入一个Dom元素
  • 初始化完毕后,这个Dom元素的直接子元素就可以被拖拽(例如:你想拖拽li元素,你就应该传入一个ul元素,如果你想拖拽表格行tr,你就应该传入tbody元素)
<body>
<table class="table table-striped table-hover">
<thead>
<tr>
<th>姓名</th>
<th>年龄</th>
</tr>
</thead>
<tbody>
<tr>
<td>张三</td>
<td>23</td>
</tr>
<tr>
<td>李四</td>
<td>24</td>
</tr>
<tr>
<td>王五</td>
<td>25</td>
</tr>
<tr>
<td>赵六</td>
<td>-</td>
</tr>
</tbody>
</table>
</body>
<script src="./libs/Sortable.js"></script>
<script>
window.onload = function(){
//拖拽实例化
var el = document.querySelector(('.table tbody'))
var sortable = new Sortable(el,{})
}
</script>

3.触发区域

  • 默认情况下,子元素所有的区域都可以触发拖拽,可以使用handlefilter字段来控制哪些元素可以触发拖拽
  • handle可以设置样式 cursor: move
字段名称 数据类型 说明
handle string 通过设定元素选择器,来指定哪些元素可以触发拖拽
filter string 通过设定元素选择器,来指定哪些元素不可以触发拖拽,优先级高于handle

4.实例方法

方法名 参数 说明
destroy 销毁实例,意味着无法再进行拖拽操作
option (name,value) 刷新option配置
var el = document.querySelector(('.table tbody'))
//保存当前实例
var instance = new Sortable(el, {}) //销毁整个实例
instance.destroy() //禁止整个实例进行拖拽
instance.option('disabled', true) //允许整个实例进行拖拽
instance.option('disabled', false)

5.实际运用

  • Sortable.js初始化时,要确保传入的Dom能够读取到
  • Sortable.js在进行事件监听时,使用的是事件委托,所以如果传入的el元素未发生改变,则无需再次进行初始化
  • 拖拽完毕后,Sortable.js更新了视图,但是Vue中的数据并没有同步,需要在onEnd()回调中对数据进行排序处理
  • 一般而言,在对Vue的数据进行排序处理时,不要让其触发视图更新(Sortable.js已经更新过视图,没必要重复更新)
<body>
<div id="app">
<div class="inner-box" v-cloak>
<table class="table table-striped table-hover">
<thead>
<tr>
<th>姓名</th>
<th>年龄</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<tr v-for="(item,index) in list" :key="index">
<td>{{item.name}}</td>
<td>{{item.age}}</td>
<td><span class="glyphicon glyphicon-screenshot drag-btn"></span></td>
</tr>
</tbody>
</table>
</div>
</div>
</body>
<script>
new Vue({
el: "#app",
data: {
list: [
{ name: "张三", age: 23, can_replace: true }, { name: "李四", age: 24, can_replace: true },
{ name: "王五", age: 25, can_replace: true }, { name: "此行禁止被替换", age: "-", can_replace: false }
],
sortable: null,//拖拽实例
},
mounted() {
//拖拽实例化
var that = this
var el = document.querySelector(('.table tbody'))
this.sortable = new Sortable(el, {
handle: ".drag-btn",
// 开始拖拽的时候
onStart: function (evt) { },
// 拖拽移动的时候
onMove: function (evt) {
//如果要禁止此次
},
// 结束拖拽
onEnd: function ({ oldIndex, newIndex }) {
//对数据重新进行排序,单不触发视图更新
var oldItem = that.list[oldIndex]
var newItem = that.list[newIndex]
that.list[oldIndex] = newItem
that.list[newIndex] = oldItem
},
})
},
methods: {
//刷新列表
setList() {
//列表是与tr元素绑定的,不会影响到tbody元素,所以这里数据发生改变时,Sortable无需再次执行初始化
this.list = [
{ name: "张三2", age: 23, can_replace: true }, { name: "李四2", age: 24, can_replace: true },
{ name: "王五2", age: 25, can_replace: true }, { name: "此行禁止被替换2", age: "-", can_replace: false },
{ name: "百度水电费", age: "-", can_replace: false }
]
},
}
})
</script>

Sortable.js笔记的更多相关文章

  1. js实现table排序-sortable.js

    方案一.引用sortable.js包 /* <th class="thcss" style="width: 40px;" onclick="so ...

  2. html5 Sortable.js 拖拽排序源码分析

    最近公司项目经常用到一个拖拽 Sortable.js插件,所以有空的时候看了 Sortable.js 源码,总共1300多行这样,写的挺完美的.   本帖属于原创,转载请出名出处. 官网http:// ...

  3. vuejs2.0使用Sortable.js实现的拖拽功能

    简介 在使用vue1.x之前的版本的时候,页面中的拖拽功能,我在项目中是直接用的jquery ui中的sortable.js,只是在拖拽完成后,在update的回调函数中又重新排序了存放数据的数组.但 ...

  4. 拖放排序插件Sortable.js 兼容好及功能全个人觉得比dragula.js 好的多

    经测试,Sortable.js 兼容好和使用方便都是比较不错的,特别手机端使用很棒 介绍 Sortable.js是一款轻量级的拖放排序列表的js插件(虽然体积小,但是功能很强大)下载地址:https: ...

  5. Vue.Draggable:基于 Sortable.js 的 Vue 拖拽组件使用中遇到的问题

    Sortable.js 介绍 https://segmentfault.com/a/1190000008209715 项目中遇到的问题: A - 我需要在项目的拖拽组件中,使用背景 1 - 想到的第一 ...

  6. Sortable.js

    拖拽的时候主要由这几个事件完成, ondragstart 事件:当拖拽元素开始被拖拽的时候触发的事件,此事件作用在被拖曳元素上 ondragenter 事件:当拖曳元素进入目标元素的时候触发的事件,此 ...

  7. vue2.0使用Sortable.js实现的拖拽功能

    简介 在使用vue1.x之前的版本的时候,页面中的拖拽功能,我在项目中是直接用的jQuery ui中的sortable.js,只是在拖拽完成后,在update的回调函数中又重新排序了存放数据的数组.但 ...

  8. html5支持drag的拖放排序插件sortable.js

    html5支持drag的拖放排序插件sortable.js <script src="//cdnjs.cloudflare.com/ajax/libs/Sortable/1.5.1/S ...

  9. Data Visualization and D3.js 笔记(1)

    课程地址: https://classroom.udacity.com/courses/ud507 什么是数据可视化? 高效传达一个故事/概念,探索数据的pattern 通过颜色.尺寸.形式在视觉上表 ...

  10. js笔记-0

    #js笔记-0 数组: indexOf方法: Array也可以通过indexOf()来搜索一个指定的元素的位置: var arr = [10, 20, '30', 'xyz']; arr.indexO ...

随机推荐

  1. ASP.NET Core – 网站发布要做的事儿 Publish, Minification, Compression, Cache, HSTS, URL Rewrite Https & www, Close IIS Feature

    前言 要发布网站需要做一些优化, 比如 cache, compression, minification 等等. 以前有写过相关的文章: Asp.net core 学习笔记 ( IIS, static ...

  2. 递归获取zip中的文件

    1 //tempPath 系统临时文件夹 2 2 private List<String> getWsContentList(String tempPath) { 3 3 //wsFile ...

  3. ChatGPT论文降重Prompt

    你是一个已经阅读过大量论文的论文写作专家.我正在设计一个基于xxx系统.接下来,我将给你一个论文段落,你可以使用调整句子用词.句子结构等方法,重新描述这段话,对文章的内容进行润色,使之更加接近论文的写 ...

  4. Vue 文件流预览 PDF

    Vue js // pdf 预览 export function download(id) { return request({ url: '/bbs/regtech/law/download?id= ...

  5. 【赵渝强老师】大数据分析引擎:Presto

    一.什么是Presto? 背景知识:Hive的缺点和Presto的背景 Hive使用MapReduce作为底层计算框架,是专为批处理设计的.但随着数据越来越多,使用Hive进行一个简单的数据查询可能要 ...

  6. Linux PSI--Pressure Stall Information

    Google在在Android11及之后版本的LMKD中,使用了psi作为杀进程的策略,本文简单介绍下psi. 转载自使用PSI(Pressure Stall Information)监控服务器资源_ ...

  7. WPF-超市管理系统

    1. 新建 WPF APP (net framework )项目

  8. Linux 系统常见 的命令

    uname -a 查看linux 的版本信息 : pwd :打印当前的工作目录 ,print work directory: cd  改变目录 ,change directory : cd . 当前目 ...

  9. Games101 作业8 质点弹簧系统

    目录 1 前言 2 基础数据结构 3 欧拉 4 Verlet Integration 4.1 Constraints 1 前言 质点弹簧系统的模拟仿真,其实非常简单,核心就是牛顿第二定律 \(F = ...

  10. 当多核变单核:破解CPU核心神秘失踪的终极指南!

    CPU 核心与线程识别问题解决文档 1. 背景 在一台物理主机上运行 lscpu 命令时,发现系统仅识别到 1 个核心和 1 个线程,尽管主机搭载的是 Intel Xeon E5-2686 v4 处理 ...