html列表拖拽排序插件,JS拖拽排序插件Sortable.js用法实例分析

本文实例讲述了JS拖拽排序插件Sortable.js用法。分享给大家供大家参考,具体如下:

最近由于项目功能设计的原因,需要对table中的行实现拖拽排序功能,找来找去发现Sortable.js能很好的满足这个需求,而且它还是开源的,于是乎就开始学习使用Sortable.js,再然后就有了这篇文章。

特点:

轻量级但功能强大

移动列表项时有动画

支持触屏设备和大多数浏览器(IE9及以下除外)

支持单个列表容器内部拖拽排序,也支持两个列表容器互相拖拽排序

支持拖放操作和可选择的文本

非常友善的滚动效果

基于原生HTML5中的拖放API

支持多种框架(Angular、Vue、React等)

支持所有的CSS框架,如:Bootstrap

简单的API,方便调用

CDN

不依赖于jQuery

运行效果如下图所示:

c3a9005142b1c30abee4496f7afda1b9.png

单个列表容器内部拖拽排序

$(document).ready(function () {

var ul = document.getElementById("infos");

var sortable = new Sortable(ul, {

handle: "input,li",//设置li、input支持拖拽

animation: 150,//设置动画时长

// Element dragging started

onStart: function (/**Event*/evt) {

evt.oldIndex; // element index within parent,此处指的是li的索引值

},

// Element dragging ended

onEnd: function (/**Event*/evt) {

var lis = $("#infos li");

//拖拽完毕后重新设置序号,使其连续

for (var i = 0; i < lis.length; i++) {

var no = $(lis[i]).find("input:eq(0)");

no.val(i + 1);

}

}

});

});

li{

cursor:pointer;

padding-bottom:5px;

list-style:none;

}

  • --请选择--

    objective

    proposition

  • --请选择--

    eliminate

    alige

  • --请选择--

    optimize

    deploy

两个列表容器相互拖拽排序

$(document).ready(function () {

var infosOne = document.getElementById("infosOne");

var sortableOne = new Sortable(infosOne, {

group: "guo",//若需要在两个列表容器间拖拽排序,那group的值必须相同

handle: "input,li",//设置li、input支持拖拽

animation: 150,//设置动画时长

// Element dragging started

onStart: function (/**Event*/evt) {

evt.oldIndex; // element index within parent,此处指的是li的索引值

},

// Element dragging ended

onEnd: function (/**Event*/evt) {

var lis = $("#infosOne li");

for (var i = 0; i < lis.length; i++) {

var no = $(lis[i]).find("input:eq(0)");

no.val(i + 1);

}

lis = $("#infosTwo li");

for (var i = 0; i < lis.length; i++) {

var no = $(lis[i]).find("input:eq(0)");

no.val(i + 1);

}

}

});

var infosTwo = document.getElementById("infosTwo");

var sortableTwo = new Sortable(infosTwo, {

group:"guo",//若需要在两个列表容器间拖拽排序,那group的值必须相同

handle: "input,li",//设置li、input支持拖拽

animation: 150,//设置动画时长

// Element dragging started

onStart: function (/**Event*/evt) {

evt.oldIndex; // element index within parent,此处指的是li的索引值

},

// Element dragging ended

onEnd: function (/**Event*/evt) {

var lis = $("#infosOne li");

for (var i = 0; i < lis.length; i++) {

var no = $(lis[i]).find("input:eq(0)");

no.val(i + 1);

}

lis = $("#infosTwo li");

for (var i = 0; i < lis.length; i++) {

var no = $(lis[i]).find("input:eq(0)");

no.val(i + 1);

}

}

});

});

  • --请选择--

    objective

    proposition

  • --请选择--

    eliminate

    alige

  • --请选择--

    optimize

    deploy


  • --请选择--

    目标任务

    论题议题

  • --请选择--

    消除排除

    机敏的敏捷的

  • --请选择--

    优化使最优化

    发布部署

常见配置项及事件

var sortable = new Sortable(el, {

group: "name", // or { name: "...", pull: [true, false, clone], put: [true, false, array] }

sort: true, // sorting inside list

delay: 0, // time in milliseconds to define when the sorting should start

touchStartThreshold: 0, // px, how many pixels the point should move before cancelling a delayed drag event

disabled: false, // Disables the sortable if set to true.

store: null, // @see Store

animation: 150, // ms, animation speed moving items when sorting, `0` — without animation

handle: ".my-handle", // Drag handle selector within list items

filter: ".ignore-elements", // Selectors that do not lead to dragging (String or Function)

preventOnFilter: true, // Call `event.preventDefault()` when triggered `filter`

draggable: ".item", // Specifies which items inside the element should be draggable

ghostClass: "sortable-ghost", // Class name for the drop placeholder

chosenClass: "sortable-chosen", // Class name for the chosen item

dragClass: "sortable-drag", // Class name for the dragging item

dataIdAttr: 'data-id',

forceFallback: false, // ignore the HTML5 DnD behaviour and force the fallback to kick in

fallbackClass: "sortable-fallback", // Class name for the cloned DOM Element when using forceFallback

fallbackOnBody: false, // Appends the cloned DOM Element into the Document's Body

fallbackTolerance: 0, // Specify in pixels how far the mouse should move before it's considered as a drag.

scroll: true, // or HTMLElement

scrollFn: function(offsetX, offsetY, originalEvent, touchEvt, hoverTargetEl) { ... }, // if you have custom scrollbar scrollFn may be used for autoscrolling

scrollSensitivity: 30, // px, how near the mouse must be to an edge to start scrolling.

scrollSpeed: 10, // px

setData: function (/** DataTransfer */dataTransfer, /** HTMLElement*/dragEl) {

dataTransfer.setData('Text', dragEl.textContent); // `dataTransfer` object of HTML5 DragEvent

},

// Element is chosen

onChoose: function (/**Event*/evt) {

evt.oldIndex; // element index within parent

},

// Element dragging started

onStart: function (/**Event*/evt) {

evt.oldIndex; // element index within parent

},

// Element dragging ended

onEnd: function (/**Event*/evt) {

var itemEl = evt.item; // dragged HTMLElement

evt.to; // target list

evt.from; // previous list

evt.oldIndex; // element's old index within old parent

evt.newIndex; // element's new index within new parent

},

// Element is dropped into the list from another list

onAdd: function (/**Event*/evt) {

// same properties as onEnd

},

// Changed sorting within list

onUpdate: function (/**Event*/evt) {

// same properties as onEnd

},

// Called by any change to the list (add / update / remove)

onSort: function (/**Event*/evt) {

// same properties as onEnd

},

// Element is removed from the list into another list

onRemove: function (/**Event*/evt) {

// same properties as onEnd

},

// Attempt to drag a filtered element

onFilter: function (/**Event*/evt) {

var itemEl = evt.item; // HTMLElement receiving the `mousedown|tapstart` event.

},

// Event when you move an item in the list or between lists

onMove: function (/**Event*/evt, /**Event*/originalEvent) {

// Example: http://jsbin.com/tuyafe/1/edit?js,output

evt.dragged; // dragged HTMLElement

evt.draggedRect; // TextRectangle {left, top, right и bottom}

evt.related; // HTMLElement on which have guided

evt.relatedRect; // TextRectangle

originalEvent.clientY; // mouse position

// return false; — for cancel

},

// Called when creating a clone of element

onClone: function (/**Event*/evt) {

var origEl = evt.item;

var cloneEl = evt.clone;

}

});

属性

group:string or array

sort:boolean 定义是否列表单元是否可以在列表容器内进行拖拽排序;

delay:number 定义鼠标选中列表单元可以开始拖动的延迟时间;

disabled:boolean 定义是否此sortable对象是否可用,为true时sortable对象不能拖放排序等功能,为false时为可以进行排序,相当于一个开关;

animation:number 单位:ms,定义排序动画的时间;

handle:selector 格式为简单css选择器的字符串,使列表单元中符合选择器的元素成为拖动的手柄,只有按住拖动手柄才能使列表单元进行拖动;

filter:selector 格式为简单css选择器的字符串,定义哪些列表单元不能进行拖放,可设置为多个选择器,中间用“,”分隔;

draggable:selector 格式为简单css选择器的字符串,定义哪些列表单元可以进行拖放

ghostClass:selector 格式为简单css选择器的字符串,当拖动列表单元时会生成一个副本作为影子单元来模拟被拖动单元排序的情况,此配置项就是来给这个影子单元添加一个class,我们可以通过这种方式来给影子元素进行编辑样式;

chosenClass:selector 格式为简单css选择器的字符串,当选中列表单元时会给该单元增加一个class;

forceFallback:boolean 如果设置为true时,将不使用原生的html5的拖放,可以修改一些拖放中元素的样式等;

fallbackClass:string 当forceFallback设置为true时,拖放过程中鼠标附着单元的样式;

scroll:boolean 默认为true,当排序的容器是个可滚动的区域,拖放可以引起区域滚动

事件:

onChoose:function 列表单元被选中的回调函数

onStart:function 列表单元拖动开始的回调函数

onEnd:function 列表单元拖放结束后的回调函数

onAdd:function 列表单元添加到本列表容器的回调函数

onUpdate:function 列表单元在列表容器中的排序发生变化后的回调函数

onRemove:function 列表元素移到另一个列表容器的回调函数

onFilter:function 试图选中一个被filter过滤的列表单元的回调函数

onMove:function 当移动列表单元在一个列表容器中或者多个列表容器中的回调函数

onClone:function 当创建一个列表单元副本的时候的回调函数

事件对象:

事件对象在各个函数中略有不同,可通过输出对象查看对象的属性,下面简单列举几个:

to:HTMLElement--移动到列表容器

from:HTMLElement--来源的列表容器

item:HTMLElement--被移动的列表单元

clone:HTMLElement--副本的列表单元

oldIndex:number/undefined--在列表容器中的原序号

newIndex:number/undefined--在列表容器中的新序号

方法

option(name[,value])

获得或者设置项参数,使用方法类似于jQuery用法,没有第二个参数为获得option中第一个参数所对应的值,有第二个参数时,将重新赋给第一个参数所对应的值;

closest

返回满足selector条件的元素集合中的第一个项

toArray()

序列化可排序的列表单元的data-id(可通过配置项中dataIdAttr修改)放入一个数组,并返回这个数组中

sort()

通过自定义列表单元的data-id的数组对列表单元进行排序

save()

destroy()

PS:这里再为大家推荐一款关于排序的演示工具供大家参考:

希望本文所述对大家JavaScript程序设计有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/561482.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

信息学奥赛课课通VS中学生计算机,数学奥赛VS信息学奥赛 孩子们该如何选择

同是奥赛,为什么越来越多的孩子选了信息学?今年3月&#xff0c;教育部正式发布通知&#xff1a;全面取消中学奥赛等5项全国性高考加分项目。这个消息对很多有志于让孩子“走捷径”的家长而言&#xff0c;可谓晴空霹雳&#xff0c;升学道路上突然没了“加分”可怎么办&#xff…

阿尔伯塔大学2019计算机科学 cs,[阿尔伯塔大学]计算机/计算机工程专业

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼阿尔伯塔大学的的电子与计算机工程专业(ECE)一直以来在加拿大各顶尖学校中名列前茅&#xff0c;其拥有诸多先进的设施(高端前沿的实验室设备、专门的实习场地以及极具特色的6500平方英尺的纳米和微型加工设施等)&#xff0c;国际知…

方正计算机软件保护进超级用户,超级用户权限补丁(SuperSU Pro)含刷机包

SuperSU权限管理是一款对已获取ROOT权限的Android手机进行第三方应用程序的权限管理的应用工具&#xff0c;神器作者最新作品&#xff0c;比Superuser功能更加强大&#xff0c;界面更加美观。注意&#xff1a;此软件需要手机已获取ROOT权限后才能正常运行&#xff01;超级用户权…

计算机网络又称为分时多用户,7计算机网络原理期末复习试卷A卷.doc

计算机网络原理一.填空题(每空1分&#xff0c;共25分)1&#xff0e;计算机网络系统由通信子网和 子网构成的。2&#xff0e;存储转发方式又可分为 &#xff0c; 。3&#xff0e;HDLC帧格式是由标志、地址、控制、信息、 、标志等部分组成。4&#xff0e;RS449标准的电器特性有两…

理解计算机网络的拓扑结构,认识计算机网络拓扑结构

计算机网络拓扑(Computer Network Topology)是指由计算机组成的网络之间设备的分布情况以及连接状态.把它两画在图上就成了拓扑图.一般在图上要标明设备所处的位置,设备的名称类型,以及设备间的连接介质类型.它分为物理拓扑和逻辑拓扑两种。下面是学习啦小编跟大家分享的是认识…

微型计算机十号功能,青岛理工大学练习题微机原理(10页)-原创力文档

计算机基础知识同步练习题一、判断题下列各题中&#xff0c;您认为对的请在括号中填入“是” &#xff0c;错的填入“非” 。1. 世界上第一台电子计算机是 1946 年在美国研制成功的。 ( )2. 电子计算机的用途是进行各种科学研究的数值计算。 ( )3. 电子计算机的计算速度很快但计…

18计算机汽修英语期末试卷,英语语法期末考试试卷(a)

(2009至2010学年第2学期)课程名称&#xff1a;英语语法考试时间&#xff1a;110分钟课程代码&#xff1a;5112470试卷总分&#xff1a;100分考试形式&#xff1a;闭卷学生自带普通计算机器:PartIVocabularyandStructure(15%)Direction:Inthispart,thereare30incompletesentence…

通信与计算机技术的联系,通信技术与计算机技术融合发展论文

通信技术与计算机技术融合发展论文摘要&#xff1a;通信技术和计算机技术是现代数据传输与处理中所使用的两种核心技术,对数据传输方式与处理方式具有莫大的推动作用。文章从两种技术的融合点出发对现代计算机通信技术的定义、特点、功能、应用领域、应用优势以及发展前景进行了…

计算机组成原理第二版第4章的答案,计算机组成原理第4章习题参考答案

计算机组成原理习题参考答案第4章 数值的机器运算4-2&#xff0e;某加法器采用组内并行&#xff0c;组间并行的进位链&#xff0c;4位一组&#xff0c;写出进位信号C6逻辑表达式。[解] 组间并行的进位链&#xff0c;产生的最低一组的进位输出为&#xff1a;C4G1*P1*C0 (其中&am…

一级计算机考试修改信息书面申请表,医院信息科修改数据库申请单.doc

医院信息科修改数据库申请单医院信息科修改数据库申请单篇一&#xff1a;医院操作系统及数据库变更申请单操作系统及数据库变更申请单※保持一致。在重装结束后必须到计算机部重新验收&#xff0c;经验收无问题方可重新开通使用。篇二&#xff1a;医院信息系统数据库设计1――修…

江苏计算机一级怎么自学,江苏计算机一级自学教程推荐:计算机基础及MS Office应用上机指导(2018年版)...

&nbsp&nbsp[导读]:江苏计算机一级自学教程推荐&#xff1a;计算机基础及MS Office应用上机指导(2018年版)&#xff0c;更多计算机等级考试用书、考试内容和考试模拟试题&#xff0c;请访问易考吧计算机等级网(https://www.etest8.com/dengji/)2018年全国计算机等级考试…

16秋川大计算机基础作业,川大 16秋 《计算机应用基础》第一次作业答案

《川大 16秋 《计算机应用基础》第一次作业答案》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《川大 16秋 《计算机应用基础》第一次作业答案(7页珍藏版)》请在人人文库网上搜索。1、你的得分&#xff1a;100.0说明&#xff1a;每道小题选项旁的标识是标准答案。一、…

辽源天气预报软件测试,辽源天气预报15天

发送给QQ好友★辽源未来15天天气预报★辽源天气预报7月22日 星期四:多云转阴&#xff0c;23C~33C西风转西南风&#xff0c;小于3级辽源天气预报7月23日 星期五:多云&#xff0c;22C~33C西南风&#xff0c;小于3级辽源天气预报7月24日 星期六:多云&#xff0c;22C~32C西风转西南…

兰州市中考会考计算机考试,2016兰州中考体育26日开考 采用全套智能测试仪器...

2016年兰州市中考体育将于5月26日集中开考&#xff0c;而且考试成绩以分数的形式计入中考总分(语文、数学、英语、物理、化学、体育6科总分720分)。就考生家长担心的体育考试能否公平公正的疑问&#xff0c;兰州晨报5月6日从兰州市教育局了解到&#xff0c;城市四区9个考点将全…

土木工程和计算机专硕,第一次发帖 关于大工土木专硕

本帖最后由 duxiaowei11115 于 2013-4-6 16:39 编辑本人2013考研学生&#xff0c;三月二十九日顺利被大连理工大学结构专硕录取 &#xff0c;论坛逛了快半年了&#xff0c;我竟然没有找到关于大工土木专硕的好贴子&#xff0c;所以我觉得还是有必要把我的考研经验以及复试经验分…

启动wcc显示本地服务器失败,cwrsync server 服务启动失败的解决方法小结

经过测试&#xff0c;原来是因为服务器自动重启时没有停止cwrsync server&#xff0c;如果突然重启就会造成这个错误&#xff0c;如果出现了这个问题&#xff0c;我们可以通过删除.pid 文件即可。故障一&#xff1a;事件类型: 错误事件来源: RsyncServer事件种类: 无事件 ID: 0…

ajax异步加载和cmd,异步传输Ajax(JQ)

异步传输Ajax(JQ)JSP服务器Stringstr"{\"name\":[{\"a\":\"张三\"},{\"a\":\"李四\"}],\"age\":18}";resp.getWriter().write(str);客户端$(function(){$("button:eq(0)").click(function(){…

微软故障转移群集服务器要求,故障转移群集概述

故障转移群集概述08/03/2016本文内容适用对象&#xff1a;Windows Server 2012 R2, Windows Server 2012本主题提供对 Windows Server 2012 R2 和 Windows Server 2012 中故障转移群集功能的概述。 故障转移群集为许多服务器工作负荷提供高可用性和可伸缩性。 其中包括服务器应…

博易大师行情服务器文件夹,博易大师目录

c:\program files\pobo settings这个目录下的东西是pobo的参数设置这个路径是可以改的具体在pobo安装路径下有个cfg子目录里面有个userpath.ini文件内容就是pobo settings的生成路径第一次运行pobo.exe时会按照这个设置自动生成pobo settings子目录 配置文件在pobo settings里&…

马踏过河卒

1000ms 131072KAA 点有一个过河卒&#xff0c;需要走到目标 BB 点。卒行走规则&#xff1a;可以向下、或者向右。同时在棋盘上的任一点有一个对方的马&#xff08;如上图的 CC 点&#xff09;&#xff0c;该马所在的点和所有跳跃一步可达的点称为对方马的控制点。例如上图 CC 点…