拖放排序是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. centos下U盘重装windows

    当前机器使用的都是centos系统,后来想使用windows,这时候就需要在centos下去安装windows系统啦. 当然是采用U盘安装啦,先准备U盘,U盘数据先备份以免丢失. 第一步:制作U盘启动 ...

  2. Spring 梳理 - filter、interceptor、aop实现与区别 -第一篇

    前言 项目中我们经常需要对RESTful api进行拦截,主流实现方法有filter.interceptor.aop,先说一下他们各自的实现. Filter AnimalFilter实现javax.s ...

  3. windows安装Mycat并测试

    1.下载系统安装包 选择相应的版本进行下载,地址:http://dl.mycat.io/ .Mycat数据库分库分表中间件介绍 http://www.mycat.io/ 2.安装 安装mycat前需要 ...

  4. Spring只定义接口自动代理接口实现类

    能够扫描到包 @ComponentScan("org.zxp.esclientrhl") ESCRegistrar类主要实现ImportBeanDefinitionRegistra ...

  5. Django之使用redis缓存session,历史浏览记录,首页数据实现性能优化

    Redis缓存session 配置Django缓存数据到redis中 # diango的缓存配置 CACHES = { "default": { "BACKEND&quo ...

  6. 前沿科技-混合现实(MR)远程协作辅助工具:微缩虚拟形象Mini-Me

    今天分享一篇在刚刚结束的CHI’2018上发表的full paper.该文章由来自澳洲University of South Australia的Piumsomboon等人和来自新西兰Universi ...

  7. Webstorm轻松部署项目至服务器

    wo大前端在开发环境下,需要将项目部署到测试环境,webstorm进行基础配置操作就可实现. 一.在Deployment选项下配置远程服务器地址 点击加号,选择type类型,Name自己填,帮你找到这 ...

  8. 一个原生JS实现的不太成熟的贪吃蛇游戏

    一个初初初初级前端民工 主要是记录一下写过的东西,复习用 大佬们如果看到代码哪里不符合规范,或者有更好写法的,欢迎各位批评指正 十分感谢 实现一个贪吃蛇游戏需要几步? 1.有地图 2.有蛇 3.有食物 ...

  9. java架构之路-(面试篇)Mysql面试大全

    说一下mysql比较宏观的面试,具体咋写sql的这里就不过多举例了.后面我还会给出一个关于mysql面试优化的试题,这里主要说的索引和B+Tree结构,很少提到我们的集群配置优化方案. 1.索引是什么 ...

  10. 三个Eclipse下的Debug的使用场景(五)

    本文链接:https://blog.csdn.net/u011781521/article/details/55000066    http://blog.csdn.net/u010075335/ar ...