jQuery-UI插件拖动排序sortable的自动滚动无效问题解决方法
相信拖动排序不少人会用到过,本次的项目为了更实用也使用了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
-- 展开阅读全文 --