拖放排序是WEB应用中常见的功能。虽然网上有很多别人已经造好的轮子,但是就我个人而言,没事就喜欢研究原理,自己造轮子,不管强大与否,简洁够用就是我的目标,再一个就是自己写的东西,应用起来得心应手,修改或者扩展起来也是得心应手,相比一些API不够详细,或者说用户体验不好(不够简明)的API来说,或者说插件本身就没考虑周到,考虑周到又显得臃肿来说,使用它还不如造它。

接下来回到插件,先看看漂亮的UI(参照Teambition的任务面板做的,算不算广告 [/惊叹]),插件目前只做了(针对)上下拖放排序,左右拖放排序等有时间再做(我希望API是极度简单的,即便增加左右排序):

二、插件原理(授人以鱼还要授人以渔):

1、确定要拖放的一堆元素,正常情况是一堆li(假设现在的Demo是li)。

2、给每个li添加鼠标按下(elem.onmousedown),和按下移动(document.onmousemove),按下抬起的事件(document.onmouseup),类似于拖拽的原理,鉴于性能,应该考虑用事件委托的形式。

3、当拖动元素执行move事件的时候,在它前面创建并添加一个跟它一样样式的元素并清空内容用于占位操作(假设这个占位元素叫clone),再把拖动元素设置为绝对定位,并把它的DOM结构放到父级(ul)的末尾。

4、在移动过程中判断拖动的元素的top值与clone元素的上一个兄弟节点比较,如果top小于上一个兄弟节点的offset().top值(这里,本插件用top值与offset().top - 兄弟节点的height()/2,交互形式不同而已),那么就将clone元素与上一个兄弟节点交换DOM结构即可,同理判断top是否大于下一个兄弟节点的offset().top值,如果大于就让clone元素与下一个兄弟节点交换DOM结构即可。

5、当中的一些细节处理和兼容处理先略过。

三、简洁:插件加上那么多漂亮的空行和注释才115行GitHub地址

四、使用方法:

1、假设Html结构如下:

<div id="wrap">
<ul>
<li>...</li>
<li>...</li>
...
</ul>
</div>

2、依次引入jquery.js和ddsort.js,然后使用DDSort API实现如图拖放排序效果:

$( '#wrap' ).DDSort({
target: 'li',
floatStyle: {
'border': '1px solid #ccc',
'background-color': '#fff'
}
});

五、详细API(其实也是极少极简单):

DDSort方法只接受一个JSON对象类型的参数,以下是对这个参数的描述。

参数列表 类型 描述
target string 插件内部使用的是jQuery的on方法绑定的事件,此参数就是on方法上的选择器字符串
cloneStyle object 可选,设置占位符元素的样式
floatStyle object 可选,设置拖动元素的样式
down function 可选,鼠标按下时执行的函数
move function 可选,鼠标移动时执行的函数
up function 可选,鼠标抬起时执行的函数

六、插件目前还很小,虽然够正常的使用,但是有些不正常的样式可能还未考虑到,比如说当li的某个父级有相对定位时(父级不是body),拖动元素的left,top值就会存在问题,当然也许这个跟业务的增长和DOM结构有关,目前我还没接触到这样的结构,所以欢迎有志趣的小伙伴Fork DDSort,提交你酷炫简洁的代码。

七、插件地址与下载:https://github.com/Barrior/DDSort,感谢Star。

一个简洁漂亮的jQuery拖放排序插件DDSort的更多相关文章

  1. Sortable – 简单灵活的 JavaScript 拖放排序插件

    当需要在网站中添加拖放排序功能的时候,jQuery UI 的排序组件可能是最流行的解决方案.今天给大家介绍另一款简单灵活的 JavaScript 拖放排序插件——Sortable,它使用 HTML5 ...

  2. 一款简洁大气的jquery日期日历插件

    本jquery插件名为manhuaDate,暂时只支持jquery 1.9.0以下版本,比如jquery-1.8.3.min.js 查看效果网址:http://keleyi.com/a/bjad/em ...

  3. jQuery 表格排序插件 Tablesorter 使用

    jQuery 表格排序插件 Tablesorter 使用方式如下: 1.引入头文件(注意一定要把jQuery放在前面): <script src="lib/jquery-1.8.3.m ...

  4. FlexSlider是一个非常出色的jQuery滑动切换插件

    FlexSlider是一个非常出色的jQuery滑动切换插件,它支持所有主流浏览器,并有淡入淡出效果.适合所有初级和高级网页设计师使用.不过很多人都只是使用默认的参数,今天来说说具体的参数来给大家看看 ...

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

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

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

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

  7. 拖放排序插件Sortable.js

    特点 支持触屏设备和大部分浏览器(IE9以下的就不支持了,原因都懂得) 可以从一个列表容器中拖拽一个列表单元到其他容器或本列表容器中进行排序 移动列表单元时有css动画 支持拖放操作和可选择的文本(这 ...

  8. 【新手向】一个超简单的jquery.mCustomScrollbar滚动条插件Demo

    <script src="https://cdn.bootcss.com/jquery/2.2.4/jquery.min.js"></script> < ...

  9. Table Dragger - 简单的 JS 拖放排序表格插件

    Table Dragger 是一个极简的实现拖放排序的表格插件,纯 JavaScript 库,不依赖 jQuery.用于构建操作方便的拖放排序功能,超级容易设置,有平滑的动画,支持触摸事件. 在线演示 ...

随机推荐

  1. 首次GitHub千星项目提交维护成功 留念

    现在有点激动,可能有混乱的地方.请大家见谅. 一直觉得千星项目,对我来说是一个遥不可及的地方.没想到第一次在GitHub上 提交Pull Request 就成功了,并且是一个千星项目. 虽然 只是提出 ...

  2. 使用file_get_contents() 发送GET、POST请求

    服务器端执行HTTP请求,大家经常使用的就是CURL,curl工具的确是很好的数据文件传输工具,那么除此之外还有其他的工具能实现这个功能吗? 现在为你介绍一个很常见的工具 file_get_conte ...

  3. c#学习路线应该靠谱

    因为学c/c++,找不到工作.想转c#,搜索得到的学习路线 C#入门经典 C#数据库入门经典 C#高级编程 ADO.net高级编程 基础的东西搞明白之后,可以学习设计模式,C#设计模式 你是说深入的书 ...

  4. 转载:Docker入门只需看这一篇就够了

    最近项目中需要用到 Docker 打包,于是上网查找资料学习了 Docker 的基本命令,记录一下自己遇到的一些错误. 准备开始自己写,结果看到了阮一峰老师的文章,瞬间就没有写下去的动力了,转载大佬的 ...

  5. 【SQL server基础】object_id()函数

    在SQLServer数据库中,如果查询数据库中是否存在指定名称的索引或者外键约束等,经常会用到object_id('name','type')方法,做笔记如下: ? 语法:object_id('obj ...

  6. Idea插件之IdeTalk

    前言 随着越来越多的公司与Java工程师,逐步从Eclipse过度到Idea,安装相应的插件可能会成倍的增加工作效率. IDETalk是由JetBrains的工程师开发的一款代码级的协同工具,主要是为 ...

  7. eShopOnContainers学习系列(一):Swagger的使用

    最近在看eShopOnContainer项目,抽取一下其中的基础知识点,做个记录,有兴趣的可以看下. 新建一个.net core API项目,添加Nuget包 Swashbuckle.AspNetCo ...

  8. dedecms5.7最新漏洞修复

    最近发现织梦cms被挂马现象频繁,解决好好几个网站的问题,但是过不了多久,就又被攻击了,即使更改系统及ftp密码,也没有起到防御的作用,最后怀疑cms本身漏洞,于是采用工具扫描了一下,才发现问题的严重 ...

  9. MySql5.5安装步骤及MySql_Front视图配置

    一.下载文件 有需要的朋友,请自行到百度云下载 链接:https://pan.baidu.com/s/13Cf1VohMz_a0czBI05UqJg 提取码:cmyq 二.安装MySql 2.1.运行 ...

  10. pinpoint1.8.5安装及使用指南

    简介 pinpoint是开源在github上的一款APM监控工具,它是用Java编写的,用于大规模分布式系统监控.它对性能的影响最小(只增加约3%资源利用率),安装agent是无侵入式的. 各大APM ...