热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

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

经测试,Sortable.js 兼容和使用都是比较好的,特别手机端使用很棒

介绍

Sortable.js是一款轻量级的拖放排序列表的js插件(虽然体积小,但是功能很强大)
下载地址:https://github.com/RubaXa/Sor...
官方DEMO:http://rubaxa.github.io/Sorta...

 

特点

  • 支持触屏设备和大部分浏览器(IE9以下的就不支持了,原因都懂得)

  • 可以从一个列表容器中拖拽一个列表单元到其他容器或本列表容器中进行排序

  • 移动列表单元时有css动画

  • 支持拖放操作和可选择的文本(这句我也没理解,大概意思就是对原生的拖放进行拓展了)

  • 非常友善的滚动效果

  • 基于原生HTML5中的拖放API

  • 支持多种框架(angular、vue、react等)

  • 支持所有的css框架,像Bootstrap

  • 简单的API,方便使用

  • CDN

  • 不依赖jQuery

VUE框架中使用,见这里:http://www.cnblogs.com/xiangsj/p/7278663.html

使用举例


var
el = document.getElementById('items');new Sortable(el);
//常用
new Sortable(el, {
handle: ".my-handle", // 拖拽区域,默认为 items 的 子元素

onStart: function (
/**Event*/evt) { // 拖拽开始
var itemEl = evt.item;// 当前拖拽的html元素
},

onEnd: function (
/**Event*/evt) { // 拖拽结束
var itemEl = evt.item;
}

});



如是2组之间拖放:

new Sortable(document.getElementById('C_fieldSet_01'), {
group:
".C_move",
handle:
".C_move"
});
new Sortable(document.getElementById('C_fieldSet_02'), {
group:
".C_move",
handle:
".C_move"
});

 

配置项

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
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)
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) { ... }, // 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) {
evt.oldIndex;
// element's old index within parent
evt.newIndex; // element's new index within parent
},

// Element is dropped into the list from another list
onAdd: function (/**Event*/evt) {
var itemEl = evt.item; // dragged HTMLElement
evt.from; // previous list
// + indexes from onEnd
},

// Changed sorting within list
onUpdate: function (/**Event*/evt) {
var itemEl = evt.item; // dragged HTMLElement
// + indexes from onEnd
},

// Called by any change to the list (add / update / remove)
onSort: function (/**Event*/evt) {
// same properties as onUpdate
},

// Element is removed from the list into another list
onRemove: function (/**Event*/evt) {
// same properties as onUpdate
},

// 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
      没理解

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

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

    • save()

    • destroy()

 

收集来源:

https://segmentfault.com/a/1190000008209715 (介绍的比较全面)

http://www.jqcool.net/sortable.html

 


推荐阅读
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 为了优化用户体验,本文探讨了如何调整下拉菜单的宽度。通过合理设置宽度,可以提升界面的美观性和易用性。文章提供了具体的代码示例,帮助开发者实现这一目标。例如,可以通过 CSS 或 JavaScript 来动态调整下拉菜单的宽度,确保其在不同设备和屏幕尺寸上都能保持良好的显示效果。 ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • Git命令基础应用指南
    本指南详细介绍了Git命令的基础应用,包括如何使用`git clone`从远程服务器克隆仓库(例如:`git clone [url/path/repository]`)以及如何克隆本地仓库(例如:`git clone [local/path/repository]`)。此外,还提供了常见的Git操作技巧,帮助开发者高效管理代码版本。 ... [详细]
  • 本文详细解析了 Yii2 框架中视图和布局的各种函数,并综述了它们在实际开发中的应用场景。通过深入探讨每个函数的功能和用法,为开发者提供了全面的参考,帮助他们在项目中更高效地利用这些工具。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 在List和Set集合中存储Object类型的数据元素 ... [详细]
  • 本文深入解析了WCF Binding模型中的绑定元素,详细介绍了信道、信道管理器、信道监听器和信道工厂的概念与作用。从对象创建的角度来看,信道管理器负责信道的生成。具体而言,客户端的信道通过信道工厂进行实例化,而服务端则通过信道监听器来接收请求。文章还探讨了这些组件之间的交互机制及其在WCF通信中的重要性。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 本文详细介绍了一种利用 ESP8266 01S 模块构建 Web 服务器的成功实践方案。通过具体的代码示例和详细的步骤说明,帮助读者快速掌握该模块的使用方法。在疫情期间,作者重新审视并研究了这一未被充分利用的模块,最终成功实现了 Web 服务器的功能。本文不仅提供了完整的代码实现,还涵盖了调试过程中遇到的常见问题及其解决方法,为初学者提供了宝贵的参考。 ... [详细]
  • 在开发过程中,我最初也依赖于功能全面但操作繁琐的集成开发环境(IDE),如Borland Delphi 和 Microsoft Visual Studio。然而,随着对高效开发的追求,我逐渐转向了更加轻量级和灵活的工具组合。通过 CLIfe,我构建了一个高度定制化的开发环境,不仅提高了代码编写效率,还简化了项目管理流程。这一配置结合了多种强大的命令行工具和插件,使我在日常开发中能够更加得心应手。 ... [详细]
  • 本文介绍了 Vue 开发的入门指南,重点讲解了开发环境的配置与项目的基本搭建。推荐使用 WebStorm 作为 IDE,其下载地址为 。安装时请选择适合您操作系统的版本,并通过 获取激活码。WebStorm 是前端开发者的理想选择,提供了丰富的功能和强大的代码编辑能力。 ... [详细]
  • 作为软件工程专业的学生,我深知课堂上教师讲解速度之快,很多时候需要课后自行消化和巩固。因此,撰写这篇Java Web开发入门教程,旨在帮助初学者更好地理解和掌握基础知识。通过详细记录学习过程,希望能为更多像我一样在基础方面还有待提升的学员提供有益的参考。 ... [详细]
author-avatar
我爱大树茶
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有