移动端页面touch会穿透,这是bug么

发布网友 发布时间:2022-04-21 07:23

我来回答

1个回答

热心网友 时间:2022-06-18 16:48

结合两者,但做一个标志,这样的函数只触发一次,每100毫秒左右。var flag = false;

$thing.bind('touchstart click', function(){

if (!flag) {

flag = true;

setTimeout(function(){ flag = false; }, 100);

// do something

}

return false

});


2. 你可以尝试这样的:var clickEventType=((document.ontouchstart!==null)?'click':'touchstart');

$("#mylink").bind(clickEventType, myClickHandler);


3. 这是我“创造”,并拿出GhostClick和FastClick修复。试试在你自己的,并知道它的工作适合你。$(document).on('touchstart click', '.myBtn' function(event){

event.stopPropagation();

event.preventDefault();

if(event.handled !== true) {


// Do your magic


event.handled = true;

} else {

return false;

}

});


4. 通常这个工程,以及:$('#buttonId').on('touchstart click', function(e){

e.stopPropagation(); e.preventDefault();

//your code here


});


5. 余由以下方法。 易Peasy $(this).bind('touchstart click', function(){

e.preventDefault();

//do your stuff here

});


6. 检查快速按键和点击CHOST从谷歌 


7. 一般来说,你不想混了默认的触摸和非触摸(点击)API.a旦你进入触摸的世界更容易只与触摸相关的功能处理。下面是伪代码,会做你想要它。 如果你在的TouchMove事件连接和跟踪的位置,您可以添加在doTouchLogic功能更多的项目来检测手势和诸如此类的东西。var touchStartTime;

var touchStartLocation;

var touchEndTime;

var touchEndLocation;


$thing.bind('touchstart'), funcion() {

var d = new Date();

touchStartTime = d.getTime();

touchStartLocation = mouse.location(x,y);

});


$thing.bind('touchend'), funcion() {

var d = new Date();

touchEndTime= d.getTime();

touchEndLocation= mouse.location(x,y);

doTouchLogic();

});


function doTouchLogic() {

var distance = touchEndLocation - touchStartLocation;

var ration = touchEndTime - touchStartTime;


if (ration <= 100ms  distance <= 10px) {

// Person tapped their finger (do click/tap stuff here)

}

if (ration > 100ms  distance <= 10px) {

// Person pressed their finger (not a quick tap)

}

if (ration <= 100ms  distance > 10px) {

// Person flicked their finger

}

if (ration > 100ms  distance > 10px) {

// Person dragged their finger

}

}


8. 另一个更好的维护。然而,该技术也将做event.stopPropagation()。点击是没有抓到任何其他的点击为100ms。var clickObject = {

flag: false,

isAlreadyClicked: function () {

var wasClicked = clickObject.flag;

clickObject.flag = true;

setTimeout(function () { clickObject.flag = false; }, 100);

return wasClicked;

}

};


$("#myButton").bind("click touchstart", function (event) {

if (!clickObject.isAlreadyClicked()) {


}

}


9. 我写了一个jQuery插件,它提供了一个“touchclick”事件,你可以听。这需要避免被解雇两次都支持双方的点击和touchstart事件时,事件的照顾。 


10. 只为目的,这里就是我的最快/最敏感的点击桌面/ TAP解决方案,我能想到的做: 我换成jQuery的on功能与修改一个,只要浏览器支持触摸事件,全部换成我的点击事件与touchstart。$.fn.extend({ _on: (function(){ return $.fn.on; })() });

$.fn.extend({

on: (function(){

var isTouchSupported = 'ontouchstart' in window || window.DocumentTouch  document instanceof DocumentTouch;

return function( types, selector, data, fn, one ) {

if (typeof types == 'string'  isTouchSupported  !(types.match(/touch/gi))) types = types.replace(/click/gi, 'touchstart');

return this._on( types, selector, data, fn);

};

}()),

});


用法比将有确切像以前一样:$('#my-button').on('click', function(){ /*  */ });


但touchstart时可用,点击时不会。需要的任何种类的任何延误:D 


11. 我也工作在Android / iPad的Web应用程序,它看来,如果“会连续”,就足以“(无需touchstart)。 。通过禁用touchstart,单击();从jQuery的。它的实际工作还没有被touchstart超载。 最后,您可以BINB生活。(“touchstart”功能(E){e.stopPropagation();});要求touchstart事件停止传播,客厅点击()来获取触发。 它的工作 


12. 有很多事情试图解决这一问题时要考虑的。大多数解决方案要么打破滚动或不办理鬼单击事件正常。 对于一个完整的解决方案,请参阅 注意:你不能处理好鬼click事件每个基础。延迟的点击是通过屏幕位置发射,所以如果你的触摸事件修改页面的方式,单击事件将被发送到该页面的新版本。 


13. 相反,你一个计数器:var count = 0;

$thing.bind('touchstart click', function(){

count++;

if (count %2 == 0) { //count 2% gives the remaining counts when devided by 2

// do something

}


return false

});


14. 它可以有效地分配给该事件'touchstart mousedown'或'touchend mouseup'以避免不希望的副作用click。 


15. 考虑一个事实,即点击将始终遵循一个触摸事件的优势,这里是我做的,无需或全局标志摆脱“鬼点击”的。$('#buttonId').on('touchstart click', function(event){

if ($(this).data("already")) {

$(this).data("already", false);

return false;

} else if (event.type == "touchstart") {

$(this).data("already", true);

}

//your code here

});


基本上,每当ontouchstart上一个标志一组并随后删除(忽略)事件触发,当点击

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com