【发布时间】:2018-02-22 10:41:52
【问题描述】:
我编写了这段代码来为图像滑块添加滑动功能。滑块工作正常。
但是,当我向右或向左滑动时,会出现一些垂直滚动,这会让人分心和烦人。
我将 touchstart 的引用存储在触摸对象中。
在 touchend 事件中,如果垂直距离 (lenY) 大于 50,我会在 touchstart 上触发 preventDefault。
这不起作用。
最简单的选择是直接在 touchStart 上调用 preventDefault。但是图像滑块占据了移动屏幕的很大一部分,使得向下滚动页面变得很棘手。
我需要将 lenY(垂直距离)传递给触摸启动处理程序以防止默认操作。
function triggerTouch() {
"use strict";
var tZone = document.getElementById('sl-m'),
touch = {},
startX = 0,
startY = 0,
endX = 0,
endY = 0;
if (tZone) {
tZone.addEventListener('touchstart', function (e) {
startX = e.changedTouches[0].screenX;
startY = e.changedTouches[0].screenY;
// store reference to touch event
touch.start = e;
}, false);
tZone.addEventListener('touchend', function (e) {
endX = e.changedTouches[0].screenX;
endY = e.changedTouches[0].screenY;
var lenX = Math.abs(endX - startX);
var lenY = Math.abs(endY - startY);
// check if user intended to scroll down
if (lenY < 50 && lenX > 50) {
touch.start.preventDefault();
e.preventDefault();
swipe(tZone, startX, endX);
}
}, false);
}
}
【问题讨论】:
-
您没有在
touchstart处为endY或startY赋值,因此它们都保持0。 -
哦,我实际上忘了在这里添加它。在它失败后我回滚了。但它不会阻止滚动。
-
事件 touchstart 和 touchend 不足以实现您想要的。如果用户向左/向右或向上/向下拖动,您必须使用 touchmove 来识别触摸时刻。然后只允许一个方向。
标签: javascript