Javascript touchmove事件只有水平滚动不垂直

时间:2015-12-27 02:33:55

标签: javascript

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 。 但是,如果我向向上移动到此元素,它根本不会触发任何内容,它只是堆叠在该位置(它& #39;冻结)。 我的问题,我想ontouch功能只能在水平左右滑动,而不是向上和向下滑动。

所以,如果有人向上或向下滑动到此元素,我想要的是,它就像正常行为,a.k.a scrollTop文档。

如何让这件事有效?

我的代码出了什么问题?谢谢..

1 个答案:

答案 0 :(得分:1)

旧帖子,但也许它可以帮助别人。有同样的问题并通过忽略mouseMove来解决它:

func test() -> Bool {
    ...

    _session.list("/") { (resources, error) -> Void in
         println("List directory with result:\n\(resources), error: \(error)\n\n")

         if error != nil {
              return true
         } else {

              return false
         }

    }
}