這段程式碼是我在做13年一份兼職的時候無聊加上去的,為jQuery添加觸控事件的支援。因為做得有點無聊,所以就幫客戶添加了用響應式網頁 JS touch兼容了移動設備,主要是Webkit的移動設備。
這裡就分享下我的實現。
先貼上程式碼:
//Published by Indream Luo
//Contact: indreamluo@qq.com
//Version: Chinese 1.0.0
!function ($) {
window.indream = window.indream || {};
$.indream = indream;
//Define events
indream.touch = {
evenList: {
touchStart: {
htmlEvent: 'touchstart'
},
touchMove: {
htmlEvent: 'touchmove'
},
touchEnd: {
htmlEvent: 'touchend'
},
tapOrClick: {
eventFunction: function (action) {
$(this).each(function () {
(function (hasTouched) {
$(this).touchEnd(function (e) {
hasTouched = true;
action.call(this, e);
});
$(this).click(function (e) {
if (!hasTouched) {
action.call(this, e);
}
});
}).call(this, false);
});
return this;
}
},
moveOrScroll: {
eventFunction: function (action) {
$(this).each(function () {
(function (hasTouched) {
$(this).touchMove(function (e) {
hasTouched = true;
action.call(this, e);
});
$(this).scroll(function (e) {
if (!hasTouched) {
action.call(this, e);
}
});
}).call(this, false);
});
}
}
//將事件加入jquery
for (var eventName indream.touch.evenList) {
var event = indream.touch.evenList[eventName];
$.fn[eventName] = event.event {
$ (this).each(function () {
$(this).bind(htmlEvent, action); if (this.attachEvent) {
this.attachEvent('on' htmlEvent, function (e) { });
this.addEventListener(htmlEvent, function (e) {
});
}
返回此;
window.jQuery);
網路上能找到很多關於Touch事件的相關信息,所以我就不詳細說明了,可以解釋得簡單一點。
觸控事件取代老鼠事件
在Webkit行動裝置上,觸控操控首先會觸發觸控事件,在0.5秒後才會觸碰滑鼠事件。
個人覺得這在設計上可以理解。先滿足於觸控操控的需求,再向「下」相容滑鼠事件,以滿足原有面向桌面網頁的使用。
所有的事件大致執行順序是:touchstart->touchmove->touchend->0.5s->滑鼠事件mouseover/scroll/click等
依照webkit行動瀏覽器的設計,一般開發時候會依照桌面網頁開發,然後在行動裝置上使用是沒問題的。不過桌面上大量使用的hover類效果時常會因為觸摸把mouse事件 click事件觸發個遍而悲劇;0.5秒的延遲也對用戶體驗造成了大傷害。
所以我加入了tapOrClick事件,用途就是替代click事件,並且滅了那0.5秒。
滾動鎖定
在使用者使用觸控裝置進行捲動,而觸控已經停止的時候,瀏覽器會鎖定整個頁面,暫停所有UI資源佔用,而把大部分資源留給核心進行捲動。同樣的情況也會發生在放大縮小頁面內容,甚至更甚。
因為要加個滾動漸變的特效,所以我加入了moveOrScroll事件,在滑動的時候執行滾動中應該執行的效果。
當然,這裡還是不完美的,因為手指一旦離開螢幕(觸控事件停止),頁面自由滾動的這段時間,js也會被freeze。這只是沒有辦法中的辦法而已。
滾動鎖定還會導致另一個問題是:滾動有三種,分別是上下、左右、自由。
用觸摸設備就會發現,如果從觸摸開始被判定是上下滾動,那麼觸摸時再怎麼左右滑動都不會有左右滑動的效果,除非放開重來。同樣的情況也會發生在一開始為左右滾動。自由滾動的話需要一開始就進行斜向滾動。
在這個時候如果需要加入特定事件的話,需要注意事件的判斷。在jQuery的事件回呼參數中,假設參數名為e,那麼一般用:
e.originalEvent.touches[0].pageX可以判斷觸控狀況。開發時需自行記錄觸摸事件的情況再作判斷。
原生最優
請盡量不要嘗試用大量的JS方法觸發來實現一些本身沒有的樣式效果。
例如元素靜態不動,理應用position:fix;來實現,但許多開發人員會是用js不斷刷新其控制項位置來解決。
這種實作方式放在觸控裝置上,一般只會出現兩種情況:
1.卡死你
2.頁面被凍結,凍結技術後突然發現事件全部執行完了(原因如上,瀏覽器會集中UI線程的資源給內核優先)
一般移動設備的屏幕有效更新率不過30Hz,精簡指令集的CPU本身也會慢一些,加上大部分的行動裝置都是...Android...
所以,效能必須盡量依賴原生提供的方法。一些Hack和Cover的方法對方受不了。
如何使用
當時因為兼職交付好像就一兩週的事情,所以沒有把程式碼寫得太好,不過還是能用。大致的用法跟普通的jQuery事件一致,命名和實作方面確實還值得商榷:
$('.sign .usernametip'). function () {
$(this).css('visibility', 'hidden');
$('.sign .username').focus();
});
跟專案中的許多事情一樣,許多事情看似簡單,但實際上卻會出現各種各樣的問題。
觸控事件並不是簡單地便可相容,單實現了功能外還需要顧慮最實質的問題-特定的互動模式。
例如觸摸中需要隱藏許多空間以留有更多的空間給有限的用戶屏幕;許多本身以點擊切換的元素在觸摸的最佳體驗中應該改成滑動切換,甚至要顧慮不同的滑動情況;觸摸各事件的停留事件不同可能代表不同的操作,需要進行判別......
雖然知道jQuery Mobile等已經有比較完善的各種方法,不過就是忍不住自己實現一下看看。

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。1.Python以简洁语法和丰富库生态著称,适用于数据分析和Web开发。2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。

JavaScript不需要安裝,因為它已內置於現代瀏覽器中。你只需文本編輯器和瀏覽器即可開始使用。 1)在瀏覽器環境中,通過標籤嵌入HTML文件中運行。 2)在Node.js環境中,下載並安裝Node.js後,通過命令行運行JavaScript文件。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

記事本++7.3.1
好用且免費的程式碼編輯器

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器