Sortable.js笔记
1.前言
- SortableJS是功能强大的JavaScript 拖拽库,更多配置项:Sortable.js中文网|配置
- 引入插件
<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.触发区域
- 默认情况下,子元素所有的区域都可以触发拖拽,可以使用handle和filter字段来控制哪些元素可以触发拖拽
- 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笔记的更多相关文章
- js实现table排序-sortable.js
方案一.引用sortable.js包 /* <th class="thcss" style="width: 40px;" onclick="so ...
- html5 Sortable.js 拖拽排序源码分析
最近公司项目经常用到一个拖拽 Sortable.js插件,所以有空的时候看了 Sortable.js 源码,总共1300多行这样,写的挺完美的. 本帖属于原创,转载请出名出处. 官网http:// ...
- vuejs2.0使用Sortable.js实现的拖拽功能
简介 在使用vue1.x之前的版本的时候,页面中的拖拽功能,我在项目中是直接用的jquery ui中的sortable.js,只是在拖拽完成后,在update的回调函数中又重新排序了存放数据的数组.但 ...
- 拖放排序插件Sortable.js 兼容好及功能全个人觉得比dragula.js 好的多
经测试,Sortable.js 兼容好和使用方便都是比较不错的,特别手机端使用很棒 介绍 Sortable.js是一款轻量级的拖放排序列表的js插件(虽然体积小,但是功能很强大)下载地址:https: ...
- Vue.Draggable:基于 Sortable.js 的 Vue 拖拽组件使用中遇到的问题
Sortable.js 介绍 https://segmentfault.com/a/1190000008209715 项目中遇到的问题: A - 我需要在项目的拖拽组件中,使用背景 1 - 想到的第一 ...
- Sortable.js
拖拽的时候主要由这几个事件完成, ondragstart 事件:当拖拽元素开始被拖拽的时候触发的事件,此事件作用在被拖曳元素上 ondragenter 事件:当拖曳元素进入目标元素的时候触发的事件,此 ...
- vue2.0使用Sortable.js实现的拖拽功能
简介 在使用vue1.x之前的版本的时候,页面中的拖拽功能,我在项目中是直接用的jQuery ui中的sortable.js,只是在拖拽完成后,在update的回调函数中又重新排序了存放数据的数组.但 ...
- html5支持drag的拖放排序插件sortable.js
html5支持drag的拖放排序插件sortable.js <script src="//cdnjs.cloudflare.com/ajax/libs/Sortable/1.5.1/S ...
- Data Visualization and D3.js 笔记(1)
课程地址: https://classroom.udacity.com/courses/ud507 什么是数据可视化? 高效传达一个故事/概念,探索数据的pattern 通过颜色.尺寸.形式在视觉上表 ...
- js笔记-0
#js笔记-0 数组: indexOf方法: Array也可以通过indexOf()来搜索一个指定的元素的位置: var arr = [10, 20, '30', 'xyz']; arr.indexO ...
随机推荐
- HDLC报文简单分析
最近在学习HDLC协议,从刚开始的一窍不通到现在的懵懵懂懂,下面分享一段报文解析,给初学者一点点经验的分析. 报文:7E A0 57 03 02 B8 4B 5B E6 E7 00 C4 01 C1 ...
- 【赵渝强老师】Oracle RAC集群的概念
一.什么是Oracle RAC(Real Application Cluster)? Oracle RAC 是一个具有共享缓存架构的集群数据库,它克服了传统的无共享方法和共享磁盘方法的限制,为您的所有 ...
- 基于Keras-YOLO实现目标检测
Keras-YOLO 3项目使用Python语言实现了YOLO v3网络模型,并且可以导入Darknet网络预先训练好的权重文件信息直接使用网络进行目标识别. 1. 下载Keras-YOLO 3项目 ...
- 《MongoDB游记之轻松入门到进阶》代码下载
<MongoDB游记之轻松入门到进阶>代码下载,看看有没有用 http://pan.baidu.com/s/1boKG28R https://item.jd.com/12236244.ht ...
- Js运算符(操作符)
算数运算符 a = 1 + 1 // 2 a = 10 - 5 // 5 a = 10 / 5 // 2 a = 10 / 0 // js中除以0不会报错,结果是Infinity a = 2*2 // ...
- 存储事件 storage
// 去手动删除本地存储触发存储事件 window.addEventListener('storage', function () { console.log('存储事件触发了') }) const ...
- C++新版本特性
C++新特性 1.C++11 中的新特性 C++11 引入了许多新特性,包括自动类型推导.lambda 表达式.右值引用等.下面介绍其中的一些重要特性. 1.1 自动类型推导(Type Inferen ...
- vue 父子组件之间传值
在vue中父子组件传值是必不可少的,大家必须要学会! 首先父组件向子组件传值: 父组件:比如我们传teacher为index,如果我们传值变量可以使用 : 绑定我们在data中定义的变量. 子组件:为 ...
- CentOS 7环境下DM8数据库的安装与配置
一.环境准备 首先,确保你的系统已经安装了CentOS 7,并且具有足够的磁盘空间和内存来支持DM8数据库的运行.此外,你还需要具备管理员权限,以便进行后续的安装和配置操作. 二.下载DM8安装包 访 ...
- bitset优化传递闭包
bitset优化传递闭包 时间复杂度 \(O(\frac{n^3}{w})\) #include<bits/stdc++.h> #define F(i,l,r) for(int i=l;i ...