前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >通过jquery库扩展移动端‘长按触发’事件(模拟浏览器‘长按识别二维码’功能)

通过jquery库扩展移动端‘长按触发’事件(模拟浏览器‘长按识别二维码’功能)

作者头像
Rattenking
发布2021-01-29 16:03:28
1.4K0
发布2021-01-29 16:03:28
举报
文章被收录于专栏:Rattenking

上一篇讲了如何通过qrcode.js解析二维码(图片),那么现在我们要实现的功能就是最开始的要求'长按识别二维码'这个功能!解析部分的难题我们已经解决,那么现在需要解决的就是模拟‘长按触发事件’这个功能,该功能通过一些参考资料,采用的是给jquery的扩展一个触发事件。

解析二维码讲解

1,扩展触发事件代码

代码语言:javascript
复制
$.fn.longPress = function (fn) {
  let timer = null;
  let $this = this;
  for (let i = 0; i < $this.length; i++) {
	
	  $this[i].addEventListener('touchstart', function (event) {
	  		timer = setTimeout(fn, 600);
	  }, false);
	
	  $this[i].addEventListener('touchend', function (event) {
	  		clearTimeout(timer);
	  }, false);
  }
}

注意:此处我采用的是开始触发touchstart事件的600ms后触发长按事件,这里的时间长短可以根据需求来自己定义!

2,阻止浏览默认事件的触发

代码语言:javascript
复制
document.getElementById('showImg').ontouchstart = function (e) { e.preventDefault(); };

注意此处不能采用:

代码语言:javascript
复制
window.ontouchstart = function (e) { e.preventDefault(); };

原因是:部分移动端浏览器会将页面中其他的事件同时都阻止,web端浏览器在谷歌测试没有问题!所以此处采用只是阻止当前要长按的图片的浏览器默认事件。但是即便如此还是遇到一些情况:

(1),进入浏览器后你直接长按依然会触发浏览器默认事件,如果等一下再去长按就不会触发浏览器的默认事件,会直接触发我们自定义的事件。

解决办法:将该段组织浏览器默认事件的代码直接放到该元素的后边,当然页面如果内容很多,一般不会出现该情况!

(2),苹果手机的浏览器默认事件没有阻止。

3,给图片绑定触发事件

代码语言:javascript
复制
function alertChange(param){
	if(param === 1){
		getUrl(document.getElementById('showImg'),'img-url');
	}else if(param === 2){
		analyticCode.getUrl('img-url',document.getElementById('showImg'),function(url){alert(url);});
	}else if(param === 3){
		analyticCode.getUrl('img-url',document.getElementById('showImg'),function(url){window.kk = url;});
	}else if(param === 4){
		analyticCode.getUrl('img-url',document.getElementById('showImg'),function(url){window.open(url);});
	}else{
		return;
	}
	$('#addDiv').remove();
}

$('#showImg').longPress(function(){
	let str = '<div id="addDiv" style="position:absolute;top:110px;left:50px;z-index:10;background:#000;color:#fff;font-size:16px;text-align:center;width:180px;border-radius:5px;">'+
	'<p style="border-bottom:1px solid #fff;margin:0;height:50px;line-height:50px;" onclick="alertChange(1)">识别二维码</p>'+
	'<p style="border-bottom:1px solid #fff;margin:0;height:50px;line-height:50px;" onclick="alertChange(2)">弹出地址</p>'+
	'<p style="border-bottom:1px solid #fff;margin:0;height:50px;line-height:50px;" onclick="alertChange(3)">当前窗口打开地址</p>'+
	'<p onclick="alertChange(4)">新窗口打开地址</p>'+
	'</div>';
	$('#analytic').append(str);
});

效果demo:

https://rattenking.github.io/demo/15/index.html

下载demo:

http://download.csdn.net/download/m0_38082783/9985096

效果图:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017/09/19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档