1. 程式人生 > >從零開始學 Web 之 移動Web(五)touch事件的缺陷,移動端常用外掛

從零開始學 Web 之 移動Web(五)touch事件的缺陷,移動端常用外掛

一、touch事件的缺陷

我們在上面《頁面分類》的專案中,對 tap 事件的處理使用的是 touch 事件處理的,因為如果使用 click 事件的話,總會有延時。

但是呢,touch 事件並不是完美的,不管是我們自己封裝的 tap 事件,還是 zepto 自帶的 tap 事件,在移動端都有一個致命的缺陷,就是“點透”。

什麼是“點透”呢?

假如有兩個盒子,盒子A和盒子B,如果盒子A在盒子B的上面,當我們使用 tap 事件點選盒子A的時候,盒子B會觸發 click 事件,這就是點透。

觸發這兩個事件的順序是 tap 事件,然後是 click 事件。因為 tap 事件內部是 touch 事件處理的,而 touch 事件是先於 click 事件觸發的。

這個時候,我們既想無延時,又不想觸發點透效果,而且有的時候,我們希望我們的網頁不僅可以在移動端訪問,在 PC 模式下也可以訪問,但是 tap 事件只能在移動端使用,所以只能用 click 事件,但是 click 又有延時,怎麼辦呢?

我們知道, touch 事件只能在移動端使用,這個我們無法改變,所以我們只能改變延時的問題,於是我們就引入了 "fastclick.js" 庫檔案,解決 click 的延時問題。

使用方式:

1、引入 fastclick.js 檔案。

2、在 script 中加入以下函式:

原生 js 的話,加入:

if ('addEventListener' in document) {
    document.addEventListener('DOMContentLoaded', function() {
        // document.body 表示整個body下的所有元素都是用fastclick效果,可以修改。
        FastClick.attach(document.body);
    }, false);
}

jQuery 或 Zepto 的話:

$(function() {
    FastClick.attach(document.body);
});

3、正常使用 元素.addEventListener("click", function(){}) 或者 元素.on("click", function(){}) ,來使用改裝過後的 click 事件,這個 click 事件沒有延時。

二、移動端的一些常用外掛

見識到 fastclick 外掛的好處之後,我們就挖掘出了更多好用的外掛,可以大大提高我們開發的效率。

1、iScroll

以下為官方介紹:

iScroll是一個高效能,資源佔用少,無依賴,多平臺的 javascript 滾動

外掛。

它可以在桌面,移動裝置和智慧電視平臺上工作。它一直在大力優化效能和檔案大小以便在新舊裝置上提供最順暢的體驗。

iScroll不僅僅是 滾動。它可以處理任何需要與使用者進行移動互動的元素。在你的專案中包含僅僅4kb大小的iScroll,你的專案便擁有了滾動,縮放,平移,無限滾動,視差滾動,旋轉功能。給它一個掃帚它甚至能幫你打掃辦公室。

即使平臺本身提供的滾動已經很不錯,iScroll可以在此基礎上提供更多不可思議的功能。具體來說:

細粒度控制滾動位置,甚至在滾動過程中。你總是可以獲取和設定滾動器的x,y座標。
動畫可以使用使用者自定義的擦出功能(反彈'bounce',彈性'elastic',回退'back',...)。
你可以很容易的掛靠大量的自定義事件(onBeforeScrollStart, *
開箱即用的多平臺支援。從很老的安卓裝置到最新的iPhone,從Chrome瀏覽器到IE瀏覽器。

使用方式:

1、希望你的結構如下,但是不限定標籤(下面的 ul 可以改為 div,li 可以改為 p 等,不限定標籤型別)。

<div id="wrapper">
    <ul>
        <li>...</li>
        <li>...</li>
        ...
    </ul>
</div>

2、在 script 標籤中初始化 iScroll。

var wrapper = document.getElementById('wrapper');
var myScroll = new IScroll(wrapper);

如果是 jQuery 的話更簡單了,一句話:

var myScroll = new IScroll(".wrapper");

3、如果想實現像滾輪,顯示滾動條等效果,可以在初始化的時候,將這些需求作為物件,填入第二個引數中,比如,增加滾輪上下滾動操作和顯示滾動條的效果:

var myScroll = new IScroll(".wrapper", {
  mouseWheel: true, // 使用滾輪
  scrollbars: true  // 顯示滾動條
});

如此簡單三步操作,就可以輕鬆實現你想要的功能。

2、swipe

swipe.js 是一個比較有名的觸控滑動外掛,它能夠處理內容滑動,支援自定義選項,你可以讓它自動滾動,控制滾動間隔,返回回撥函式等。經常作為輪播圖使用。

使用方法:

1、引入 swipe.js 檔案

2、希望你的 html 結構為(不限定標籤名稱):

<div id='slider' class='swipe'>
  <div class='swipe-wrap'>
    <div></div>
    <div></div>
    <div></div>
  </div>
</div>

3、對其格式進行設定(固定寫法,最好不要修改,當然類名稱需要修改)

.swipe {
  overflow: hidden;
  visibility: hidden;
  position: relative;
}
.swipe-wrap {
  overflow: hidden;
  position: relative;
}
.swipe-wrap > div {
  float:left;
  width:100%;
  position: relative;
}

3、在 script 中進行初始化操作:

window.mySwipe = Swipe(document.getElementById('slider'));

4、如果你想要自動輪播,滑動等操作,需要在初始化的第二個引數中,引入一個物件,比如:

window.mySwipe = new Swipe(document.getElementById('slider'), {
  startSlide: 2,  // 預設顯示第二張圖片
  speed: 400,     // 過渡400ms
  auto: 3000,     // 輪播間隔 2s
  continuous: true,  // 迴圈輪播(預設開啟)
  disableScroll: false,  // 禁止滑動(預設關閉)
  stopPropagation: false,
  callback: function(index, elem) {},
  transitionEnd: function(index, elem) {}
});

5、當然你還可以在 PC 上使用左右兩個按鈕來上一張下一張翻頁。swipe 會提供 next() , prev() 等函式來實現上一張下一張翻頁。比如:

document.getElementById('btn1').onclick = function(){
  window.mySwipe.prev(); // 呼叫系統的prev()方法
};

document.getElementById('btn2').onclick = function(){
  window.mySwipe.next(); // 呼叫系統的next()方法
};

3、swiper

swiper 與 swipe 類似,都可以提供輪播觸控滑動的效果,只不過 swiper 能夠提供的特效更多,更加炫酷,相應的體積也更大。

需要注意的是,swiper 不同於 swipe,它也是結構固定,不限標籤的,唯一的區別是類樣式的名稱是不可改變的。因為它引入了庫檔案的 css 樣式。所以最好不要改變類樣式的名稱。具體的內容可以參考官網,有很多詳細的使用說明和特效演示。

臨時Tips:overflow:hidden 可以讓子元素浮動的父盒子由高度為0,到自動伸縮。

相關推薦

開始Swift》學習筆記Day67——Cocoa Touch設計模式及應用MVC模式

table control sdn rate term targe rac uitabbar bsp 原創文章,歡迎轉載。轉載請註明:關東升的博客 MVC(Model-View-Controller,模型-視圖-控制器)模式是相當古老的設計模式之中的一個,它最早出如今

開始Swift》學習筆記Day60——Core Foundation框架

類型轉換 字符 sso grid blog spa www water 轉載 創文章,歡迎轉載。轉載請註明:關東升的博客 Core Foundation框架是蘋果公司提供一套概念來源於Foundation框架,編程接口面向C語言風格的API。盡管在Swift中調用這樣

開始Kotlin-使用接口7

如何 mark android interface inter rand 兩個 blog dtw 從零開始學Kotlin基礎篇系列文章 定義接口 使用關鍵字interface定義接口 interface InterfaceDemo7 { } 類或對象可以實現一個或者多個接

webpack開始構建專案rem問題

使用webpack解決px轉rem的自適應問題 現在的專案配置已經可以正常執行 接下來我們要考慮下一個問題,由於VUE主要適用於移動端,所以我們需要一個自適應方案 由於這是一個大眾需求的剛需方案,所以我們大可不必自己手動去寫JS程式碼,重複造輪子 那麼我

【高德地圖API】開始高德JS API——定位方式大揭祕

摘要:關於定位,分為GPS定位和網路定位2種。GPS定位,精度較高,可達到10米,但室內不可用,且超級費電。網路定位,分為wifi定位和基站定位,都是通過獲取wifi或者基站資訊,然後查詢對應的wifi或者基站位置資料庫,得到的定位地點。定位資料庫可以不斷完善不斷補充,所以,

轉載:高德地圖API學習 開始高德JS API地圖展現

摘要:關於地圖的顯示,我想大家最關心的就是麻點圖,自定義底圖的解決方案了吧。在過去,marker大於500之後,瀏覽器開始逐漸卡死,大家都開始尋找解決方案,比如聚合marker啊,比如麻點圖啊。聚合marker裡面還有一些複雜的演算法,而麻點圖,最讓大家頭疼的,就是如何生成麻點圖,如何切圖,如何把圖片貼到地圖

開始學習比特幣開發--網路初始化載入區塊鏈和錢包匯入區塊啟動節點

寫在前面: 本篇文章接續 從零開始學習區塊鏈技術(三)-接入比特幣網路的關鍵步驟解析、建立比特幣錢包,以及重要rpc指令 從零開始學習區塊鏈技術(二)–如何接入比特幣網路以及其原理分析 以及從零開始學習區塊鏈技術(一)–從原始碼編譯比特幣 如果這篇文章看不明白,請務必先閱讀之前的文章

開始 Web 移動Webtouch事件缺陷移動常用插件

bar 知識 怎麽 element clas mas index ont 彈性 大家好,這裏是「 從零開始學 Web 系列教程 」,並在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公眾號:Web前端之巔 博

開始 Web 移動Webtouch事件缺陷移動常用外掛

一、touch事件的缺陷 我們在上面《頁面分類》的專案中,對 tap 事件的處理使用的是 touch 事件處理的,因為如果使用 click 事件的話,總會有延時。 但是呢,touch 事件並不是完美的,不管是我們自己封裝的 tap 事件,還是 zepto 自帶的 tap 事件,在移動端都有一個致命的缺陷,

開始 Web Vue.jsVue的動畫

一、Vue的動畫 為什麼要有動畫:動畫能夠提高使用者的體驗,幫助使用者更好的理解頁面中的功能; Vue 中也有動畫,不過遠沒有 css3 中的那麼炫酷。只能有一些簡單的變換,但是卻可以配合第三方css動畫庫完成炫酷的變換。 1、過渡的類名 在進入/離開的過渡

開始 Web JS 高階apply與callbind閉包和沙箱

一、apply 和 call 方法 apply 和 call 都可以改變呼叫其的函式或方法中的 this 指向。 不同的是傳入引數時,apply 有兩個引數,第二個引數是陣列;call 從第二個引數開始是呼叫其的函式的所有引數。 使用方法: 1、apply的使用語法: 函式名.apply(物件,[引數1

開始 Web Vue.jsVue.js概述基本結構指令事件修飾符樣式

大家好,這裡是「 從零開始學 Web 系列教程 」,並在下列地址同步更新...... github:https://github.com/Daotin/Web 部落格園:http://www.cnblogs.com/lvonve/ CSDN:https://blog.csdn.net/lvonve/

開始Swift》學習筆記Day 57——Swift編碼規範凝視規範:文件凝視、文檔凝視、代碼凝視、使用地標凝視

精品 -type mil 顯示 clas ber ansi tex text 原創文章。歡迎轉載。轉載請註明:關東升的博客 前面說到Swift凝視的語法有兩種:單行凝視(//)和多行凝視(/*...*/)。這裏來介紹一下他們的使用規範。 1、文件凝視文件凝視就在每個文

【SpringMvc】開始SpringMvc資料庫(二)

大家好,在上一篇中,我們介紹了SpringMvc 的搭建,這篇我們來看下SpringMvc連線資料庫。 【SpringMvc】從零開始學SpringMvc之初始化(一) 準備 首先, 需要安裝Mysql、Navicat(或者類似軟體)、有一點sql基礎,瞭解一點

【SpringMvc】開始SpringMvc初始化(一)

大家好,我們今天開始SpringMvc 這個系列,由於筆者也是安卓出身,對SpringMvc 也是接觸不久,所以,這個系列僅僅只是記錄筆者學習SpringMvc 過程中的心得,如有錯誤,歡迎指正。 在開始之前,我們需要準備一些東西,JDK、Eclipse(MyEclipse)、Tom

【SpringMvc】開始SpringMvc實現使用者登入(三)

大家好,在前2篇中,我們實現了SpringMvc的配置和資料庫連線,這一篇我們來用html/ajax實現一個簡單的登入功能。 【SpringMvc】從零開始學SpringMvc之初始化(一) 【SpringMvc】從零開始學SpringMvc之資料庫(二) 準

【SpringMvc】開始SpringMvc實現使用者管理(四)

大家好,在上一篇中,我們實現了使用者登入,這一篇我們來實現使用者的增刪改查。由於在第2篇中,我們已經建立好了資料庫,這裡就不在詳述了。 準備 這裡,我們用到了騰訊的前端模板引擎art-template,不熟悉的小夥伴可以先了解一番,或者有熟悉其他模板引擎的,也

開始Java種內部類將執行緒隱藏類中

1.使用普通內部類繼承Thread類 <code class="hljs java has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box;

開始C++虛擬函式與多型:虛擬函式表指標、虛解構函式、object slicing與虛擬函式、C++物件模型圖

#include <iostream>using namespace std;class CObject {public:     virtual void Serialize()     {         cout << "CObject::Serialize ..." <&

開始Java單例模式:懶漢模式和飽漢模式

單例模式:單例模式是一種常用的軟體設計模式。在它的核心結構中只包含一個被稱為單例類的特殊類。通過單例模式可以保證系統中一個類只有一個例項而且該例項易於外界訪問,從而方便對例項個數的控制並節約系統資源。