gerry
gerry
  • 发布:2014-12-10 23:13
  • 更新:2014-12-12 21:46
  • 阅读:2506

drag 事件 e.detail.move.x 手机上无法获取连续坐标变化,chrome中却可以

分类:MUI
mui

如题,只能获取到第一个坐标,真机连调中无法获取拖动中的其它坐标,直接用浏览器以网页的形式打开却是OK的;
document.getElementById("bodyDiv").addEventListener('drag',function(e){
console.log(e.detail.move.x);
});

2014-12-10 23:13 负责人:无 分享
已邀请:
gerry

gerry (作者)

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
<title></title>
<script src="js/mui.min.js"></script>
<link href="css/mui.min.css" rel="stylesheet"/>
<script type="text/javascript" charset="utf-8">
mui.init();
</script>
</head>
<body>
<div id="div1" style="background-color: red;width: 300px;height: 200px;"></div>
<div id="div2" style="background-color: blue;width: 300px;height: 200px;"></div>
</body>
</html>

<script type="text/javascript">
window.onload = function(){
document.getElementById("div1").addEventListener('drag',function(e){
document.getElementById("div1").innerHTML = e.detail.move.x;
});

document.getElementById("div2").addEventListener('touchmove',function(e){
document.getElementById("div2").innerHTML = e.targetTouches[0].pageX;
});
}
</script>

这样一个简单的demo,真机联调的时候两个事件都只能取到第一个坐标,得不到move差;请帮看下

  • DCloud_UNI_FXY

    我用你的代码测试了,红色div和蓝色div在上边drag的时候,坐标都是时刻变化的

    你看看你的mui的js版本是不是最新的,或者换个其他手机测试一下。

    2014-12-11 11:43

  • gerry (作者)

    回复 DCloud_UNI_FXY: 有更新最新的MUI(Mui v0.8.0),也有换了一部三星 note3测试,还是不行;两部手机都是4.42系统的,会不会在4.42上有问题?

    2014-12-11 20:19

  • gerry (作者)

    回复 DCloud_UNI_FXY:我找了台4.2.2的就是OK的,应该是4.4.2有bug;请帮忙解决下吧

    2014-12-11 20:55

gerry

gerry (作者)

有更新最新的MUI(Mui v0.8.0),也有换了一部三星 note3测试,还是不行;两部手机都是4.42系统的,会不会在4.42上有问题?

gerry

gerry (作者)

我找了台4.2.2的就是OK的,应该是4.4.2有bug;请帮忙解决下吧

DCloud_UNI_FXY

DCloud_UNI_FXY

临时解决办法,后续我们会考虑在框架上解决该问题

document.getElementById("bodyDiv").addEventListener('drag',function(e){  
console.log(e.detail.move.x);  
e.detail.gesture.preventDefault();//增加这一行代码来阻止native scroll event  
});
DCloud_UNI_FXY

DCloud_UNI_FXY

将console.log换成页面上的某个文本内容来显示。

真机联调的console.log输出是需要手机和Hbuilder通讯的,性能,时效不高,

如果直接在页面上输出,还是只有第一个坐标,把代码贴出来我看看

touch事件中的detail有很多信息,你可以根据你的需求来使用,比如deltaX,deltaY,这是move的坐标差

我们的很多拖拽控件都是内置的事件实现的,比如switch控件,slider控件,如果是drag事件有问题的话,那这些基于drag事件的控件也会有问题的

  • gerry (作者)

    <!DOCTYPE html>

    <html>

    <head>

    <meta charset="utf-8">

    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />

    <title></title>

    <script src="js/mui.min.js"></script>

    <link href="css/mui.min.css" rel="stylesheet"/>

    <script type="text/javascript" charset="utf-8">

    mui.init();

    </script>

    </head>

    <body>

    <div id="div1" style="background-color: red;width: 300px;height: 200px;"></div>

    <div id="div2" style="background-color: blue;width: 300px;height: 200px;"></div>

    </body>

    </html>


    <script type="text/javascript">

    window.onload = function(){

    document.getElementById("div1").addEventListener('drag',function(e){

    document.getElementById("div1").innerHTML = e.detail.move.x;

    });


        document.getElementById("div2").addEventListener('touchmove',function(e){  
    document.getElementById("div2").innerHTML = e.targetTouches[0].pageX;
    });
    }

    </script>


    这样一个简单的demo,真机联调的时候两个事件都只能取到第一个坐标,得不到move差;请帮看下

    2014-12-11 00:03

该问题目前已经被锁定, 无法添加新回复