在移动设备(iPad、Galaxy Tab)上查看网站时,单击元素(常规链接或任何其他使用 javascript/jquery 可单击的元素)时总是有延迟。
在网上看的时候,发现浏览器是使用touchstart 后跟touchend 事件,然后触发正常的click 事件。有没有办法让点击响应更快并删除延迟的点击事件?也许通过使用 javascript 或其他方式?
最佳答案
改编自 Matt 的库 ( https://stackoverflow.com/a/9370637/1491212 ) 本身改编自 google 代码,我写了一个 jQuery 插件。
像这样使用:$('mySelector').fastClick(handler);
(function($){
var clickbuster = {
preventGhostClick: function(x, y) {
clickbuster.coordinates.push(x, y);
window.setTimeout(clickbuster.pop, 2500);
},
pop: function() {
clickbuster.coordinates.splice(0, 2);
},
onClick: function(event) {
for (var i = 0; i < clickbuster.coordinates.length; i += 2) {
var x = clickbuster.coordinates[i];
var y = clickbuster.coordinates[i + 1];
if (Math.abs(event.clientX - x) < 25 && Math.abs(event.clientY - y) < 25) {
event.stopPropagation();
event.preventDefault();
}
}
}
};
var methods = {
init: function(handler){
return this.each(function() {
var $this = $(this),
data = $this.data('fastClick');
if(!data){
this.addEventListener('touchstart', methods.handleEvent, false);
this.addEventListener('click', methods.handleEvent, false);
$this.data('fastClick', {
target: $this,
handler: handler
});
}
});
},
handleEvent:function(event) {
switch (event.type) {
case 'touchstart': $(this).fastClick('onTouchStart',event); break;
case 'touchmove': $(this).fastClick('onTouchMove',event); break;
case 'touchend': $(this).fastClick('onClick',event); break;
case 'click': $(this).fastClick('onClick',event); break;
}
},
onTouchStart: function(event) {
event.stopPropagation();
this[0].addEventListener('touchend', methods.handleEvent, false);
var _this = this;
document.body.addEventListener('touchmove', function(event){
methods.handleEvent.apply(_this,[event]);
}, false);
$(this).data('fastClick').startX = event.touches[0].clientX;
$(this).data('fastClick').startY = event.touches[0].clientY;
},
onTouchMove: function(event) {
if (Math.abs(event.touches[0].clientX - this.data('fastClick').startX) > 10 ||
Math.abs(event.touches[0].clientY - this.data('fastClick').startY) > 10) {
this.fastClick('reset');
}
},
onClick: function(event) {
event.stopPropagation();
$(this).fastClick('reset');
$(this).data('fastClick').handler.call(this,event);
if (event.type == 'touchend') {
clickbuster.preventGhostClick($(this).data('fastClick').startX, $(this).data('fastClick').startY);
}
},
reset: function() {
this[0].removeEventListener('touchend', methods.handleEvent, false);
document.body.removeEventListener('touchmove', methods.handleEvent, false);
}
}
$.fn.fastClick = function(method) {
if (methods[method]) {
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
} else if ( typeof method === 'object' || typeof method === 'function' || !method) {
return methods.init.apply(this, arguments);
} else {
$.error('Method ' + method + ' does not exist on jQuery.hScroll');
}
}
clickbuster.coordinates = [];
document.addEventListener('click', clickbuster.onClick, true);
})(jQuery);
关于android - 有没有办法消除移动触摸设备上的点击延迟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9071346/
我的代码目前看起来像这样numbers=[1,2,3,4,5]defpop_threepop=[]3.times{pop有没有办法在一行中完成pop_three方法中的内容?我基本上想做类似numbers.slice(0,3)的事情,但要删除切片中的数组项。嗯...嗯,我想我刚刚意识到我可以试试slice! 最佳答案 是numbers.pop(3)或者numbers.shift(3)如果你想要另一边。 关于ruby-多次弹出/移动ruby数组,我们在StackOverflow上找到一
我好像记得Lua有类似Ruby的method_missing的东西。还是我记错了? 最佳答案 表的metatable的__index和__newindex可以用于与Ruby的method_missing相同的效果。 关于ruby-难道Lua没有和Ruby的method_missing相媲美的东西吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7732154/
我有一个奇怪的问题:我在rvm上安装了rubyonrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(
我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re
我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问
我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新rubygems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems
我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que
当我在我的Rails应用程序根目录中运行rakedoc:app时,API文档是使用/doc/README_FOR_APP作为主页生成的。我想向该文件添加.rdoc扩展名,以便它在GitHub上正确呈现。更好的是,我想将它移动到应用程序根目录(/README.rdoc)。有没有办法通过修改包含的rake/rdoctask任务在我的Rakefile中执行此操作?是否有某个地方可以查找可以修改的主页文件的名称?还是我必须编写一个新的Rake任务?额外的问题:Rails应用程序的两个单独文件/README和/doc/README_FOR_APP背后的逻辑是什么?为什么不只有一个?
大家好!我想知道Ruby中未使用语法ClassName.method_name调用的方法是如何工作的。我头脑中的一些是puts、print、gets、chomp。可以在不使用点运算符的情况下调用这些方法。为什么是这样?他们来自哪里?我怎样才能看到这些方法的完整列表? 最佳答案 Kernel中的所有方法都可用于Object类的所有对象或从Object派生的任何类。您可以使用Kernel.instance_methods列出它们。 关于没有类的Ruby方法?,我们在StackOverflow
我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle