1. 程式人生 > >通過jquery庫擴充套件移動端‘長按觸發’事件(模擬瀏覽器‘長按識別二維碼’功能)

通過jquery庫擴充套件移動端‘長按觸發’事件(模擬瀏覽器‘長按識別二維碼’功能)

上一篇講了如何通過qrcode.js解析二維碼(圖片),那麼現在我們要實現的功能就是最開始的要求'長按識別二維碼'這個功能!解析部分的難題我們已經解決,那麼現在需要解決的就是模擬‘長按觸發事件’這個功能,該功能通過一些參考資料,採用的是給jquery的擴充套件一個觸發事件。

1,擴充套件觸發事件程式碼

$.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,阻止瀏覽預設事件的觸發

document.getElementById('showImg').ontouchstart = function (e) { e.preventDefault(); };

注意此處不能採用:

window.ontouchstart = function (e) { e.preventDefault(); };

原因是:部分移動端瀏覽器會將頁面中其他的事件同時都阻止,web端瀏覽器在谷歌測試沒有問題!所以此處採用只是阻止當前要長按的圖片的瀏覽器預設事件。但是即便如此還是遇到一些情況:

(1),進入瀏覽器後你直接長按依然會觸發瀏覽器預設事件,如果等一下再去長按就不會觸發瀏覽器的預設事件,會直接觸發我們自定義的事件。

解決辦法:將該段組織瀏覽器預設事件的程式碼直接放到該元素的後邊,當然頁面如果內容很多,一般不會出現該情況!

(2),蘋果手機的瀏覽器預設事件沒有阻止。

3,給圖片繫結觸發事件

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.location.href = 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:

下載demo:

效果圖:


其他

[我的部落格,歡迎交流!](http://rattenking.gitee.io/stone/index.html)

[我的CSDN部落格,歡迎交流!](https://blog.csdn.net/m0_38082783)

[微信小程式專欄](https://blog.csdn.net/column/details/18335.html)

[前端筆記專欄](https://blog.csdn.net/column/details/18321.html)

[微信小程式實現部分高德地圖功能的DEMO下載](http://download.csdn.net/download/m0_38082783/10244082)

[微信小程式實現MUI的部分效果的DEMO下載](http://download.csdn.net/download/m0_38082783/10196944)

[微信小程式實現MUI的GIT專案地址](https://github.com/Rattenking/WXTUI-DEMO)

[微信小程式例項列表](http://blog.csdn.net/m0_38082783/article/details/78853722)

[前端筆記列表](http://blog.csdn.net/m0_38082783/article/details/79208205)

[遊戲列表](http://blog.csdn.net/m0_38082783/article/details/79035621)

相關推薦

通過jquery擴充套件移動觸發事件模擬瀏覽器識別功能

上一篇講了如何通過qrcode.js解析二維碼(圖片),那麼現在我們要實現的功能就是最開始的要求'長按識別二維碼'這個功能!解析部分的難題我們已經解決,那麼現在需要解決的就是模擬‘長按觸發事件’這個功能,該功能通過一些參考資料,採用的是給jquery的擴充套件一個觸發事件。

微信內建瀏覽器 識別 功能的兩三個坑與解決方案

其實版主沒有找到根本原因;根本原因是,META裡面設的width問題 ,也就是頁面縮放引起的,跟定位什麼的沒有關係.需要用JS初始化頁面來控制縮放,就能解決問題. 我找到合適的解決方法了,類似等高佈局的原理,注意: 1.給你的二維碼加上一個巨大的pa

移動ios and android識別含js與原生互調

這篇文章就整理下移動端長按識別二維碼的實現吧!實現方式可以分為三種 第一二種好像沒多少可以說的,但還是按照順序來吧!首先先說下使用的庫,ios使用原生二維碼識別庫(好像是ios7之後才有的),然後說是WKWebView比UIWebView優化了很多 東西,也解決了記

Android Studio 第七十六期 - Android webview識別

ont hub oid 技術分享 qrc p s code android 二維碼 代碼已經整理好,效果如下圖: 地址:https://github.com/geeklx/myapplication2018/tree/master/p019_shibi

識別微信喚起喚醒跳轉任意url網站地址技術ticket生成規則介面加密php

相信很多朋友遇到過有些網站,可以直接通過一個連線就能讓你的手機開啟微信且跳轉到某個指定的頁面,許多程式設計師很好奇到底是怎麼實現的,到處求這種方法的原始碼,在文字中我會介紹及剖析這種跳轉實現的原理。 微信是個比較封閉的環境,至於為什麼封閉,相信大家都瞭解,在一些應用場景中,我們要用到外部瀏覽器跳

圖片識別但不會隱藏圖片的操作

let timeOutEvent = 0; $(".erweima").on({ touchstart: function(e){ timeOutEvent = setTimeout(function () { timeOut

js生成,解決微信瀏覽器不能識別問題。

<script type="text/javascript"> var qrcode = new QRCode(document.getElementById("qrcode"), { width : 100, height : 10

【egret】 egret遊戲中新增“識別

使用白鷺製作微信H5時,經常需要新增二維碼。而直接使用白鷺新增的圖片,不能夠長按識別二維碼。 egret 遊戲內部不能直接識別內部圖片,即使你是一個 Bitmap。因為 egret 是一個整體,裡面的東西外部不可見。而微信長按識別二維碼只能識別頁面中的圖片,那

微信識別bug整理

微信長按識別二維碼問題蒐集與整理 最近在折騰一個手機端頁面長按識別二維碼的問題。發現長按二維碼時在ios和android手機上識別不是那麼靈敏。下面整理下我對該問題的總結。 起初我將二維碼圖片直接放在background中,這種情況識別效果特別差。然後我將二

微信識別的原理

微信客戶端發現使用者長按<img>時,會截圖並啟動二維碼識別,二維碼識別的不是<img>而是截圖。這樣做的好處是不用下載圖片,壞處是識別的圖片更復雜了。 猜測:(Android)過程估計是,在WebView裡注入JS給第三方頁面中的所有

JAVA模版匯出PDF檔案,含條碼,,表格

示例模版: 示例匯出: 核心程式碼: package com.yonyou.dms.framework.service.pdf; import java.io.ByteArrayOutputStream; import java.io.File; import ja

PHP 生成、識別及安裝相關擴充套件/工具

2018-02-20 00:30:26  更新:推薦新擴充套件(極力推薦) 這篇文章裡用的兩個二維碼擴充套件都有些問題和麻煩:phpqrcode(生成二維碼)的原始碼有點小 bug; 而 php-zbarcode(識別二維碼)需要其他開源套件和擴充套件模組的支援,編譯起來很容易出問題,只支援 php5,而且

QT5.6 中通過QZXING 識別

在網上找了很多相關方法,但csdn上關於QZXING的資源,大多用到了QT4中的QTdeclarative模組。此模組在QT5中已經刪除,因此下載的資源都無法在QT5的環境下編譯通過。最終在官方l網站上找到了適應QT5的QZXING資源。使用方法是,在pro檔案中  incl

基於jQuery的 h5移動抽獎頁面插件

舉例 背景 active fun device none this 模板 循環 基於jQuery的 H5移動端頁面抽獎插件 12宮格抽獎頁面 采用rem布局,親測安卓機有效,用的是375px設計稿 同時可以學習下jQuery插件的基本模板是怎麽寫的。 案例下載地址:gith

一個簡單的腳手架drop-cli、vue的元件移動架構和pc管理後臺模版

鑑於自己的經驗和以往做過的專案,為了提高工作效率,特意整理了一下專案模版、vue元件庫等模版並新增到一個自己封裝的腳手架drop-cli中。不喜勿噴! drop-cli 一個簡單的腳手架,可新增不同的模版/框架 $ npm inst

jquery.mobiscroll 適合移動使用的滑動選擇控制元件 -- 自定義選項示例

mobiscroll : 滑動選擇 2.13.2版本免費,官網(mobiscroll.com)收費 另外官方還有線上例子: 下載完成後,保留mobiscroll-2.13.2.full.min.css,mobiscroll-2.13.2.full.min.j

通過ping++平臺完成移動H5支付

需求: 公司要求增加移動端H5支付入口,從而能夠充值虛擬金幣,用以購買公司的增值服務。 支付方式包括:微信和支付寶。 說明一下具體支付渠道:微信支付方式用到的是微信 WAP 支付(wx_wap),即基於微信外部瀏覽器的支付; 支付寶用到的是支付寶手機網頁

移動開發用touch事件還是click事件

device 問題 桌面網站 有意義 用戶 雨後春筍 phone 平臺 系統 前端開發現在包含了跨瀏覽器,跨平臺(不同操作系統)和跨設備(不同尺寸的設備)開發。 在移動開發的過程中,到底選取touch事件還是click事件?對了,請不要鄙視click,click在移動端開發

Unity NGUI實現移動輸入法取認事件響應

輸入法時間NGUI已經實現了事件的監聽功能,看下圖:On Return Key(選擇Snbmit) ,可以直接註冊監聽事件。實現如下:1、搭建一個簡單場景2、新建一個腳本InputTest.cs 掛載在Input物體下,並拖拽賦值Txt_content, inputusing UnityEngine; //

Html5 移動 觸摸滑動事件

next() star jquer meta scrip char XML func mage 以下代碼經過測試 沒有問題 且可以循環滑動 <!DOCTYPE html><html xmlns="http://www.w3.org/1999/xh