捕获“;轻敲;使用纯JavaScript的事件

捕获“;轻敲;使用纯JavaScript的事件,javascript,Javascript,如何使用纯JS捕获用户的“点击”事件?不幸的是,我不能使用任何库。这不是我的代码,但我记不起它是从哪里获得的,成功地使用了。它使用jQuery,但没有额外的库或插件来处理tap本身 $.event.special.tap = { setup: function(data, namespaces) { var $elem = $(this); $elem.bind('touchstart', $.event.special.tap.handler)

如何使用纯JS捕获用户的“点击”事件?不幸的是,我不能使用任何库。

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

$.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设计的项目中使用了它,因此可能需要调整才能同时适用于桌面和平板电脑。

鼠标点击和触摸点击都会触发
点击事件

触摸屏幕时会触发
touchstart
事件

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


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

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

有关本机DOM事件的更多信息,请参见。

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

$(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
            }
        });

此代码还避免了使用常规单击手柄时出现的点击延迟。正如您所指出的,这不是纯JS,因此它无法回答问题。@Derek是的,但它对others@NieDzejkob,这不是一个有用的答案。使用jQuery或其他库很容易找到解决方案,但有时开发人员受到限制,无法使用库,这就是OP指定“纯JavaScript”的原因。如果你想在评论中指出jQuery的答案,就像Dinesh在上面所做的那样,这是很好的。关于“纯JS”和“我不能使用任何库”的问题很清楚@DineshKumarDJ请随意发布一些示例代码作为单独的答案。对另一个答案的评论不是发布的好地方,因为人们无法判断你的建议的质量。@JohnDvorak确实删除了该评论,将添加为单独的答案。我们注意到,在safari mobile中点击该元素时,不会触发点击事件。touchend适用于我们,但单击从不触发,因为这并没有说明持续时间,我不知道如何回答有关tap事件的问题。@DanOvidiuBoncut没有什么可遗憾的