91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

小程序怎么實現下拉刷新

發布時間:2021-03-11 11:21:04 來源:億速云 閱讀:355 作者:小新 欄目:移動開發

這篇文章主要介紹了小程序怎么實現下拉刷新,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

enablePullDownRefresh

enablePullDownRefresh是最容易實現下拉刷新的方法,在json文件中將enablePullDownRefresh設置為true,在Page中監聽onPullDownRefresh事件即可,支持點擊頂部標題欄回到頂部,自定義標題欄時會失效,還可以通過直接調用wx.startPullDownRefresh()觸發下拉刷新事件,產生下拉刷新動畫,處理完下拉刷新中的數據更新后調用wx.stopPullDownRefresh()結束動畫即可。

這種形式的下拉刷新的優點很明顯就是簡單,沒有限制,但是缺點也同樣明顯:

  • 下拉動畫太過簡單,交互不夠優雅且不能自定義下拉動畫

  • 當自定義標題欄時,fixed定位,在Android下標題欄也會被一起下拉

scroll-view

scroll-view是官方的一個滾動視圖組件,使用很簡單,想要設置上拉刷新代碼如下:

<scroll-view class="scroll" scroll-y bindscrolltoupper="refresh">
  <view class="content">content</view>
</scroll-view>

想要利用scroll-view實現上拉刷新,需要注意:

  • 一定要給scroll-view設置固定高度,否則監聽事件不會觸發

  • 設置縱向滾動scroll-y

  • scroll-view內的內容高度一定要比scroll-view高度要高,否則無法產生縱向滾動,就無法觸發監聽事件

scroll-view缺點:

  • 由于iOS有橡皮筋效果,因此最終效果會與Android有一定的差異

  • 剛打開頁面時上拉是無法觸發上拉監聽事件,需要先向下滾動,觸發滾動,然后再上拉滾動才能觸發監聽事件

  • 當有自定義頭部時,scroll-view需要一個高度計算,減去頭部高度

scroll-view優點:

  • 可以自定義加載動畫

  • 代碼相對簡單

  • 相對enablePullDownRefresh,scroll-view對滾動列表控制更加方便:

    • scroll-into-view:滾動到指定元素

    • enable-back-to-top:iOS點擊頂部狀態欄、安卓雙擊標題欄時,滾動條返回頂部,只支持豎向,且當自定義標題欄后就會失效

官方并不推薦使用scroll-view做下拉刷新,官方文檔上有這樣一個tip

小程序怎么實現下拉刷新

自定義下拉刷新

自定義下拉刷新最主要希望解決的問題還是在Android使用enablePullDownRefresh時fixed定位的標題欄或導航欄會被下拉的問題,同時兩端在下拉刷新時的動畫保持一致,其實實現起來并不難,接下來就看看具體實現:
wxml:

<view class="scroll" bindtouchstart="touchStart" bindtouchmove="touchMove" bindtouchend="touchEnd">
  <view class="animation">
    <view class="loading"></view>
    <text class="tip">{{state === 0 ? '下拉刷新' : state === 1? '松開刷新' : '刷新中'}}</text>
  </view>
  <view style="transform: translateY({{translateHeight}}rpx)">
    <slot name="content"></slot>
  </view>
</view>

這個文件定義組件的模版,有一個滾動view包裹,綁定了touch事件,里面包含下拉刷新時的動畫,和一個slot,slot用于插入滾動列表的內容
wxss:

.animation {
  display: flex;
  justify-content: center;
  align-items: center;
  width: 100%;
  height: 150rpx;
  margin-bottom: -150rpx;
  background-color: #fff;
}
.loading {
  width: 30rpx;
  height: 30rpx;
  border:6rpx solid #333333;
  border-bottom: #cccccc 6rpx solid;
  border-radius: 50%;
  animation:load 1.1s infinite linear;
      
}
@keyframes load{ 
  from{
    transform: rotate(0deg);
  }
  to{
    transform: rotate(360deg);
  }
}

.tip {
  margin-left: 10rpx;
  color: #666;
}

樣式文件這沒什么特別的
js:

let lastY = 0 // 上一次滾動的位置
let scale = 750 / wx.getSystemInfoSync().windowWidth // rpx轉化比例
Component({
  options: {
    multipleSlots: true
  },
  data: {
    scrollTop: 0,
    translateHeight: 0, // 平移距離
    state: -1
  },
  properties: {
    // 觸發下拉刷新的距離
    upperDistance: {
      type: Number,
      value: 150
    }
  },
  methods: {
    // 監聽滾動,獲取scrollTop
    onPageScroll (e) {
      this.data.scrollTop = e.scrollTop
    },
    touchStart (e) {
      lastY = e.touches[0].clientY
    },
    touchMove (e) {
      let clientY = e.touches[0].clientY
      let offset = clientY - lastY
      if (this.data.scrollTop > 0 || offset < 0) return
      this.data.translateHeight += offset
      this.data.state = 0
      lastY = e.touches[0].clientY
      if (this.data.translateHeight - this.data.scrollTop * scale > this.data.upperDistance) {
        this.data.state = 1
      }
      this.setData({
        translateHeight: this.data.translateHeight,
        state: this.data.state
      })
    },
    touchEnd (e) {
      if (this.data.translateHeight - this.data.scrollTop * scale > this.data.upperDistance) {
        this.setData({
          translateHeight: 150
        })
        this.triggerEvent('scrolltoupper')
        this.setData({
          state: 2
        })
      } else if (this.data.scrollTop <= 0) {
        this.stopRefresh()
      }
    },
    //  停止刷新
    stopRefresh () {
      this.setData({
        translateHeight: 0,
        state: -1
      }, () => {
        wx.pageScrollTo({
          scrollTop: 0,
          duration: 0
        })
      })
    }
  }
})

這個下拉刷新組件最重要的是控制下拉刷新的時機,代碼體現就是定義了一個upperDistance,下拉刷新的距離來判斷是否執行刷新。手指滑動時,獲取滑動距離,translateHeight累加用于展示,在touchEnd事件中判斷滑動距離是否達到設定值,達到設定值就發送scrolltoupper事件,在父組件中監聽即可,否則停止刷新。

使用:
<header title="下拉刷新" background="#fff"></header>
<refresh-scroll id="refreshScroll" bindscrolltoupper="refresh">
  <view class="item" slot="content" wx:for="{{list}}">{{item}}</view>
</refresh-scroll>
Page({
  data: {
    list: []
  },
  onLoad: function () {
    this.refreshScroll = this.selectComponent('#refreshScroll')
    for (let i = 0; i < 10; i++) {
      this.data.list.push(i)
    }
    this.setData({
      list: this.data.list
    })
  },
  onPageScroll (e) {
    this.refreshScroll.onPageScroll(e)
  },
  onReachBottom () {
    wx.showLoading({
      title: 'onReachBottom'
    })
    setTimeout(() => {
      wx.hideLoading()
    }, 1000)
  },
  refresh: function (e) {
    setTimeout(() => {
      this.refreshScroll.stopRefresh()
    }, 1000)
  }
})

在使用時關鍵是要將頁面中onPageScroll中獲取的值傳遞下去,然后bindscrolltoupper監聽scrolltoupper事件,執行刷新操作然后再調用stopRefresh停止刷新,下來看真機上的測試效果:

iOS:

小程序怎么實現下拉刷新

Android:
小程序怎么實現下拉刷新

在真機測試時,表現都還不錯,當然了,這只是自定義下拉刷新的一個簡單組件例子,如果需要用于到實際項目,可能還需要自己去完善,畢竟不同的人應用的場景不同,這里只是給出了一個思路而已

感謝你能夠認真閱讀完這篇文章,希望小編分享的“小程序怎么實現下拉刷新”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

罗平县| 汨罗市| 杨浦区| 基隆市| 吕梁市| 叙永县| 洞头县| 金秀| 大埔县| 巴中市| 甘孜县| 江门市| 平定县| 永善县| 满洲里市| 隆回县| 贵南县| 江华| 滨海县| 广河县| 霍州市| 黄山市| 武汉市| 六枝特区| 黄大仙区| 甘谷县| 特克斯县| 白银市| 德州市| 准格尔旗| 靖宇县| 铁力市| 精河县| 信宜市| 大安市| 阿克陶县| 江油市| 阜平县| 武威市| 柘城县| 白水县|