一、click 與tap比較
click與tap都會出發點擊事件,但是在手機web端,click會有200-300ms延遲,所以一般用tap(輕擊)代替click作為點選事件。singletap 和 doubletap分別代表單擊和雙擊。
二、使用tap會出現點透事件(事件穿透)
很多用過zepto(移動端開發的庫)都說使用tap會出現點透事件。
1、什麼是tap事件穿透
執行完上層繫結的tap事件後,下層如果繫結著click事件或者本身就存在點選事件(a/input)也會預設觸發,這就是點透事件,
2、出現點透事件的原因
首先要知道tap事件是通過監聽繫結document上的touch事件來模擬的,並且tap 事件是冒泡到document上才出發的;
touchstart:在這個dom上用手觸控就能開始
click:在這個dom上用手觸控,且手指未曾移動,且在這個dom上手指離開螢幕,且觸控和離開時間很短(有的瀏覽器可能不檢測時間間隔,照樣可以出發click),才開始觸發。
也就是說在移動端的事件觸發從早到晚排序:touchstart touchstop click。所以click的觸發是有延時的,大約300ms,所以click觸發的原則是,觸發當前有click的元素,且該元素面朝使用者的最前端,才會觸發click。
3、解決辦法
(1)github上有乙個叫做fastclick的庫
在dom ready時初始化在body上,如:
$(function())
然後給需要「無延遲點選」的元素繫結click事件即可。實戰開發中,click響應速度比tap還要快一點。
(2)為元素繫結touchend事件,並在內部加上e.preventdefault();
$a.on('touchend',function(e))
監聽touchend事件,阻止a元素的touchend的預設行為,從而阻止click事件的產生.
三、touch事件
主要有touchstart事件:當手機觸控螢幕時觸發,即使已經有乙個手指放在螢幕上也會觸發。
touchmove事件:當手指在螢幕上華東法人時候連續地觸發。在這個事件發生期間,呼叫preventdefault()事件可以阻止滾動。
touchend事件:當手指從螢幕上離開的時候觸發。
touchcancel事件:當系統停止跟蹤觸控的觸發。關於這個實際的確切觸發時間。
每個觸控事件都包括了三個觸控列表:
1.touches:當前位於螢幕上的所有手指的乙個列表。
2.targettouches:位於當前dom元素上的手指的乙個列表。
3.changedtouches:涉及當前事件的手指的乙個列表。
例如,在乙個touchend事件中,這就會是移開的手指。
這些列表由包含了觸控資訊的物件組成:
1.identifier:乙個數值,唯一標識觸控會話(touchsession)中的當前手指。
2.target:dom元素,是動作所針對的目標。
3.客戶/頁面/螢幕座標:動作在螢幕上發生的位置。
4.半徑座標和rotationangle:畫出大約相當於手指形狀的橢圓形。
移動端 移動端頁面適配方案
這是mdn上的解釋 這個單位代表根元素的 font size 大小 例如 元素的font size 當用在根元素的font size上面時 它代表了它的初始值 也就是說,rem單位取值的大小和根元素html的font size取值直接相關。它跟html元素之間得關係為 html的fontsize值 ...
pc端適配移動端
1.允許網頁寬度自動調整在網頁 的頭部,加入一行viewport元標籤所有主流瀏覽器都支援這個設定,包括ie9。對於那些老式瀏覽器 主要是ie6 7 8 需要使用css3 mediaqueries.js2.不使用絕對寬度由於網頁會根據螢幕寬度調整布局,所以不能使用絕對寬度的布局,也不能使用具有絕對寬...
移動端布局
預設以寬度為640px的設計稿為基準頁面,然後通過js獲取當前顯示裝置的尺寸,對應的調整 html 標籤的font size大小,從而實現通過以rem為單位的移動端布局適配。function win,doc function layoutcalc html.style.fontsize rem px...