Android移動(dòng)端touch實(shí)現(xiàn)下拉刷新功能
第一部分:四個(gè)touch事件
1.touchstart:只要將手指放在了屏幕上(而不管是幾只),都會(huì)觸發(fā)touchstart事件。
2.touchmove: 當(dāng)我們用手指在屏幕上滑動(dòng)時(shí),這個(gè)事件會(huì)被連續(xù)觸發(fā)。 如果我們不希望頁(yè)面隨之滑動(dòng),我們可以使用event的preventDefault來(lái)阻止這個(gè)默認(rèn)行為。
3.touchend: 當(dāng)手指滑動(dòng)后離開(kāi)屏幕,這時(shí)就觸發(fā)了touchend事件。
4.touchcancel: 系統(tǒng)停止跟蹤觸摸時(shí)候會(huì)觸發(fā)。例如在觸摸過(guò)程中突然頁(yè)面alert()一個(gè)提示框,此時(shí)會(huì)觸發(fā)該事件,這個(gè)事件比較少用。
第二部分:四個(gè)touch對(duì)象
1. touches,這是一個(gè)類(lèi)數(shù)組對(duì)象,包含了所有的手指信息,如果只有一個(gè)手指,那么我們用touches[0]來(lái)表示。
2. targetTouches 。 手指在目標(biāo)區(qū)域的手指信息。
3. changedTouches:最近一次觸發(fā)該事件的手指信息。
4. touchend時(shí),touches與targetTouches信息會(huì)被刪除,changedTouches保存的最后一次的信息,最好用于計(jì)算手指信息。
第三部分:實(shí)例1
先看效果圖:
它的實(shí)現(xiàn)原理非常簡(jiǎn)單,就是將紅色圓形的postion屬性設(shè)為absolute,然后,當(dāng)我們滑動(dòng)它時(shí),就觸發(fā)了touchmove事件,將其Left和top設(shè)置為event的pageX和pageY即可,為保證觸發(fā)中心與圓心在同一位置,只需將pageX加上width的一半,pageY加上height的一半。
源碼如下:
<!DOCTYPE html> <html> <head> <title>touchExample</title> <meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0"> <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script> <style> #touchDiv{ position: absolute; width: 50px; height: 50px; top: 20px; left: 20px; text-align: center; line-height: 50px; color:white; border-radius: 50%; background-color: red; } </style> </head> <body> <div id="touchDiv">點(diǎn)我</div> <script> var touchDiv = document.getElementById("touchDiv"); var x,y; touchDiv.addEventListener("touchstart",canDrag); touchDiv.addEventListener("touchmove",drag); touchDiv.addEventListener("touchend",nodrag); function canDrag (e) { console.log("god開(kāi)始"); } function drag (e) { $("#touchDiv").css("left",e.touches[0].pageX-25); $("#touchDiv").css("top",e.touches[0].pageY-25); } function nodrag () { console.log("god結(jié)束"); } </script> </body> </html>
第四部分:實(shí)例2
這個(gè)實(shí)例就是下拉刷新功能的實(shí)現(xiàn),效果如下:
源碼如下:
<!DOCTYPE html> <html> <head> <title>下拉刷新</title> <meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0"> <style> *{ margin:0; padding: 0; font-size:15px; } .header{ height: 50px; line-height: 50px; text-align: center; background-color: blue; color:white; font-size: 23px; } .drag_to_refresh{ align-items: center; padding-left: 155px; background-color: #bbb; color:yellow; display: none; } .refresh{ height: 50px; line-height: 50px; text-align: center; background-color: #bbb; color: green; display: none; } .drag{ text-align: center; background-color: lightgray; position: relative; padding:20px; text-indent: 1em; line-height: 30px; font-size:18px; } </style> </head> <body> <div class="header">政務(wù)云</div> <div class="drag_to_refresh"></div> <div class="refresh">刷新中...</div> <div class="drag">電子政務(wù)云(E-government cloud)屬于政府云,結(jié)合了云計(jì)算技術(shù)的特點(diǎn),對(duì)政府管理和服務(wù)職能進(jìn)行精簡(jiǎn)、優(yōu)化、整合,并通過(guò)信息化手段在政務(wù)上實(shí)現(xiàn)各種業(yè)務(wù)流程辦理和職能服務(wù),為政府各級(jí)部門(mén)提供可靠的基礎(chǔ)IT服務(wù)平臺(tái)。</div> <script> window.onload = function () { var initX; var drag_content = document.querySelector(".drag"); var drag_to_refresh = document.querySelector(".drag_to_refresh"); var refresh = document.querySelector(".refresh"); drag_content.addEventListener("touchmove",drag); drag_content.addEventListener("touchstart",dragStart); drag_content.addEventListener("touchend",dragEnd); function dragStart(e){ initY = e.touches[0].pageY; console.log(initX); } function drag (e){ drag_to_refresh.style.display = "block"; drag_to_refresh.style.height = (e.touches[0].pageY - initY) + "px"; console.log(drag_to_refresh.style.height); if(parseInt(drag_to_refresh.style.height)>=100){ // 注意:因?yàn)閔eight得到的值是px為單位,所以用parseInt解析 drag_to_refresh.style.height = "100px"; if(parseInt(drag_to_refresh.style.height)>80){ drag_to_refresh.style.lineHeight = drag_to_refresh.style.height; drag_to_refresh.innerHTML = "松開(kāi)刷新"; } } } function dragEnd (e){ if(parseInt(drag_to_refresh.style.height)>80){ refresh.style.display = "block"; setTimeout(reload,1000); } drag_to_refresh.style.display = "none"; } function reload () { location.reload(); } } </script> </body> </html>
以上所述是小編給大家介紹的移動(dòng)端touch實(shí)現(xiàn)下拉刷新功能,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
Android開(kāi)發(fā)經(jīng)驗(yàn)談:并發(fā)編程(線程與線程池)(推薦)
這篇文章主要介紹了Android開(kāi)發(fā)經(jīng)驗(yàn)談:并發(fā)編程(線程與線程池),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04Retrofit實(shí)現(xiàn)圖文上傳至服務(wù)器
本文主要介紹了Retrofit實(shí)現(xiàn)圖文上傳至服務(wù)器的相關(guān)知識(shí)。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-03-03android 自定義view實(shí)現(xiàn)彩虹進(jìn)度條功能
實(shí)現(xiàn)一個(gè)彩虹色進(jìn)度條功能,不說(shuō)明具體用途大家應(yīng)該能猜到,想找別人造的輪子,但是沒(méi)有合適的,所以決定自己實(shí)現(xiàn)一個(gè),下面小編通過(guò)實(shí)例代碼給大家分享android 自定義view實(shí)現(xiàn)彩虹進(jìn)度條功能,感興趣的朋友一起看看吧2024-06-06Android ViewPager向?qū)ы?yè)面制作方法
這篇文章主要為大家詳細(xì)介紹了Android ViewPager向?qū)ы?yè)面制作方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11Android 獲取服務(wù)器與客戶端時(shí)差的實(shí)例代碼
下面小編就為大家分享一篇Android 獲取服務(wù)器與客戶端時(shí)差的實(shí)例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01Android入門(mén)之LinearLayout、AbsoluteLayout的用法實(shí)例講解
這篇文章主要介紹了Android入門(mén)之LinearLayout、AbsoluteLayout的用法,對(duì)于Android初學(xué)者有很好的參考借鑒價(jià)值,需要的朋友可以參考下2014-08-08Android自定義實(shí)現(xiàn)側(cè)滑菜單效果
這篇文章主要為大家詳細(xì)介紹了Android自定義實(shí)現(xiàn)側(cè)滑菜單效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01Android MPAndroidChart開(kāi)源庫(kù)圖表之折線圖的實(shí)例代碼
這篇文章主要介紹了Android MPAndroidChart開(kāi)源庫(kù)圖表之折線圖的實(shí)例代碼,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05Android中點(diǎn)擊按鈕啟動(dòng)另一個(gè)Activity及Activity之間傳值問(wèn)題
這篇文章主要介紹了Android中點(diǎn)擊按鈕啟動(dòng)另一個(gè)Activity及Activity之間傳值問(wèn)題,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-01-01