vue移動(dòng)端實(shí)現(xiàn)下拉刷新
看完這篇文章,相信大伙也一樣可以,做出一個(gè)自己的刷新,加載的組件
說(shuō)這個(gè)功能之前,大家要先了解一下,要怎么觸發(fā)滾動(dòng)條事件。

一定要注意,所有滾動(dòng)事件都必須要滿足這個(gè)條件,橫向滾動(dòng)條也一樣,
只要滿足子元素寬度大于父元素寬度就可以了。(下篇文章會(huì)講怎么實(shí)現(xiàn)一個(gè)橫向滾動(dòng)條)
接入正題?。?!
先來(lái)看看怎么剖析這個(gè)下拉刷新。
要用到的移動(dòng)端的三個(gè)事件: touchstart(手指按下),touchmove(手指移動(dòng)),touchend(手指離開(kāi))
下拉刷新也就是(touchstart => touchmove(下移動(dòng)) =>touchend)的一個(gè)過(guò)程
大體思路:
下拉主要與手指觸摸y軸點(diǎn)有關(guān)
1.記錄下手指按下y軸的坐標(biāo)點(diǎn)
2.記錄手指移動(dòng)時(shí),移動(dòng)的距離(注意:要判斷手指是向上移還是向下移,向上移就是滾動(dòng))
3.啟動(dòng)下拉刷新事件
看代碼:
vue中要在methods里面注冊(cè)事件,在綁定到父元素上,這里大家應(yīng)該都是用vue-cli搭建的項(xiàng)目了吧!
沒(méi)有的話,我回頭給個(gè)鏈接給大家,里面有已經(jīng)搭建好的項(xiàng)目結(jié)構(gòu)。包含這個(gè)插件的源碼,demo都在里面1
<template>
<div class="parent">
<div class="child"></div>
</div>
</template>
<script>
export default {
data(){
return {
top: 0,
startY: 0, // 保存 y軸點(diǎn)的位置
touching: false, // 代表當(dāng)前是否處于 下拉刷新行為的開(kāi)關(guān),也就是當(dāng)屬于滾動(dòng)行為時(shí),就要退出該事件機(jī)制
}
},
methods: {
touchStart(e) {
// e代表該事件對(duì)象,e.targetTouches[0].pageY可以拿到手指按下的 y軸點(diǎn)
this.startY = e.targetTouches[0].pageY
// 開(kāi)啟下拉刷新?tīng)顟B(tài)
this.touching = true
},
touchMove(e) {
//這個(gè) touchMove,只要頁(yè)面在動(dòng)都會(huì)發(fā)生的,所以 touching就起作用了
// 如果 touching為false,說(shuō)明這個(gè)正在移動(dòng)的頁(yè)面不是我們想要的下拉刷新,有可能是用戶隨意拉了一下頁(yè)面而已,或者其他
if(!this.touching) return
// 獲取移動(dòng)的距離
let diff = e.targetToc=uches[0].pageY - this.startY
//判斷是向上拉還是向下拉
if(diff >0) {
e.preventDefault()
} else {
return
}
//這個(gè)this.top要對(duì)應(yīng)綁定到該元素的transform: translateY(+top+ 'px')上,不然是無(wú)法拉動(dòng)的
// 因此這里還要對(duì)偏移高度做一下處理,直接設(shè)置diff +(this.state === 2 ? 40 : 0) 太快了,因?yàn)槔》忍?
// 讓diff*0.25這樣子就差不多了
this.top = Math.floor(diff*0.25) + (this.state === 2 ? 40 : 0)
if(this.top >= 40){
this.state = 1 //代表正在拉取
} else {
this.state = 0 // 代表初始轉(zhuǎn)態(tài)
}
},
touchEnd(e) {
this.touching = false
if(this.state === 2) {
this.top = 40
return
}
// 判斷抬起時(shí)的高度,是大于40 就開(kāi)啟刷新
if(this.top >= 40) {
this.refresh()
} else {
this.state = 0
this.top = 0
}
},
refresh() {
this.state = 2
this.top = 40
const self = this
// 這里可以調(diào)用父組件的方法去請(qǐng)求刷新接口
this.$emit('getRefresh', function(self){
//傳個(gè)回調(diào)過(guò)去,請(qǐng)求完數(shù)據(jù)就復(fù)原
self.state = 0
self.top = 0
})
}
}
}
</script>

到這里就完結(jié)了,當(dāng)然現(xiàn)在肯定不能直接用的,要結(jié)合你的實(shí)際業(yè)務(wù)邏輯來(lái)用的,
我把demo放到github上了 :
https://github.com/13725102796/css3-demo/blob/master/src/plugins/scroll/scroll.vue
看不懂的,建議整個(gè)項(xiàng)目拉下拉,跑一下,里面還有檢驗(yàn)的插件,彈窗的等等,都是我在項(xiàng)目中用到,再抽出來(lái)的。
方法: git clone https://github.com/13725102796/css3-demo.git
- vue.js移動(dòng)端app之上拉加載以及下拉刷新實(shí)戰(zhàn)
- vue.js整合vux中的上拉加載下拉刷新實(shí)例教程
- 解決Vue使用mint-ui loadmore實(shí)現(xiàn)上拉加載與下拉刷新出現(xiàn)一個(gè)頁(yè)面使用多個(gè)上拉加載后沖突問(wèn)題
- vue使用mint-ui實(shí)現(xiàn)下拉刷新和無(wú)限滾動(dòng)的示例代碼
- vueScroll實(shí)現(xiàn)移動(dòng)端下拉刷新、上拉加載
- vue插件mescroll.js實(shí)現(xiàn)移動(dòng)端上拉加載和下拉刷新
- vue2.0 移動(dòng)端實(shí)現(xiàn)下拉刷新和上拉加載更多的示例
- vue使用better-scroll實(shí)現(xiàn)下拉刷新、上拉加載
- vue移動(dòng)端下拉刷新和上拉加載的實(shí)現(xiàn)代碼
- vue實(shí)現(xiàn)原生下拉刷新
相關(guān)文章
詳解Vue2.x-directive的學(xué)習(xí)筆記
這篇文章主要介紹了詳解Vue2.x-directive的學(xué)習(xí)筆記,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07
詳解Vue中l(wèi)ocalstorage和sessionstorage的使用
這篇文章主要介紹了詳解Vue中l(wèi)ocalstorage和sessionstorage的使用方法和經(jīng)驗(yàn)心得,有需要的朋友跟著小編參考學(xué)習(xí)下吧。2017-12-12
vue3+vite中使用import.meta.glob的操作代碼
在vue2的時(shí)候,我們一般引入多個(gè)js或者其他文件,一般使用? require.context 來(lái)引入多個(gè)不同的文件,但是vite中是不支持 require的,他推出了一個(gè)功能用import.meta.glob來(lái)引入多個(gè),單個(gè)的文件,下面通過(guò)本文介紹vue3+vite中使用import.meta.glob,需要的朋友可以參考下2022-11-11
vue中使用loadsh的debounce防抖函數(shù)問(wèn)題
這篇文章主要介紹了vue中使用loadsh的debounce防抖函數(shù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
ElementUI之表格toggleRowSelection選中踩坑記錄
這篇文章主要介紹了ElementUI之表格toggleRowSelection選中踩坑記錄,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
Vue中的請(qǐng)求攔截器和響應(yīng)攔截器用法及說(shuō)明
這篇文章主要介紹了Vue中的請(qǐng)求攔截器和響應(yīng)攔截器用法及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05
基于vue cli重構(gòu)多頁(yè)面腳手架過(guò)程詳解
本文分步驟給大家介紹了基于vue cli重構(gòu)多頁(yè)面腳手架過(guò)程,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下2018-01-01

