使用纯JavaScript捕获“tap”事件

时间:2012-11-13 09:32:05

标签: javascript

如何使用纯JS捕获用户的“tap”事件?不幸的是,我无法使用任何库。

4 个答案:

答案 0 :(得分:29)

只需点击鼠标即可触发click事件。

触摸屏幕时会触发touchstart事件。

触摸结束时会触发touchend事件。如果阻止默认操作,则不会触发click事件。

http://www.w3.org/TR/touch-events/

答案 1 :(得分:6)

这不是我的代码,但我不记得从哪里获得它,成功使用。它使用jQuery但没有额外的库或插件来处理自己。

$.event.special.tap = {
    setup: function(data, namespaces) {
        var $elem = $(this);
        $elem.bind('touchstart', $.event.special.tap.handler)
             .bind('touchmove', $.event.special.tap.handler)
             .bind('touchend', $.event.special.tap.handler);
    },

    teardown: function(namespaces) {
        var $elem = $(this);
        $elem.unbind('touchstart', $.event.special.tap.handler)
             .unbind('touchmove', $.event.special.tap.handler)
             .unbind('touchend', $.event.special.tap.handler);
    },

    handler: function(event) {
        event.preventDefault();
        var $elem = $(this);
        $elem.data(event.type, 1);
        if (event.type === 'touchend' && !$elem.data('touchmove')) {
            event.type = 'tap';
            $.event.handle.apply(this, arguments);
        } else if ($elem.data('touchend')) {
            $elem.removeData('touchstart touchmove touchend');
        }
    }
};

$('.thumb img').bind('tap', function() {
    //bind tap event to an img tag with the class thumb
}

我将此用于专门用于iPad的项目,因此可能需要调整以适用于桌面和平板电脑。

答案 2 :(得分:5)

touchstarttouchend和其他事件。您可以通过以下方式为它们添加事件侦听器:

var el = document.getElementById('test');
el.addEventListener('touchstart', touchHandler);

有关您可以在MDN webstite上找到的原生DOM事件的更多信息。

答案 3 :(得分:2)

我自己写了一个小脚本。它不是纯粹的JS,但对我来说效果很好。 它阻止在滚动时执行脚本,这意味着脚本仅在“tap”事件上触发。

$(element)
        .on('touchstart', function () {
            $(this).data('moved', '0');
        })
        .on('touchmove', function () {
            $(this).data('moved', '1');
        })
        .on('touchend', function () {
            if($(this).data('moved') == 0){
                // HERE YOUR CODE TO EXECUTE ON TAP-EVENT
            }
        });
相关问题