js學習總結----移動端事件基礎及常用的事件庫

来源:http://www.cnblogs.com/diasa-fly/archive/2017/08/14/7357649.html
-Advertisement-
Play Games

一、事件基礎 PC:click、mouseover、mouseout、mouseenter、mouseleave、mousemove、mousedown、mouseup、mousewheel、keydown、keyup、load、scroll、blur、focus、change... 移動端:cli ...


一、事件基礎

PC:click、mouseover、mouseout、mouseenter、mouseleave、mousemove、mousedown、mouseup、mousewheel、keydown、keyup、load、scroll、blur、focus、change...

移動端:click(單擊)、load、scroll、blur、focus、change、input(代替keyup、keydown)...TOUCH事件模型(處理單手指操作)、GESTURE事件模型(處理多手指操作)

  TOUCH:touchstart、touchmove、touchend、touchcancel

  GESTURE:gesturestart、gesturechange、gestureend

1、click:在移動端click屬於單擊事件,不是點擊事件,在移動端的項目中我們經常會區分單擊做什麼和雙擊做什麼,所以移動端的瀏覽器在識別click的時候,只有確定是單擊後才會把它執行:

  在移動端使用click會存在300ms的延遲:瀏覽器在第一次點擊結束後,還需要等到300ms看是否觸發了第二次點擊,如果觸發了第二次點擊就不屬於click了,沒有觸發第二次點擊才屬於click

  下麵代碼是移動端模擬click時間的代碼

function on(curEle,type,fn){
            curEle.addEventListener(type,fn,false);
        }
        var oBox = document.querySelector('.box');
        //移動端採用click存在300ms延遲
        // oBox.addEventListener('click',function(){
        //     this.style.webkitTransform = 'rotate(360deg)'
        // },false)
        //使用TOUCH事件模型實現點擊操作(單擊&&雙擊)
        on(oBox,'touchstart',function(ev){
            //ev:TouchEvent事件  屬性  type、target、preventDefault(returnValue)、stopPropagation、changedTouches、touches
            //changedTouches和touches都是手指信息的集合(touchList),touches獲取到值的必要條件只有手指還在屏幕上才可以獲取,所以在touchend事件中如果想獲取手指離開的瞬間坐標只能使用changedTouches獲取
            var point = ev.touches[0];
            this['strX'] = point.clientX;
            this['strY'] = point.clientY;
            this['isMove'] = false;
        })
        on(oBox,'touchmove',function(ev){
            var point = ev.touches[0];
            var newX = point.clientX,
                newY = point.clientY;
            //判斷是否發生滑動,我們需要判斷偏移的值是否在30PX以內
            if(Math.abs(newX-this['strX'])>30 || Math.abs(newY-this['strY'])>30){
                this['isMove'] = true;
            }
        })
        on(oBox,'touchend',function(ev){
            if(this['isMove'] === false){
                //沒有發生移動  點擊
                this.style.webkitTransitionDuration = '1s';
                this.style.webkitTransform = 'rotate(360deg)';
                var delayTimer = window.setTimeout(function(){
                    this.style.webkitTransitionDuration = '0s';
                    this.style.webkitTransform = 'rotate(0deg)';
                }.bind(this),1000);
            }else{
                //滑動
                this.style.background = 'red';
            }
        })

同時也可以使用fastclick.js來解決移動端click事件的300ms延遲 (github地址https://github.com/zhouxiaotian/fastclick)

2、點擊、單擊、雙擊、長按、滑動、左滑、右滑、上滑、下滑

  單擊和雙擊(300MS)

  點擊和長按(750MS)

  點擊和滑動(X/Y軸偏移的距離是否在30PX以內,超過30PX就是滑動)

  左右滑動和上下滑動(X軸偏移的距離 > Y軸偏移的距離 = 左右滑 相反就是上下滑)

  左滑和右滑(偏移的距離 >0 = 右滑  相反就是左滑)

二、常用的事件庫

  FastClick.js :解決CLICK事件300MS的延遲

  TOUCH.js:百度雲移動手勢庫  GitHub地址  https://github.com/Clouda-team/touch.code.baidu.com

  實例如下:  

var oBox = document.querySelector('.box');
        //單擊
        touch.on(oBox,'tap',function(ev){
            this.style.webkitTransitionDuration = '1s';
            this.style.webkitTransform = 'rotate(360deg)';
            var delayTimer = window.setTimeout(function(){
                this.style.webkitTransitionDuration = '0s';
                this.style.webkitTransform = 'rotate(0deg)';
                window.clearTimeout(delayTimer)
            }.bind(this),1000)
        })
        //雙擊
        touch.on(oBox,'doubletap',function(ev){
            this.style.webkitTransitionDuration = '1s';
            this.style.webkitTransform = 'rotate(-360deg)';
            var delayTimer = window.setTimeout(function(){
                this.style.webkitTransitionDuration = '0s';
                this.style.webkitTransform = 'rotate(0deg)';
                window.clearTimeout(delayTimer)
            }.bind(this),1000)
        })
        //長按
        touch.on(oBox,'hold',function(ev){
            this.style.backgroundColor = 'red';
        })

  HAMMER.js

  Zepto.js:被譽為移動端的小型JQ,JQ由於是在PC端使用的,所以代碼中包含了大量對於ie低版本瀏覽器的相容處理,而ZEPTO只應用在移動端開發,所以在JQ的基礎上沒有對低版本的ie進行支持

  JQ中提供了很多的選擇器類型及DOM操作方法,但是ZEPTO只是實現了部分常用的選擇器和方法。例如:JQ中的動畫方法有animate、hide、show、fadeIn、fadeOut、fadeToggle、slideDown、slideUp、slideToggle...但是在ZEPTO中只有animate

  ZEPTO的源代碼大小比JQ小很多

  ZEPTO專門為移動端開發而誕生,所以相對於JQ來說更適合移動端:

  ZEPTO的animate動畫方法支持了CSS3動畫的操作

  ZEPTO專門的準備了移動端常用 的事件操作:tap、singleTap、doubleTap、longTap、swipe、swipeUp、swipeDown、swipeLeft、swipeRight

  實例代碼如下:  

$('.box').singleTap(function(ev){
            $(this).animate({
                rotate:'360deg'
            },1000,'linear',function(){
                this.style.webkitTransform = 'rotate(0)'
            })
        })

        $('.box').on('touchstart',function(){
            $(this).css('background','red')
        })
        $.ajax({
            url:'',
            type:'get',
            dataType:'json',
            cache:false,
            success:function(){
                
            }
        })

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 對於CSS 3.0,它對於我們Web設計人員來說不只是新奇的技術,更重要的是這些全新概念的Web應用給我們的設計開發提高了效率以及更多的無限可能性,我們將不必再依賴圖片或者 Javascript 去完成圓角、塊/文字陰影、漸變、透明度等提高Web設計質量的特色應用。 由於CSS3的新特性較多,所以w ...
  • Web Components是什麼 Web Components是一個聚集html,css,js的一個可復用組件。 這樣開發者就可以在網路上通過插件或組件的形式分享自己的代碼片段(具有獨立的功能),也可以理解成web組件或插件。 Web Components的組成要素 自定義元素 html模版 sh ...
  • 學rn得朋友們,你們知道rn開源項目嗎?來吧看這裡:http://www.marno.cn/(rn開源項目) React Native學習之路(9) - 註冊登錄驗證的實現 + (用Fetch實現post請求) + (倒計時驗證碼)+(父子組件通信)+(asyncStorage非同步存儲) +(Tex ...
  • 一、JavaScript介紹 前端三劍客之JavaScript,簡稱js,可能是這三個裡面最難的一個了。很早以前,市面上流通著三種js版本,為了統一,ECMA(歐洲電腦製造協會)定義了規範的版本,即EcmaScript。 事實上ECMAScript只是JavaScript的一部分,完整的JavaS ...
  • 對location進行梳理,平時用的時候都是用什麼看什麼,今天把location整理一下,方便查詢 location.assign('地址') 等同於 location.href = '地址' 和 window.location = '地址' 後兩者使用的時候,也是觸發assign()方法,進行跳轉 ...
  • 在MyEclipse中JSON字元串的換行值是不同的,必須以'/n'換行,如果只是json驗證的問題,可以把json的驗證關掉試試。點擊所在的項目->Project->Proterties->MyEclipse->Validation,把JSON Validator中的Manual和Build的對號 ...
  • 功能:添加事件/完成事件/刪除事件 ...
  • 1.事件冒泡: 2.獲取某個元素的CSS屬性值: ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...