作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
function ontouch(el, callback) {
var touchsurface = el, // get element for scrollLeft
startX, // get start horizontal position
startY, // get start vertical position
distX, // get horizontal distance
distY, // get vertical distance
positionX,
newPositionX;
touchsurface.addEventListener("touchstart", function(e) {
e.preventDefault();
var touchobj = e.changedTouches[0];
positionX = -touchsurface.scrollLeft; // get current position scrollLeft element
startX = touchobj.pageX;
startY = touchobj.pageY;
});
touchsurface.addEventListener("touchmove", function(e) {
var touchobj = e.changedTouches[0];
distX = touchobj.pageX - startX;
distY = touchobj.pageY - startY;
if (Math.abs(distX) > Math.abs(distY)) {
e.preventDefault();
newPositionX = positionX + distX;
touchsurface.scrollLeft = -newPositionX; // move element to left via touchMove event (i'm using negative, so it's like mobile app behavior
}
else{ // else consider this a vertical movement
return false; // it's not working here
}
});
所以,当我向左或右滑动时,它在移动,因为我使用了scrollLeft。但是,如果我向向上 或向下 滑动到这个元素,它根本不会触发任何东西,它只是堆叠在那个位置(卡住)。我的问题是,我希望 ontouch 功能仅在水平左右滑动时起作用,而不是上下滑动。
所以,如果有人向上或向下滑动到这个元素,我想要什么,它就像正常行为,也就是 scrollTop 文档。
如何让这些东西工作?
我的代码有什么问题?谢谢..
最佳答案
旧帖子,但也许对其他人有帮助。有同样的问题并通过忽略 mouseMove 解决了它:
var element = $("#cards_stream").children(":first");
var elementIdToSelect = element.attr('id');
targetElement = document.getElementById(elementIdToSelect);
var touchStartCoords = {'x':-1, 'y':-1}, // X and Y coordinates on mousedown or touchstart events.
touchEndCoords = {'x':-1, 'y':-1},// X and Y coordinates on mouseup or touchend events.
direction = 'undefined',// Swipe direction
minDistanceXAxis = 30,// Min distance on mousemove or touchmove on the X axis
maxDistanceYAxis = 30,// Max distance on mousemove or touchmove on the Y axis
maxAllowedTime = 1000,// Max allowed time between swipeStart and swipeEnd
startTime = 0,// Time on swipeStart
elapsedTime = 0,// Elapsed time between swipeStart and swipeEnd
targetElement = document.getElementById(elementIdToSelect);// Element to delegate
function swipeStart(e) {
e = e ? e : window.event;
e = ('changedTouches' in e)?e.changedTouches[0] : e;
touchStartCoords = {'x':e.pageX, 'y':e.pageY};
startTime = new Date().getTime();
}
function swipeEnd(e) {
e = e ? e : window.event;
e = ('changedTouches' in e)?e.changedTouches[0] : e;
touchEndCoords = {'x':e.pageX - touchStartCoords.x, 'y':e.pageY - touchStartCoords.y};
elapsedTime = new Date().getTime() - startTime;
if (elapsedTime <= maxAllowedTime){
if (Math.abs(touchEndCoords.x) >= minDistanceXAxis && Math.abs(touchEndCoords.y) <= maxDistanceYAxis){
direction = (touchEndCoords.x < 0)? 'left' : 'right';
switch(direction){
case 'left':
targetElement.textContent = "Left swipe detected";
break;
case 'right':
targetElement.textContent = "Right swipe detected";
break;
}
}
}
}
function addMultipleListeners(el, s, fn) {
var evts = s.split(' ');
for (var i=0, iLen=evts.length; i<iLen; i++) {
el.addEventListener(evts[i], fn, false);
}
}
addMultipleListeners(targetElement, 'mousedown touchstart', swipeStart);
addMultipleListeners(targetElement, 'mouseup touchend', swipeEnd);
关于Javascript touchmove 事件只能水平滚动而不是垂直,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34477109/
有一条(相对)众所周知的 Perl 公理:“只有 Perl 可以解析 Perl”。我想知道 Perl 6 是否仍然如此? 扩大讨论...考虑到 PyPy 最近的更新,我想到了这个问题。 Perl 独特
这是设置。在上一个问题中,我发现我可以通过子组件中的状态传递对象属性,然后使用 componentDidUpdate 获取该对象属性。在这种情况下,状态和属性都称为到达。 这是基本代码... expo
我运行的是 10.5.2 社区版。我已经标记了 源/主要/资源 作为源目录。我可以右键单击并“编译”某些文件,据我所知,这意味着 IDE 将文件复制到与发送类文件的“com.mydomain.pack
我是一名优秀的程序员,十分优秀!