如何在Android和iPhone上使用JavaScript检测长按压力?

如何解决如何在Android和iPhone上使用JavaScript检测长按压力?

| 如何在Android和iPhone上使用JavaScript检测长按压力? 本机javascript或jquery ... 我想要听起来像:
<input type=\'button\' onLongTouch=\'myFunc();\' />
    

解决方法

使用“触摸结束”检测长时间触摸的问题是,如果您希望事件在特定时间段后触发,将无法正常工作。最好在触摸开始时使用计时器,并在触摸结束时清除事件计时器。可以使用以下模式:
var onlongtouch; 
var timer;
var touchduration = 500; //length of time we want the user to touch before we do something

touchstart() {
    timer = setTimeout(onlongtouch,touchduration); 
}

touchend() {

    //stops short touches from firing the event
    if (timer)
        clearTimeout(timer); // clearTimeout,not cleartimeout..
}

onlongtouch = function() { //do something };
    ,这是Joshua答案的扩展版本,因为他的代码可以很好地起作用,直到用户不执行多点触摸为止(您可以用两根手指点击屏幕,并且功能将被触发两次,四指-四次)。 经过一些额外的测试场景后,我什至触发了非常自由地触摸并在每次点击后执行功能的可能性。 我添加了名为\'lockTimer \'的变量,该变量应在用户触发\'touchend \'之前锁定所有其他touchstart。
var onlongtouch; 
var timer,lockTimer;
var touchduration = 800; //length of time we want the user to touch before we do something

function touchstart(e) {
	e.preventDefault();
	if(lockTimer){
		return;
	}
    timer = setTimeout(onlongtouch,touchduration); 
	lockTimer = true;
}

function touchend() {
    //stops short touches from firing the event
    if (timer){
        clearTimeout(timer); // clearTimeout,not cleartimeout..
		lockTimer = false;
	}
}

onlongtouch = function() { 
	document.getElementById(\'ping\').innerText+=\'ping\\n\'; 
};

document.addEventListener(\"DOMContentLoaded\",function(event) { 
  window.addEventListener(\"touchstart\",touchstart,false);
  window.addEventListener(\"touchend\",touchend,false);
});
<div id=\"ping\"></div>
,我已经在我的Android应用中以这种方式完成此操作: 注册的事件侦听器:
var touchStartTimeStamp = 0;
var touchEndTimeStamp   = 0;

window.addEventListener(\'touchstart\',onTouchStart,false);
window.addEventListener(\'touchend\',onTouchEnd,false);
新增功能:
var timer;
function onTouchStart(e) {
    touchStartTimeStamp = e.timeStamp;
}

function onTouchEnd(e) {
    touchEndTimeStamp = e.timeStamp;

    console.log(touchEndTimeStamp - touchStartTimeStamp);// in miliseconds
}
检查时差并做了我的东西 我希望这将有所帮助。     ,对于跨平台开发人员: 在Android上,mouseup / down似乎可以正常工作-但不是所有设备(例如,三星tab4)。在iOS上根本无法使用。 进一步的研究似乎认为这是由于元素具有选择能力以及自然放大率干扰了听众。 如果用户按住该图像500毫秒,则此事件侦听器将以引导方式打开该缩略图。 它使用了响应式图像类,因此显示了较大版本的图像。 此代码段已在(iPad / Tab4 / TabA / Galaxy4)上经过全面测试:
var pressTimer;  
$(\".thumbnail\").on(\'touchend\',function (e) {
   clearTimeout(pressTimer);
}).on(\'touchstart\',function (e) {
   var target = $(e.currentTarget);
   var imagePath = target.find(\'img\').attr(\'src\');
   var title = target.find(\'.myCaption:visible\').first().text();
   $(\'#dds-modal-title\').text(title);
   $(\'#dds-modal-img\').attr(\'src\',imagePath);
   // Set timeout
   pressTimer = window.setTimeout(function () {
      $(\'#dds-modal\').modal(\'show\');
   },500)
});
    ,我们可以计算开始触摸和结束触摸的时间差。如果计算出的时间差超过了触摸持续时间,则我们使用功能名称taphold。
var touchduration = 300; 
var timerInterval;

function timer(interval) {

    interval--;

    if (interval >= 0) {
        timerInterval = setTimeout(function() {
                            timer(interval);
                        });
    } else {
        taphold();
    }

}

function touchstart() {
    timer(touchduration);
}

function touchend() {
    clearTimeout(timerInterval);
}

function taphold(){
    alert(\"taphold\");
}


document.getElementById(\"xyz\").addEventListener(\'touchstart\',touchstart);
document.getElementById(\"xyz\").addEventListener(\'touchend\',touchend);
    ,就在这里:http://m14i.wordpress.com/2009/10/25/javascript-touch-and-gesture-events-iphone-and-android/ 使用
touchstart
touchend
检测给定时间的长时间触摸     ,在所有浏览器中均有效的长按事件
(function (a) {
        function n(b) { a.each(\"touchstart touchmove touchend touchcancel\".split(/ /),function (d,e) { b.addEventListener(e,function () { a(b).trigger(e) },false) }); return a(b) } function j(b) { function d() { a(e).data(h,true); b.type = f; jQuery.event.handle.apply(e,o) } if (!a(this).data(g)) { var e = this,o = arguments; a(this).data(h,false).data(g,setTimeout(d,a(this).data(i) || a.longclick.duration)) } } function k() { a(this).data(g,clearTimeout(a(this).data(g)) || null) } function l(b) {
            if (a(this).data(h)) return b.stopImmediatePropagation() ||
            false
        } var p = a.fn.click; a.fn.click = function (b,d) { if (!d) return p.apply(this,arguments); return a(this).data(i,b || null).bind(f,d) }; a.fn.longclick = function () { var b = [].splice.call(arguments,0),d = b.pop(); b = b.pop(); var e = a(this).data(i,b || null); return d ? e.click(b,d) : e.trigger(f) }; a.longclick = { duration: 500 }; a.event.special.longclick = {
            setup: function () {
                /iphone|ipad|ipod/i.test(navigator.userAgent) ? n(this).bind(q,j).bind([r,s,t].join(\" \"),k).bind(m,l).css({ WebkitUserSelect: \"none\" }) : a(this).bind(u,j).bind([v,w,x,y].join(\" \"),l)
            },teardown: function () { a(this).unbind(c) }
        }; var f = \"longclick\",c = \".\" + f,u = \"mousedown\" + c,m = \"click\" + c,v = \"mousemove\" + c,w = \"mouseup\" + c,x = \"mouseout\" + c,y = \"contextmenu\" + c,q = \"touchstart\" + c,r = \"touchend\" + c,s = \"touchmove\" + c,t = \"touchcancel\" + c,i = \"duration\" + c,g = \"timer\" + c,h = \"fired\" + c
    })(jQuery);
将longclick事件与时间间隔绑定
 $(\'element\').longclick(250,longClickHandler);
触摸设备上的长按会触发以下功能
function longClickHandler() {
    alter(\'Long tap Fired\');
}
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-