我是这么试的。
{{{
<!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" />
<style>
.touch {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 1002;
background: #000000;
transition: background 100ms ease;
-webkit-backface-visibility: hidden;
-webkit-tap-highlight-color: transparent;
}
</style>
</head>
<body>
<div id="touch" class="touch">
123
</div>
<script type="text/javascript" charset="utf-8">
mui.init({
gestureConfig: {
tap: true,
doubletap: true,
longtap: true,
swipe: true,
drag: true
}
});
document.getElementById('touch').addEventListener('tap', function(event) {
console.log('tap');
});
document.getElementById('touch').addEventListener('doubletap', function(event) {
console.log('doubletap');
});
document.getElementById('touch').addEventListener('longtap', function(event) {
console.log('longtap');
});
document.getElementById('touch').addEventListener('swipeleft', function(event) {
console.log('swipeleft');
});
document.getElementById('touch').addEventListener('swiperight', function(event) {
console.log('swiperight');
});
document.getElementById('touch').addEventListener('swipeup', function(event) {
console.log('swipeup');
});
document.getElementById('touch').addEventListener('swipedown', function(event) {
console.log('swipedown');
});
document.getElementById('touch').addEventListener('dragstart', function(event) {
console.log('dragstart');
});
document.getElementById('touch').addEventListener('drag', function(event) {
console.log('drag');
});
document.getElementById('touch').addEventListener('dragend', function(event) {
console.log('dragend');
});
</script>
</body>
</html>
}}}
13 个回复
rooanlee
我的都行,你怎么试的哦
神才 (作者)
我是这么试的。
{{{
<!DOCTYPE html>
<html>
</html>
}}}
神才 (作者)
Android 版本是4.04
神才 (作者)
测试了,Android 4.4\2.3都响应dragend,4.04不响应dragend。Android 4.4\2.3用swipe就没问题。4.04就不行。
DCloud_UNI_CHB
能把你上面的日志结果截个图吗?
swipe和drag是互斥的,不会同时发生,若发生了swipe事件,则不会再有dragend事件发生。
DCloud_UNI_FXY
补充说明一下。
对于一个swipe事件来说。触发的顺序
dragstart--->drag--->drag[left|right|up|down]--->swipe[left|right|up|down]--->dragend
简单地说,swipe事件一定会触发drag事件。而drag事件不一定触发swipe事件
1.dragstart,drag,drag[left|right|up|down]这些事件是在原生touchmove的时候触发的,
在touchmove过程中,dragstart仅触发一次,drag和drag[left|right|up|down]可能触发多次
2.swipe[left|right|up|down],dragend事件是在原生touchend|touchcancel时触发。
4.longtap只要长按不动就会触发
可通过下列代码测试事件触发情况:
{{{
mui.init({
gestureConfig: {
tap: true,
doubletap: true,
longtap: true,
swipe: true,
drag: true
}
});
var touch = document.getElementById('touch');
mui.each(['tap', 'doubletap', 'longtap', 'dragstart', 'drag', 'dragleft', 'dragright', 'dragup', 'dragdown', 'dragend', 'swipeleft', 'swiperight', 'swipeup', 'swipedown'], function(index, event) {
touch.addEventListener(event, function(e) {
console.log(e.type);
});
});
}}}
j***@163.com
您好,还有一个问题,$(".swiper-container").on("swipeleft",".swiper-slide",function(event){
console.log("swipeleft")
}),只触发swipeup和swipedown事件,但是swipeleft和swiperight都触发不了,是什么原因呢
2017-11-13 12:01
这个人很懒
2.swipe[left|right|up|down],dragend事件是在原生touchend|touchcancel时触发。
对于这个问题, 在手机上测试了一下, 感觉swipe事件不是总会触发, 有的时候轻快的右划会返回, 但有的时候却不返回, 怎么确认一下这个是不是有bug?
这个人很懒
用前面同学贴的示例代码测试了一下, 确实swipe[left/right/up/down]不是很稳定, 有的时候会触发, 有的时候不触发
DCloud_UNI_FXY
swipe是快速滑动,如果滑动速度慢,是不会触发的。从touch开始到touch结束300ms内的滑动。会触发swipe。大于300ms则不会触发
这个人很懒
测试过很多次, 我的结论是这个事件不太稳定:) 我也看了那块代码, 感觉逻辑问题不是太大, 可能健壮性需要想想办法, 或者再找找为啥偶尔不触发swipe吧
2014-11-12 13:26
DCloud_UNI_FXY
我这里测试暂时无法重现该问题,你可以在我们框架里触发swipe的地方,打印一下触发swipe的几个条件参数,然后看看是因为什么没有触发。
2014-11-12 19:27
这个人很懒
回复 DCloud_UNI_FXY:发现了是distance不太对劲, 按说我划拉了够远了, 只能再看看这个距离是咋算的了
2014-11-13 16:32
这个人很懒
回复 DCloud_UNI_FXY:我调整了一下swipeMinDistince: 10(old value 18), angle = [-25, 25], 原值[-15, 15], 这样操作swipeback比较稳定, 有没有什么副作用?
2014-11-13 16:48
这个人很懒
调试了一下, distance计算的貌似不太对劲
DCloud_UNI_FXY
distance是通过move的坐标和start的坐标进行计算的
distance的算法如下:
这个人很懒
算法看起来没有什么问题, 但偶尔不符合操作的预期, 我划拉很长, 有的时候这个distance却不大
2014-11-13 17:32
DCloud_UNI_FXY
滑动很长。但distance不大的问题,有可能是因为操作习惯,比如你认为你滑了一次,但实际上设备触发了多轮(start-move*-end|cancel).你打下日志,看看你操作的时候,是否触发了多次touchstart
2014-11-13 17:56
陶妖兽
我只能说,swipe事件真的是很不稳定,有的时候划个好几次都划不出来,领导和客户根本不能接受,现在我还在找解决方法
DCloud_UNI_FXY
你在hello-mui的list中的右滑,左滑菜单测试,也不稳定?
你可以把你的代码贴出来,我测试一下。
陶妖兽
我确实在hello mui中测试,我用的是Nexus 5,右滑偶尔会不触发,需要多次滑动,是速度太慢或者距离太短?但是我平常用使用就是这样的滑动速度
2015-02-26 10:55
DCloud_UNI_FXY
你测试的内容是什么?在哪个具体的demo里测试的?
2015-02-26 13:12