资讯专栏INFORMATION COLUMN

分享一个jQuery的拖动排序插件

zzbo / 1373人阅读

摘要:基于的拖动排序插件代码地址核心代码由于有些浏览器的图片和链接是默认可以拖动的,所以屏蔽掉的事件只允许鼠标左键拖动禁止在表单元素里面拖动滚动条的位置向上排序向下排序用法水平有限,欢迎提出宝贵意见一起交流学习

基于jQuery的拖动排序插件

代码地址:https://github.com/ylb1992/dr...
核心代码:

(function($) {
    "use strict";
    $.fn.dragSort = function(options) {
        var settings = $.extend(true, {
            targetEle: "li",
            replaceStyle: {
                "background-color": "#f9f9f9",
                "border": "1px dashed #ffffd"
            },
            dragStyle: {
                "position": "fixed",
                "box-shadow": "10px 10px 20px 0 #eee"
            }
        }, options);

        return this.each(function() {
            
            // 由于有些浏览器的图片和链接是默认可以拖动的,所以屏蔽掉document的dragstart事件 
            document.ondragstart = function() {
                return false;
            }

            var thisEle = $(this);
            thisEle.on("mousedown.dragSort", settings.targetEle, function(event) {

                var selfEle = $(this);

                // 只允许鼠标左键拖动
                if(event.which !== 1) {
                    return;
                }

                // 禁止在表单元素里面拖动
                var tagName = event.target.tagName.toUpperCase();
                if(tagName === "INPUT" || tagName === "TEXTAREA" || tagName === "SELECT") {
                    return;
                }

                var moveEle = $(this);

                var offset = selfEle.offset();
                var rangeX = event.pageX - offset.left;
                var rangeY = event.pageY - offset.top;

                var replaceEle = selfEle.clone()
                    .css("height", selfEle.outerHeight())
                    .css(settings.replaceStyle)
                    .empty();
                settings.dragStyle.width = selfEle.width();
                var move = true;

                $(document).on("mousemove.dragSort", function(event) {
                    if (move) {
                        moveEle.before(replaceEle).css(settings.dragStyle).appendTo(moveEle.parent());
                        move = false;
                    }

                    var thisOuterHeight = moveEle.outerHeight();

                    // 滚动条的位置
                    var scrollTop = $(document).scrollTop();
                    var scrollLeft = $(document).scrollLeft();


                    var moveLeft = event.pageX - rangeX - scrollLeft;
                    var moveTop = event.pageY - rangeY - scrollTop;



                    var prevEle = replaceEle.prev();
                    var nextEle = replaceEle.next().not(moveEle);

                    moveEle.css({
                        left: moveLeft,
                        top: moveTop
                    });


                    // 向上排序
                    if (prevEle.length > 0 && moveTop + scrollTop < prevEle.offset().top + prevEle.outerHeight() / 2) { 
                        replaceEle.after(prevEle);
                    //向下排序
                    } else if (nextEle.length > 0 && moveTop + scrollTop > nextEle.offset().top - nextEle.outerHeight() / 2) { 
                        replaceEle.before(nextEle);
                    }
                });

                $(document).on("mouseup.dragSort", function(event) {
                    $(document).off("mousemove.dragSort mouseup.dragSort")
                    if (!move) {
                        replaceEle.before(moveEle.removeAttr("style")).remove();
                    }
                });
            });
        });
    };
})(jQuery)

用法:

$("#wrap").dragSort();

水平有限,欢迎提出宝贵意见一起交流学习

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/83239.html

相关文章

  • Web前端常用插件

    摘要:弹窗视频嵌入插件幻灯片图片切换手机端响应式日期控件上传图片控件校验控件分页静态分页动态分页相册效果控件多级下拉图片延迟加载或响应式管理模板插件库大转盘九宫格效果整屏滚动滚动效果用于移动项目的光滑菜单浏览器端格式化工具千手观音 弹窗 1.blockUI2.overlay 3.sweetAlert 视频 1.jwplayer2.video.js html53.swfobject Flas...

    quietin 评论0 收藏0
  • 分享一个可用于拖动排序vue组件

    摘要:最近要做拖拽相关的功能,本来想自己写,忽然想起来之前在轮子工厂有更新过,还是很好用滴。介绍一款可任意拖动排序的插件。支持桌面和移动端,拖拽过渡动画美观。 最近要做拖拽相关的功能,本来想自己写,忽然想起来之前在轮子工厂有更新过,vue-dragging还是很好用滴。 介绍 vue-dragging -- 一款可任意拖动排序的vue插件。支持桌面和移动端,拖拽过渡动画美观。支持vue1和v...

    MasonEast 评论0 收藏0
  • 用dragsort +bootstrap+php实现 table拖动自动保持排序,前面加序号及时更新

    摘要:插件美化实现拖拽排序,保持序号不变,但真实排序保持变化。代码说明为自定义请求,定义了数据接收处理和发送给后台方法。里面有具体处理数据的样式以及处理发送数据保存到数据库的小。其他文件顺序加载就好。 php+ajax+dragsort插件+bootstrap美化实现拖拽排序,保持序号不变,但真实排序保持变化。showImg(https://segmentfault.com/img/bVqK...

    wing324 评论0 收藏0
  • 拖放排序插件Sortable.js

    摘要:介绍是一款轻量级的拖放排序列表的插件虽然体积小,但是功能很强大下载地址官方特点支持触屏设备和大部分浏览器以下的就不支持了,原因都懂得可以从一个列表容器中拖拽一个列表单元到其他容器或本列表容器中进行排序移动列表单元时有动画支持拖放操作和可选择 介绍 Sortable.js是一款轻量级的拖放排序列表的js插件(虽然体积小,但是功能很强大)下载地址:https://github.com/Ru...

    tomorrowwu 评论0 收藏0

发表评论

0条评论

zzbo

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<