zoukankan      html  css  js  c++  java
  • 移动端滚动加载

    在做移动端加载更多的时候,需要了解三个属性

    scrollTop

      当前元素距离顶部的距离,换句话说就是元素滚出视窗到顶部的距离

      document.documentElement.scrollTop

    clientHeight

      可视区域高度

      document.body.clientHeight

    scrollHeight

      整个body的高度

      document.documentElement.scrollHeight

    也就是当

    scrollTop+clientHeight >= scrollHeight 那么底部进入可视区域,即可加载更多

    我们封装一个分页方法

    首页先约定API接口参数

      start 是开始记录数据,默认为0, 

      count 是记录条数,默认20

    返回参数

      total

    首先我们封装一个分页

    class PagingModel {
    
      constructor(start = 0, count = 20) {
        this.start = start 
        this.count = count
        this.data = []
      }
    }
    
    export default PagingModel

    加载更多,毫无疑问需要一个setMoreData方法

    class PagingModel {
    
      constructor(start = 0, count = 20) {
        this.start = start 
        this.count = count
        this.data = []
      }
    
      setMoreData(newData) {
        if (!newData)  return
        // 如果有数据,那么修改start和data数据
        this.start = this.start + this.count
        this.data.concat(newData)
      }
    
      getStart(){
        return this.start
      }
      getCount() {
        return this.count
      }
    
      init() {
        this.start = 0
        this.data = []
      }
    }

    我们添加了3个方法一个是获得当前start,一个是获得count,最后一个初始化。

    我们在完善下,无数据或者是否还有更多数据的情况

    class PagingModel {
    
      constructor(start = 0, count = 20) {
        this.start = start 
        this.count = count
        this.data = []
        this.empty = false
        this.ending = false
      }
    
      setMoreData(newData) {
        if (newData.length === 0) {
          this.ending = true // 无更多数据
          if (this.data.length === 0) {
            this.empty = true // 没有数据
          }
        }
        // 如果有数据,那么修改start和data数据
        this.start = this.start + this.count
        this.data.concat(newData)
      }
    
      getEnding() {
        return this.ending
      }
    
      getEmpty() {
        return this.empty
      }
    
      getStart(){
        return this.start
      }
      getCount() {
        return this.count
      }
    
      init() {
        this.start = 0
        this.data = []
      }
    }
    
    export default PagingModel

    这时候要考虑用户可能多次加载数据,也就是说服务器还没返回数据的时候,用户多次发送请求,那么我们需要锁机制

      locked() {
        this.lock = true
      }
    
      unLocked() {
        this.lock = false
      }
    
      getLock() {
        return this.lock
      }

    移动端分页封主要考虑以下几点

      数据是否为空

      数据是否还有更多数据

      数据是否多次加载重复请求

      

  • 相关阅读:
    FindWindowEx使用方法
    什么是VSync
    getParameter
    高等数学积分公式大全
    为什么没有好用的Android游戏引擎?
    Best Time to Buy and Sell Stock III
    5.3 适配器模式(4.1)
    在动态网络下实现分布式共享存储
    人类智商一般在多少左右?爱因斯坦的智商是多少?
    海量数据处理面试题集锦
  • 原文地址:https://www.cnblogs.com/sonwrain/p/10683826.html
Copyright © 2011-2022 走看看