jQuery UI draggable(拖动)兼容移动端并且模拟click点击事件,兼容安卓

https://blog.csdn.net/sun124608666/article/details/74357071

用jQyery UI的draggable可以很方便地在PC端实现页面元素的可拖放,不过jQyery UI不是为移动端而写的,因此这个draggable方法在手机上无效。这么普通的问题,当然已经有了现成的解决方法,那就是再加一个jQuery UI Touch Punch插件即可。

jQuery UI Touch Punch下载点这里 。 

这样组合后在手机上测试基本完美,不过很快发现在安卓手机上,无论是原生浏览器还是微信内置浏览器上,都无法在draggable的元素上执行click点击事件,其子元素也不行;在iOS上倒是一切正常。经过排查,发现其实并非click事件不能执行,而是安卓上对touch的敏感度实在太大,太容易覆盖掉click事件,其实快速的多点几次click还是有一定概率能执行的。但这样显然不符合项目的要求了,于是我考虑用touchstart-touchmove-touchend来做一些代替click的事。其实就是判断一下手指滑动的距离,距离大的就什么都不变,当做滑动,距离小的就当作click事件去做点击的事。

这种low问题就不多展开了,直接上代码,拿以前的版本改的:



var touchValue = {x:5,y:5,sx:0,sy:0,ex:0,ey:0}; //initialize the touch values
window.addEventListener("touchstart",function(){
    var event=event || window.event;
    touchValue.sx = event.targetTouches[0].pageX;
    touchValue.sy = event.targetTouches[0].pageY;
    touchValue.ex = touchValue.sx;
    touchValue.ey = touchValue.sy;
});
window.addEventListener("touchmove", function(event){
    var event=event || window.event;
    event.preventDefault();
    touchValue.ex = event.targetTouches[0].pageX;
    touchValue.ey = event.targetTouches[0].pageY;
});
window.addEventListener("touchend", function(event){
    var event=event || window.event;
    var changeX = touchValue.ex - touchValue.sx;
    var changeY = touchValue.ey - touchValue.sy;
    //console.log("X:"+changeX+" Y:"+changeY);
    window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty(); 
});
function getIsTouch(){
    var changeX = touchValue.ex - touchValue.sx;
    var changeY = touchValue.ey - touchValue.sy;
    if(Math.abs(changeX)<=touchValue.x&&Math.abs(changeY)<=touchValue.y){
        return true
    }else return false
}

使用的时候,在原来要用click的地方改成这样

$('#elementID').on("touchend",function(){
    if(getIsTouch()){
        //do things
    }   
});

直接在touchend的时候判断一下之前手指在屏幕上划过的距离,小于5像素的为点击,大于5像素的就是滑动。修改第一行像素值可以调节一下敏感度。

Jquery UI中文官网

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值