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 相关文章推荐
javascript 数组学习资料收集
Apr 11 Javascript
javascript 函数调用的对象和方法
Jul 01 Javascript
检测input每次的输入是否合法遇到汉字输入就有问题
May 23 Javascript
解决jquery操作checkbox火狐下第二次无法勾选问题
Feb 10 Javascript
thinkphp中常用的系统常量和系统变量
Mar 05 Javascript
javascript 事件处理示例分享
Dec 31 Javascript
JavaScript替换当前页面的方法
Apr 03 Javascript
jQuery EasyUI实现右键菜单变灰不可用效果
Sep 24 Javascript
jQuery实现放大镜效果实例代码
Mar 17 Javascript
node中modules.exports与exports导出的区别
Jun 08 Javascript
vue2.0 中使用transition实现动画效果使用心得
Aug 13 Javascript
小程序转发探索示例
Feb 19 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
10条PHP高级技巧[修正版]
2011/08/02 PHP
PHP静态方法和静态属性及常量属性的区别与介绍
2019/03/22 PHP
Laravel监听数据库访问,打印SQL的例子
2019/10/24 PHP
JavaScript 保存数组到Cookie的代码
2010/04/14 Javascript
js验证电话号码与手机支持+86的正则表达式
2014/01/23 Javascript
javascript实现动态改变层大小的方法
2015/05/14 Javascript
Angular Js文件上传之form-data
2015/08/28 Javascript
javascript中eval和with用法实例总结
2015/11/30 Javascript
JavaScript中获取纯正的undefined的方法
2016/03/06 Javascript
Node.js包管理器Yarn的入门介绍与安装
2016/10/17 Javascript
angular分页指令操作
2017/01/09 Javascript
详解Vue 开发模式下跨域问题
2017/06/06 Javascript
详解微信第三方小程序代开发
2017/06/23 Javascript
jQuery使用bind函数实现绑定多个事件的方法
2017/10/11 jQuery
Vue文件配置全局变量的实例
2018/09/06 Javascript
node中IO以及定时器优先级详解
2019/05/10 Javascript
JavaScript 作用域scope简单汇总
2019/10/23 Javascript
微信小程序实现吸顶特效
2020/01/08 Javascript
JS函数参数的传递与同名参数实例分析
2020/03/16 Javascript
Django模板变量如何传递给外部js调用的方法小结
2017/07/24 Python
Python基于matplotlib画箱体图检验异常值操作示例【附xls数据文件下载】
2019/01/07 Python
Python3按一定数据位数格式处理bin文件的方法
2019/01/24 Python
python实现两张图片拼接为一张图片并保存
2019/07/16 Python
Python中关于浮点数的冷知识
2019/09/22 Python
使用django和vue进行数据交互的方法步骤
2019/11/11 Python
基于pytorch 预训练的词向量用法详解
2020/01/06 Python
Django 项目布局方法(值得推荐)
2020/03/22 Python
Python装饰器的应用场景代码总结
2020/04/10 Python
英国汽车零件购物网站:GSF Car Parts
2019/05/23 全球购物
ParcelABC西班牙:包裹运送和快递服务
2019/12/24 全球购物
开朗女孩的自我评价
2014/02/10 职场文书
浪漫婚礼主持词
2014/03/14 职场文书
绩效考核实施方案
2014/03/18 职场文书
党的生日演讲稿
2014/09/10 职场文书
个人遵守党的政治纪律情况对照检查材料思想汇报
2014/09/25 职场文书
详解Redis在SpringBoot工程中的综合应用
2021/10/16 Redis