android调用js的touch事件吗,javascript-如何绑定Mousedown和Touchstart,但不同时响应两者? Android,JQuery...
javascript-如何绑定Mousedown和Touchstart,但不同时响应两者? Android,JQuery
在还可以在移动设备上查看并且需要在touchstart和mousedown上绑定动作的网站上工作。
看起来像这样
$("#roll").bind("mousedown touchstart", function(event){
someAction();
它可以在Iphone上正常工作,但在Android上可以响应两次。
event.stopPropagation();
event.preventDefault();
添加此代码后,Android Chrome浏览器无法修复此问题,Android默认浏览器无法修复此问题。 任何其他技巧可以解决所有android的问题?
9个解决方案
28 votes
我一直在使用此功能:
//touch click helper
(function ($) {
$.fn.tclick = function (onclick) {
this.bind("touchstart", function (e) {
onclick.call(this, e);
e.stopPropagation();
e.preventDefault();
});
this.bind("click", function (e) {
onclick.call(this, e); //substitute mousedown event for exact same result as touchstart
});
return this;
};
})(jQuery);
更新:修改后的答案可同时支持鼠标和触摸事件。
Joshua answered 2020-07-20T14:44:02Z
28 votes
element.on('touchstart mousedown', function(e) {
e.preventDefault();
someAction();
});
stopPropagation根据规范取消了该事件
您将获得touchstart,但是一旦您取消它,就不再会发生鼠标按下的情况。 与已接受的答案相反,除非需要,否则您无需致电stopPropagation。 即使取消,事件也将正常传播。 浏览器将忽略它,但是您的钩子仍将起作用。
Mozilla在这一点上同意我的观点:
在touchstart或系列的第一个touchmove事件上调用preventDefault()会阻止触发相应的鼠标事件
编辑:我只是再次阅读了该问题,并且您说您已经做到了,并且不能修复Android默认浏览器。 不确定接受的答案如何帮助,因为它基本上以相同的方式执行操作,只是以更复杂的方式并带有事件传播错误(touchstart不会传播,而click会传播)
Radu C answered 2020-07-20T14:44:40Z
3 votes
考虑到gregers对win8和chrome / firefox的评论,skyisred的评论毕竟看起来并不愚蠢(:P @ all haters)尽管我宁愿使用黑名单,也不愿使用他建议的白名单,但只能将Android从触摸绑定中排除:
var ua = navigator.userAgent.toLowerCase(),
isAndroid = ua.indexOf("android") != -1,
supportsPointer = !!window.navigator.msPointerEnabled,
ev_pointer = function(e) { ... }, // function to handle IE10's pointer events
ev_touch = function(e) { ... }, // function to handle touch events
ev_mouse = function(e) { ... }; // function to handle mouse events
if (supportsPointer) { // IE10 / Pointer Events
// reset binds
$("yourSelectorHere").on('MSPointerDown MSPointerMove MSPointerUp', ev_pointer);
} else {
$("yourSelectorHere").on('touchstart touchmove touchend', ev_touch); // touch events
if(!isAndroid) {
// in androids native browser mouse events are sometimes triggered directly w/o a preceding touchevent (most likely a bug)
// bug confirmed in android 4.0.3 and 4.1.2
$("yourSelectorHere").on('mousedown mousemove mouseup mouseleave', ev_mouse); // mouse events
}
}
顺便说一句:我发现鼠标事件并非总是触发的(如果使用了stopPropagation和preventDefault),特别是我只在touchend事件之前注意到了一个额外的mousemove ...确实很奇怪的错误,但是上面的代码为我解决了所有问题( 分别通过本机浏览器,Chrome,Firefox,IE,Safari和Opera(如果有)平台测试了OSX,Win,iOS 5 + 6,Android 2 + 4。
Jörn Berkefeld answered 2020-07-20T14:45:05Z
1 votes
使用此代码修复
var mobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent);
var start = mobile ? "touchstart" : "mousedown";
$("#roll").bind(start, function(event){
skyisred answered 2020-07-20T14:45:25Z
1 votes
我认为最好的方法是:
var hasTouchStartEvent = 'ontouchstart' in document.createElement( 'div' );
document.addEventListener( hasTouchStartEvent ? 'touchstart' : 'mousedown', function( e ) {
console.log( e.touches ? 'TouchEvent' : 'MouseEvent' );
}, false );
LCB answered 2020-07-20T14:45:45Z
1 votes
哇,在这个问题和相关问题中有这么多答案,但没有一个对我有用(Chrome,移动响应,mousedown + touchstart)。 但是这个:
(e) => {
if(typeof(window.ontouchstart) != 'undefined' && e.type == 'mousedown') return;
// do anything...
}
Andreas Richter answered 2020-07-20T14:46:05Z
0 votes
我建议您尝试使用jquery-fast-click。 我在这个问题和其他问题上尝试了另一种方法。 每个问题解决了一个问题,并介绍了另一个问题。 快速点击首次在Android,ios,桌面和桌面触摸浏览器上运行()吟)。
Adam Rabung answered 2020-07-20T14:46:26Z
0 votes
编写此代码并添加j查询打孔触摸js。它将通过触摸事件模拟鼠标事件
function touchHandler(event)
{
var touches = event.changedTouches,
first = touches[0],
type = "";
switch(event.type)
{
case "touchstart": type = "mousedown"; break;
case "touchmove": type="mousemove"; break;
case "touchend": type="mouseup"; break;
default: return;
}
var simulatedEvent = document.createEvent("MouseEvent");
simulatedEvent.initMouseEvent(type, true, true, window, 1,
first.screenX, first.screenY,
first.clientX, first.clientY, false,
false, false, false, 0/*left*/, null);
first.target.dispatchEvent(simulatedEvent);
event.preventDefault();
}
function init()
{
document.addEventListener("touchstart", touchHandler, true);
document.addEventListener("touchmove", touchHandler, true);
document.addEventListener("touchend", touchHandler, true);
document.addEventListener("touchcancel", touchHandler, true);
}
Mohsin Kureshi answered 2020-07-20T14:46:46Z
0 votes
这个本机解决方案最适合我:
将if (touch && e.type === 'mousedown') return;事件添加到文档设置全局touch = true。
在mousedown / touchstart处理程序中,防止在检测到触摸屏时发生所有mousedown事件:if (touch && e.type === 'mousedown') return;
Raine Revere answered 2020-07-20T14:47:14Z
android调用js的touch事件吗,javascript-如何绑定Mousedown和Touchstart,但不同时响应两者? Android,JQuery...相关推荐
- Android开发-WebView中实现Android调用JS JS调用Android 【三】
老早之前就想总结下Webview相关的知识点了,因为互联网大潮中,很多APP都会使用到Webview,像那些不计其数的电商APP,无一例外的使用Webview:或者一些非电商APP中的像广告页面,注册 ...
- [转]JS调用Android里面的方法,Android调用JS里面的方法
FROM : http://blog.csdn.net/hj563308597/article/details/45197709 Android WebView 在公司Android的开发过程中遇到一 ...
- android调用js函数方法,Android和JavaScript相互调用的方法
本文实例讲述了Android和JavaScript相互调用的方法.分享给大家供大家参考,具体如下: Html页面和Java代码结合的方式一般用在界面经常被更改 的情况下,可以讲html放在网络中,软件 ...
- android调用js接口,Android代码和JavaScript互相调用
WebView加载一个使用JavaScript的网页,并且要实现相互之间的调用,需要启用WebView对JavaScript的支持,一旦启用之后你就可以通过接口来实现本地代码和JavaScript代码 ...
- zepto.js 处理Touch事件
处理Touch事件能让你了解到用户的每一根手指的位置,在touch事件触发的时候产生,可以通过touch event handler的event对象取到,如果基于zepto.js开发,一般是通过eve ...
- JS的Touch事件们
iphone.ipod Touch.ipad触屏时的js事件 1.Touch事件简介 pc上的web页面鼠标会产生onmousedown.onmouseup.onmouseout.onmouseove ...
- android控件的touch事件_Android touch 事件分发时序
点击上方"蓝字"关注我们 1,touch 事件是如何从驱动层传递给 Framework 层的 InputManagerService: 2,WMS 是如何通过 ViewRooImp ...
- Chrome无法调用preventDefault阻止touch事件解决办法
坑爹的开始- Chorme56+开始为了让页面滚动变得更为流畅,在 window.document 和 body 上注册的 touchstart 和 touchmove 事件处理函数,会默认为是 pa ...
- Android 模拟滑动 MotionEvent touch事件
模拟android里touch事件的滑动,适用于recyclerview等. 通过发送MotionEvent来模拟touch事件,配合ValueAnimator控制滑动的时间,也可以加入差值器等,之所 ...
最新文章
- python坐标点怎么输入_python导入坐标点的具体操作
- .NET Standard 2.1 公布
- opencv4 图像特征匹配_概述 | 全景图像拼接技术全解析
- c语言内置画直线函数库,C语言不调用库函数画直线
- Java语言实现hello world代码
- 列表生成式的复习以及生成器的练习, 杨辉三角实例(非常巧妙)
- linux-redis
- 内存、cache和寄存器之间的关系及区别
- [luoguP1373] 小a和uim之大逃离(DP)
- 图书馆占座系统(二)
- Oracle Primavera P6EPPM Mobile/App 安卓移动端分享(长期更新)
- wireshark绿色便携版 v3.4.2.0
- U盘安装Linux系统
- 排列组合cn和an公式
- 0x和\u区别,unicode编码
- 计算机中时序信号的作用是什么,时序信号
- 更新 TKK 失败,请检查网络连接 报错处理
- 如何用python画流程图_Markdown笔记:如何画流程图
- SOA Presentation - SOA概念介绍
- 中国企业密钥管理(EKM)市场趋势报告、技术动态创新及市场预测
热门文章
- 问题 | iview Row Col 修改样式
- Flutter Dart 正则RegExp [.....]和[^.....](一)
- JeeSite新建报表
- ubuntu安装远程桌面
- Appium1.4 的简介、安装及其使用真机测试(iOS版)
- EUI组件之DataGroup
- git revert 怎么使用
- ZUCC_软件工程_大作业
- pyqt5中控件缩放功能_PyQt5中布局内的控件如何充满布局?
- 深度强化学习算法调参