vue 实现滚动到底部翻页效果(pc端)


Posted in Javascript onJuly 31, 2019

pc端vue 滚动到底部翻页 效果,具体内容如下所示:

html:

<div class="list" ref="scrollTopList">
                <div class="listsmall" v-for="(item,index) of list" :key="index" @click="getDeviceInfo(item.id)">
                  <span class="state" :class="{'state1':item.status==1,'state0':item.status==0,'state2':item.status==2,'state3':item.status==3}"></span>
                  <span class="text textcolor">【{{item.code||item.name}}】</span>
                  <span class="text">{{item.name}}</span>
                </div>
              </div>

js:

先写滚动事件

handleScroll(){
        let scrollTop = this.$refs.scrollTopList.scrollTop, 
        clientHeight = this.$refs.scrollTopList.clientHeight, 
        scrollHeight = this.$refs.scrollTopList.scrollHeight,
        height = 50; //根据项目实际定义
        if(scrollTop +clientHeight >= scrollHeight - height){
          if(this.pageSize > this.total){
            return false
          }else{
            this.pageSize = this.pageSize +10 //显示条数新增
            this.getpageList() //请求列表list 接口方法
          } 
        }else{
          return false
        }
      },

method中写节流函数

throttle(func, wait) {
        let lastTime = null
        let timeout
        return () => {
          let context = this;
          let now = new Date();
          let arg = arguments;
          if (now - lastTime - wait > 0) {
            if (timeout) {
              clearTimeout(timeout)
              timeout = null
            }
            func.apply(context, arg)
            lastTime = now
          } else if (!timeout) {
            timeout = setTimeout(() => {
              func.apply(context, arg)
            }, wait)
          }
        }
      },

mounted中调用

mounted(){
this.$refs.scrollTopList.addEventListener("scroll",this.throttle(this.handleScroll,500),true)
},

//-------------------------------------------------------------------------------------------第二种写法

html:

添加滚动事件

<div class="tablelist-box" @scroll="scrollEvent($event)">
        <div
         class="tablelist"
         :class="{'active':listDevicesDetailIndex==index}"
         v-for="(item,index) of deviceList"
         :key="index"
         v-if="deviceList.length !== 0"
         @click="deviceDetail(item,index)"
        >
         <span class="tablelist-status">
          <i
           :class="{zx:item.status==1,lx:item.status==2, wjh:item.status==0,gj:item.status==3}"
          ></i>
         </span>
         <span class="tablelist-bg">{{item.code != null ?item.code:"/"}}</span>
        </div>
        <div class="list-more" v-show="!deviceListIsFinish">{{deviceTip}}</div>
        <div class="list-more" v-show="deviceListIsFinish">{{deviceTip}}</div>
       </div>

 css:

tablelist-box{
 height: //根据实际项目取
 overflow:auto //必须 不然判断有问题
}

css 定义

js

写入滚动事件

scrollEvent(e) {
   if (e instanceof Event) {
    let el = e.target;
    let scrollTop = el.scrollTop;
    // 获取可视区的高度
    let clientHeight = el.clientHeight;
    // 获取滚动条的总高度
    let scrollHeight = el.scrollHeight;
    let height = 50;
    //到底了
    // console.log(this.deviceListIsLoad, this.deviceListIsFinish);
    // console.log(scrollTop, clientHeight, scrollHeight);
    //是否继续加载且已完成加载
    if (
     scrollTop + clientHeight >= scrollHeight &&
     this.deviceListIsLoad &&
     !this.deviceListIsFinish
    ) {
     // 把距离顶部的距离加上可视区域的高度 等于或者大于滚动条的总高度就是到达底部
     this.deviceListIsLoad = true;
     console.log("到底了");
     setTimeout(() => {
      this._deviceListPage();
     }, 1000);
    }
   }

请求列表的处理

_deviceListPage() {
   let params = {
    pageSize: this.devicePageSize,
    pageNum: this.devicePageNum,
    kw: "", //查询条件(通配查询条件)
    type: this.deviceType, //设备类型(下拉)2.1.6接口获取
    code: this.deviceCode, //设备编号
    areaId: this.deviceareaId, //位置区域
    status: this.deviceStatus, //状态 1:在线(正常),0:未激活,2已离线,3.告警
    imei: "" //imei编号
   };
   deviceListPage(params).then(res => {
    if (res.code == 200) {
     this.devicePageTotal = res.body.total;
     this.devicePageSize = res.body.pageSize;
     this.devicePageNum = res.body.pageNum;
     this.devicePageTotalPages = parseInt(
      (this.devicePageTotal + this.devicePageSize - 1) /
       this.devicePageSize
     );
     if (this.devicePageTotal == 0) {
      // console.log("没有数据");
      //没有数据
      this.deviceListnodata = true;
      this.deviceListIsLoad = false;
      this.deviceListIsFinish = true;
      this.devicePageNum = 1;
      this.deviceTip = "暂无数据";
      return false;
     }
     this.deviceList = this.deviceList.concat(res.body.datas);
     // console.log(this.devicePageNum, this.devicePageTotalPages);
     if (this.devicePageNum == this.devicePageTotalPages) {
      //没有更多
      this.deviceListIsLoad = false;
      this.deviceListIsFinish = true;
      this.devicePageNum = 1;
      this.deviceTip = "没有更多了~";
      // console.log("没有更多了");
     } else {
      // console.log("下一页");
      //下一页
      this.deviceListIsLoad = true;
      this.deviceListIsFinish = false;
      this.devicePageNum++;
      this.deviceTip = "正在加载中~";
     }
     // console.log("deviceList", this.deviceList);
    } else {
     // this.deviceList = [];
     this.deviceListIsLoad = false;
     this.deviceListIsFinish = true;
     this.devicePageNum = 1;
     this.deviceTip = "数据加载失败~";
    }
   });
  },

return中的定义

devicePageSize: 10, //每页显示
   devicePageNum: 1, //当前页
   devicePageTotal: 0, //总条数
   devicePageTotalPages: 0, //总页数
   deviceListIsFinish: false, //是否加载完成
   deviceListIsLoad: false, //是否加载更多
   deviceListnodata: false, //是否有数据
   deviceTip: "",

总结

以上所述是小编给大家介绍的vue 实现滚动到底部翻页效果(pc端),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
js中几种去掉字串左右空格的方法
Dec 25 Javascript
jquery.validate分组验证代码
Mar 17 Javascript
解决js正则匹配换行问题实现代码
Dec 10 Javascript
深入理解JavaScript函数参数(推荐)
Jul 26 Javascript
微信小程序 商城开发(ecshop )简单实例
Apr 07 Javascript
基于JavaScript实现弹幕特效
Aug 27 Javascript
Vue项目中添加锁屏功能实现思路
Jun 29 Javascript
JS实现用特殊符号替换字符串的中间部分区域的实例代码
Jul 24 Javascript
Nuxt配合Node在实际生产中的应用详解
Aug 07 Javascript
VUE实现移动端列表筛选功能
Aug 23 Javascript
JavaScript array常用方法代码实例详解
Sep 02 Javascript
Vue + ts实现轮播插件的示例
Nov 10 Javascript
js实现一个简易计算器
Mar 30 #Javascript
微信小程序iBeacon测距及稳定程序的实现解析
Jul 31 #Javascript
JS获取动态添加元素的方法详解
Jul 31 #Javascript
JS/jQuery实现超简单的Table表格添加,删除行功能示例
Jul 31 #jQuery
详解Vuex下Store的模块化拆分实践
Jul 31 #Javascript
ES6 Iterator接口和for...of循环用法分析
Jul 31 #Javascript
Vuex 模块化使用详解
Jul 31 #Javascript
You might like
php利用header函数实现文件下载时直接提示保存
2009/11/12 PHP
php修改时间格式的代码
2011/05/29 PHP
php面向对象 字段的声明与使用
2012/06/14 PHP
几行代码轻松实现PHP文件打包下载zip
2017/03/01 PHP
Javascript结合css实现网页换肤功能
2009/11/02 Javascript
前端开发的开始---基于面向对象的Ajax类
2010/09/17 Javascript
解析jquery获取父窗口的元素
2013/06/26 Javascript
JS获取鼠标坐标的实例方法
2013/07/18 Javascript
60个很实用的jQuery代码开发技巧收集
2014/12/15 Javascript
jQuery使用之设置元素样式用法实例
2015/01/19 Javascript
Node.js中的流(Stream)介绍
2015/03/30 Javascript
理解Javascript文件动态加载
2016/01/29 Javascript
Bootstrap零基础学习第一课之模板
2016/07/18 Javascript
BOM系列第一篇之定时器setTimeout和setInterval
2016/08/17 Javascript
JavaScript编码风格指南(中文版)
2016/08/26 Javascript
js实现前端分页页码管理
2017/01/06 Javascript
Avalonjs 实现简单购物车功能(实例代码)
2017/02/07 Javascript
深入学习nodejs中的async模块的使用方法
2017/07/12 NodeJs
javaScript之split与join的区别(详解)
2017/11/08 Javascript
bootstrap中selectpicker下拉框使用方法实例
2018/03/22 Javascript
vue 修改 data 数据问题并实时显示的方法
2018/08/27 Javascript
vue路由教程之静态路由
2019/09/03 Javascript
JS性能优化实现方法及优点进行
2020/08/30 Javascript
[04:27]DOTA2官方论坛水友赛集锦
2013/09/16 DOTA
python实现简单爬虫功能的示例
2016/10/24 Python
python实现图片转字符小工具
2019/04/30 Python
pandas计数 value_counts()的使用
2019/06/24 Python
将数据集制作成VOC数据集格式的实例
2020/02/17 Python
荷兰皇家航空公司中国官网:KLM中国
2017/12/13 全球购物
Wallis官网:英国女装零售商
2020/01/21 全球购物
网络工程师的自我评价
2013/10/02 职场文书
数学教师求职信范文
2015/03/20 职场文书
导游词之重庆钓鱼城
2019/09/19 职场文书
Python编写冷笑话生成器
2022/04/20 Python
Spring Boot 使用 Spring-Retry 进行重试框架
2022/04/24 Java/Android
mysql字段为NULL索引是否会失效实例详解
2022/05/30 MySQL