我有一个小型网络画廊,向移动浏览器添加了滑动导航。我通过非常简单的touchstart / touchmove / touchend事件跟踪来做到这一点。

问题是,当我尝试在浏览器窗口中进行缩放时,如果在我添加了触摸事件处理程序的元素中有任何手指开始操作,它将失败,我从对preventDefault的调用中猜到了。

有没有一种方法可以跟踪触摸事件以导航图像,而又不会阻止浏览器的放大和缩小功能?我不介意在元素上方滚动阻止单指滚动,但我想允许捏缩放。

这是代码:

  function addDragHandlers(eventDivId) {
    var startX, endX;
    var slides = $('#'+eventDivId);

    slides.bind('touchstart', function(e) {
        e.preventDefault();
        startX = e.pageX;
        endX = startX;
    });

    slides.bind('touchmove', function(e) {
        e.preventDefault();
        endX = e.pageX;
    });

    slides.bind('touchend', function(e) {
            e.preventDefault();
            if ( endX - startX < 0) {
                // go to next image
            } else if ( endX - startX > 0) {
                // go to previous image
            } else {
                // do click action
            }
        }
    });
 }

最佳答案

您需要的是ongesturestart,ongesturestart的移动和结束工作与触摸时相同,但要用一根以上的手指。从他们可以为以下人员添加侦听器:

event.stopPropagation();


防止“ preventDefault()”传播。

09-19 04:28