我正在为移动/触摸设备以及桌面非触摸设备构建网站。 为了帮助消除触摸设备的jQuery .click事件的300ms延迟,我正在使用tappy库,它可以很好地工作。
https://github.com/filamentgroup/tappy
话虽这么说,我只想在必要时绑定这个'tap'事件,并且如果设备是非触摸的,想要绑定常规的.click事件。我知道tappy的'tap'事件会触发非触摸设备,但我宁愿只在必要时使用它,因为记录了一些怪癖。
到目前为止,每次我想要执行此操作时都会编写开关函数,如下所示:
if ($('html').hasClass('no-touch')) {
$('.sidebar').find('.strip').find('.explore-wrapper').click(function() {
$(this).closest('.sidebar').addClass('active');
});
} else {
$('.sidebar').find('.strip').find('.explore-wrapper').bind('tap', function() {
$(this).closest('.sidebar').addClass('active');
});
}
我想扩展jQuery并编写我自己的.click版本,也许称为'tapClick',以便我的代码可以像:
$('.sidebar').find('.strip').find('.explore-wrapper').tapClick(function() {
$(this).closest('.sidebar').addClass('active');
});
我开始尝试编写自己的扩展程序,但无法得到它...任何帮助都会受到赞赏:
// Custom tap/click bind
$.extend({
tapClick : function(callbackFnk) {
if ($('html').hasClass('touch')) {
$(this).bind('tap', function() {
if(typeof callbackFnk == 'function') {
callbackFnk.call(this);
}
});
} else {
$(this).click(function() {
if(typeof callbackFnk == 'function') {
callbackFnk.call(this);
}
});
}
}
});
答案 0 :(得分:1)
尝试用jQuery.fn.extend()代替jQuery.extend()
如,
$.extend({tapClick:function() {console.log(this)}});
$.fn.extend({tapClick:function() {console.log(this)}});
$.tapClick(); // function (a,b){return new e.fn.init(a,b,h)}
$("html").tapClick(); // [html, ...]
$.extend({tapClick:function() {console.log(this)}});
$.fn.extend({tapClick:function() {console.log(this)}});
$.tapClick();
$("html").tapClick();

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
&#13;
答案 1 :(得分:0)
这是我最终使用的代码解决了这个问题。
$.fn.extend({
tapClick:function(callback) {
if ($('html').hasClass('touch')) {
return $(this).click(callback);
} else {
return $(this).bind('tap', callback);
}
}
});