您好,登錄后才能下訂單哦!
這篇文章給大家介紹使用vue怎么在移動端實現一個下拉刷新功能,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
下拉主要與手指觸摸y軸點有關
1.記錄下手指按下y軸的坐標點
2.記錄手指移動時,移動的距離(注意:要判斷手指是向上移還是向下移,向上移就是滾動)
3.啟動下拉刷新事件
看代碼:
vue中要在methods里面注冊事件,在綁定到父元素上,這里大家應該都是用vue-cli搭建的項目了吧!
沒有的話,我回頭給個鏈接給大家,里面有已經搭建好的項目結構。包含這個插件的源碼,demo都在里面1
<template> <div class="parent"> <div class="child"></div> </div> </template> <script> export default { data(){ return { top: 0, startY: 0, // 保存 y軸點的位置 touching: false, // 代表當前是否處于 下拉刷新行為的開關,也就是當屬于滾動行為時,就要退出該事件機制 } }, methods: { touchStart(e) { // e代表該事件對象,e.targetTouches[0].pageY可以拿到手指按下的 y軸點 this.startY = e.targetTouches[0].pageY // 開啟下拉刷新狀態 this.touching = true }, touchMove(e) { //這個 touchMove,只要頁面在動都會發生的,所以 touching就起作用了 // 如果 touching為false,說明這個正在移動的頁面不是我們想要的下拉刷新,有可能是用戶隨意拉了一下頁面而已,或者其他 if(!this.touching) return // 獲取移動的距離 let diff = e.targetToc=uches[0].pageY - this.startY //判斷是向上拉還是向下拉 if(diff >0) { e.preventDefault() } else { return } //這個this.top要對應綁定到該元素的transform: translateY(+top+ 'px')上,不然是無法拉動的 // 因此這里還要對偏移高度做一下處理,直接設置diff +(this.state === 2 ? 40 : 0) 太快了,因為拉取幅度太大 // 讓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 // 代表初始轉態 } }, touchEnd(e) { this.touching = false if(this.state === 2) { this.top = 40 return } // 判斷抬起時的高度,是大于40 就開啟刷新 if(this.top >= 40) { this.refresh() } else { this.state = 0 this.top = 0 } }, refresh() { this.state = 2 this.top = 40 const self = this // 這里可以調用父組件的方法去請求刷新接口 this.$emit('getRefresh', function(self){ //傳個回調過去,請求完數據就復原 self.state = 0 self.top = 0 }) } } } </script>
關于使用vue怎么在移動端實現一個下拉刷新功能就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。