Mobile Safari中的自定义“滑动”事件未触发

时间:2011-11-02 23:01:32

标签: javascript jquery events mobile safari

我为jQuery编写了一个模拟移动事件的插件,但也支持标准的Web浏览器。以下是swipeleftswiperight事件的标记:

(function($) {

    var settings = {
        swipe_h_threshold : 30,
        swipe_v_threshold : 50,
        taphold_threshold : 750,
        startevent        : ('ontouchstart' in document.documentElement) ? 'touchstart' : 'mousedown',
        endevent          : ('ontouchstart' in document.documentElement) ? 'touchend'   : 'mouseup'
    };
    // swipeleft Event:
    $.fn.swipeleft = function(handler) {
        return this.each(function() {

            $this = $(this);
            var start_x = 0;
            var end_x   = 0;

            $this.bind(settings.startevent, function(e) {
                e.stopPropagation();
                e.preventDefault();
                start_x = e.pageX;

                $this.one(settings.endevent, function(e) {
                    end_x = e.pageX;
                    if(start_x > end_x && (start_x - end_x >= settings.swipe_h_threshold))
                    {
                        handler.call(this);
                    }
                });
            });
        });
    };

    // swiperight Event:
    $.fn.swiperight = function(handler) {
        return this.each(function() {

            var $this = $(this);
            var start_x = 0;
            var end_x   = 0;

            $this.bind(settings.startevent, function(e) {
                e.preventDefault();
                e.stopPropagation();
                start_x = e.pageX;

                $this.one(settings.endevent, function(e) {
                    end_x = e.pageX;
                    if(start_x < end_x && (end_x - start_x >= settings.swipe_h_threshold))
                    {
                        handler.call(this);
                    }

                });
            });
        });
    };
}) (jQuery);

然后我使用以下内容调用事件:

$('#my_div')。swiperight(function(){self.nextCard('r');}); $('#my_div')。swipeleft(function(){self.nextCard('r');});

这似乎在桌面浏览器上运行良好(好吧,Chrome无论如何)&gt; http://ben-major.co.uk/labs/carousel.html,但似乎无法在Mobile Safari中运行。 <{1}}执行没有问题,但swipeleft无法运行。

任何人都可以提供任何指示吗?

1 个答案:

答案 0 :(得分:2)

如果我没有完全弄错e(在事件回调中)有一个数组触及移动浏览器。每个触摸事件都有一个元素。

这是一个例子:

document.addEventListener('touchmove', function(event) {
    event.preventDefault();
    var touch = event.touches[0];
    console.log("Touch x:" + touch.pageX + ", y:" + touch.pageY);
}, false);