jQuery-UI插件拖动排序sortable的自动滚动无效问题解决方法

沉梦小哥哥
预计阅读时长 14 分钟
位置: 首页 JavaScript 正文

相信拖动排序不少人会用到过,本次的项目为了更实用也使用了sortable插件

基本的拖动功能和自定义拖动触发元素等毫无问题,用起来体验感觉很棒~

1. 遇到元素列表超出窗口无法拖动的问题

不过通过实际应用发现,在部分情况下会出问题,比如当被拖动元素需要放到超出浏览器窗口的地方时,就会发现无法拖动过去!!

通过百度大法查找sortable使用教程,确实是找到了响应的功能,当时感觉jQuery真的牛逼啊。。

2.遇到sortable自动滚动事件(功能)无效的问题

 我通过多次尝试依然无法使用该功能,可能当时sortable写的时候也没有过多测试吧!包括完善的参数配置和多个版本尝试依然无果

 于是考虑自己写了个简化版的自动滚动滚动条功能。。。。

不多说,下面贴出代码给大家

//主要是js代码部分

//自定义移动滚动条函数,其实也就是修改被卷去高度
//direction 方向;scrollSpeed 移动距离,单位px;top 被卷去高度;
function scrollW(direction, scrollSpeed, top){
    direction = direction || "TOP";
    scrollSpeed = scrollSpeed || 20;
    if(direction=="TOP"){
        $(document.body).scrollTop(top - scrollSpeed);
    }
    else{
      $(document.body).scrollTop(top + scrollSpeed);
    }
}

//sortable插件调用部分 原理通过sortable插件自带的sort元素排序坐标改变实时回调函数,来实时滚动页面
//插件自带的用不了,只能自己写个类似的,将就用着 写的很菜,分享出来大家互相学习了,欢迎各位大牛帮忙改进
//其中 移动距离 是可以自定义的,请根据实际需求改哦

$(document).ready(function(){
  $(".table tbody").sortable({
    opacity: 0.6, //透明度
    handle: ".sortable", //拖动触发元素
    delay: 100, //拖动生效延迟
    start: function(event, ui){
        //排序开始代码
    },
    sort: function(event, ui) {
      
      var scrollTop   = $(document).scrollTop();//文档卷去的高
      var elOffsetTop  = $(ui.item).offset().top;//元素距离文档顶部的高
      var height1    = elOffsetTop-scrollTop;//元素距离窗口顶部的高
      var bodyHeight  = $(document).height();//文档的高
      if(scrollTop>=0 && height1<=80){
        //计算是否靠近屏幕顶部边缘
        scrollW("TOP", 60, scrollTop);
        //console.log("已靠近屏幕顶部边缘:"+height1);
      }
      else{
          //计算是否靠近屏幕底部部边缘
          var countheight = $(window).height() + scrollTop;
          var height2 = scrollTop + $(window).height() -elOffsetTop;
          if(height2 <= 100 && bodyHeight > countheight){
            //console.log("已靠近屏幕顶部边缘:"+height2);
            scrollW("BOTTOM", 60, scrollTop);
          }
      }
    },
    stop: function(event, ui) {
        //排序结束代码
    } 
  });
});

3.我通过实际项目测试效果还算符合预期,就是滚动时的细节方面没时间搞了,有时间的大神研究一下吧

 如果你更好的优化版本,欢迎联系我QQ邮箱反馈~

 QQ邮箱:chenmwl@qq.com

-- 展开阅读全文 --
头像
使用宝塔面板建站的服务器磁盘满了网站打不开怎么办?永久解决服务器磁盘满了的方法
« 上一篇 2020-07-20
各种不同场景的正则表达式总结【持续更新中】
下一篇 » 2020-09-08
取消
微信二维码
微信二维码
支付宝二维码

最近发表

标签列表

目录[+]