vux-scroller实现移动端上拉加载功能过程解析


Posted in Javascript onOctober 08, 2019

本文将讲述vue-cli+vux-scroller实现移动端的上拉加载功能:

纠错声明:网上查阅资料看到很多人都将vux和vuex弄混,在这里我们先解释一下,vuex是vue框架自带的组件,是数据状态管理工具,vux是一款移动端的UI组件库;

vux(官方文档:https://doc.vux.li/zh-CN/)是基于WeUi和vue(2.x)开发的移动端的UI组件库,主要服务于微信页面。基于webpack+vue-loader+vux可以快速开发移动端页面,配合vux-loader方便你在WeUi的基础上定制需要的样式。vux-loader保证了组件按需使用,因此不用担心最终打包了整个vux的组件库代码。vux并不完全依赖于WeUi,vux在WeUi的基础上扩展了多个常用组件,但是尽量保持整体UI样式接近WeUi的设计规范。

首先我们需要安装vux的依赖包,命令如下:

npm install vux --save 

官方文档声明了vux必须配合vux-loader一起使用,所以我们需要在build/webpack.base.conf.js里参照如下代码进行配置:

const vuxLoader = require('vux-loader')
const webpackConfig = originalConfig // 原来的 module.exports 代码赋值给变量 webpackConfig

module.exports = vuxLoader.merge(webpackConfig, {
 plugins: ['vux-ui']
})

vux-scroller实现移动端上拉加载功能过程解析

vux的Scroller组件为我们提供了上拉加载和下拉刷新等功能,虽然官方文档已经声明了不再更新此组件,但是目前的版本基本满足于我们的日常开发,所以还是可以使用的;

我们在组件中使用的时候是需要引入对应组才能进行使用的;

import { Scroller } from 'vux'

HTML视图层代码:

//height是设置滚动区域高度,vux对该组件声明的不够详细,多次调试-170是可以使用,如有更好的算法或者理解欢迎跟博主沟通交流

//on-scroller-bottom 滚动事件 这个事件在滚动的时候会进行多次触发

//scroll-bottom-offst 在底部什么位置触发事件,这里配置的是距离底部200px的地方滑动就可以触发

//ref 给scroller组件添加ref方便操作DOM,这是个小技巧,后面会用到
 <scroller height="-170" lock-x @on-scroll-bottom="onScrollBottom" :scroll-bottom-offst="200" ref="scrollerBottom">

//scroller标签内部必须包裹一层div,小技巧,不然会出现滑不到底部的问题

// 这个div的高度必须要高于底部滚动区域的高度,不然滚动不了
 
<div>



<p>滚动内容区域</p>

 </div> 





//这个div是展示提示信息的

  <div>


<div id="title" style="width:100%;text-align:center;height:30px;ling-height:30px;margin-top:20px;">上拉加载更多</div>


</div>
 </scroller>

js数据逻辑层代码:

// 上拉加载滑动的方法
  onScrollBottom () {

//onFetching是个状态变量,默认值设为false来进行控制触发事件及更改提示信息
   if (this.onFetching) {
   } else {


//默认值onFetching为false,所以提示信息首先就是加载中,我们这里用的是原生的DOM操作方法
    document.getElementById("title").innerHTML="加载中...";


 //onFetching赋值为true,下次触发的时候会触发onFetching为true的情况
    this.onFetching = true;
    setTimeout(() => {



 //此处的pageNum是当前页码,默认为1,每滑动一次都this.pageNum++然后传入参数调用接口
      this.pageNum+=1;
      this.$nextTick(() => {
      this.$refs.scrollerBottom.reset()
     })




//后台请求接口
      this.$http({
       url:"traderecords/getPersonTradDetail",
       method:"get",
       params:{
         pageSize:10,





//动态的给pageNum赋值,保证每次的参数都不一样,后台传过来的数据也不一样
         pageNum:this.pageNum,
         brandId:this.$route.query.brandId,
         date:this.value2
       }
     }).then((res)=>{ 
       console.log(res.data.data.rowMaps);




//如果接口请求成功
       if(res.data.code==200){





//接口请求成功并且返回的数组的长度<10不够一页的时候
        if(res.data.data.rowMaps.length<10){





// end是控制提示信息的,不触发滑动的时候是不展示的,默认值为false
         this.end=true;





//返回的数组长度不够一页的时候提示信息修改为没有更多数据
         document.getElementById("title").innerHTML="没有更多数据了...";
        // 当数组长度小于10时,该方法禁用
         this.$refs.scrollerBottom.disablePullup() ;
        }
        else{





//否则提示信息为加载成功
         document.getElementById("title").innerHTML="加载成功";
        }






//dataList是我声明的空数组,用concat方法把新数组和后台返回的数据进行拼接然后重新赋值给dataList,这个是关键
          this.dataList=this.dataList.concat(res.data.data.rowMaps);
          console.log(this.dataList); 






//加载成之后提示信息改为上拉加载更多
          document.getElementById("title").innerHTML="上拉加载更多";
       }





//再把onFetching的状态值改为false
       this.onFetching = false 
     })
      
    }, 500)
   }
  },

到这里,我们的上拉加载功能就实现了,一般情况下上拉加载是和下拉刷新一起用的,vux都给我们提供了组件,由于项目需要暂时只用到了上拉加载,代码看似很多,其实不是很复杂;

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 获取iframe里页面中元素值的方法
Feb 17 Javascript
JavaScript性能优化之函数节流(throttle)与函数去抖(debounce)
Aug 11 Javascript
JavaScript登录验证基础教程
Nov 01 Javascript
JavaScript程序设计高级算法之动态规划实例分析
Nov 24 Javascript
浅析Vue 生命周期
Jun 21 Javascript
vue插件开发之使用pdf.js实现手机端在线预览pdf文档的方法
Jul 12 Javascript
js中的深浅拷贝问题简析
May 10 Javascript
用webpack4开发小程序的实现方法
Jun 04 Javascript
通过GASP让vue实现动态效果实例代码详解
Nov 24 Javascript
JS中数组实现代码(倒序遍历数组,数组连接字符串)
Dec 29 Javascript
JS highcharts动态柱状图原理及实现
Oct 16 Javascript
JS数组的常用方法整理
Mar 31 Javascript
深入学习Vue nextTick的用法及原理
Oct 08 #Javascript
jQuery 筛选器简单操作示例
Oct 02 #jQuery
jQuery 查找元素操作实例小结
Oct 02 #jQuery
JavaScript 作用域实例分析
Oct 02 #Javascript
JavaScript Dom 绑定事件操作实例详解
Oct 02 #Javascript
JavaScript 面向对象基础简单示例
Oct 02 #Javascript
Nautil 中使用双向数据绑定的实现
Oct 02 #Javascript
You might like
浅析php学习的路线图
2013/07/10 PHP
编写PHP脚本清除WordPress头部冗余代码的方法讲解
2016/03/01 PHP
javascript Ext JS 状态默认存储时间
2009/02/15 Javascript
JavaScript Event事件学习第一章 Event介绍
2010/02/07 Javascript
用最通俗易懂的代码帮助新手理解javascript闭包 推荐
2012/03/01 Javascript
在JavaScript里嵌入大量字符串常量的实现方法
2013/07/07 Javascript
jQuery实现类似滑动门切换效果的层切换
2013/09/23 Javascript
JS获取农历日期具体实例
2013/11/14 Javascript
jquery如何实现锚点链接之间的平滑滚动
2013/12/02 Javascript
JS短路原理的应用示例 精简代码的途径
2013/12/13 Javascript
jQuery中操控hidden、disable等无值属性的方法
2014/01/06 Javascript
Jquery+asp.net后台数据传到前台js进行解析的方法
2014/05/11 Javascript
在JavaScript中使用对数Math.log()方法的教程
2015/06/15 Javascript
jQuery实现图片与文字描述左右滑动自动切换的方法
2015/07/27 Javascript
浅析Bootstrap组件之面板组件
2016/05/04 Javascript
jquery组件WebUploader文件上传用法详解
2020/10/23 Javascript
js时间查询插件使用详解
2017/04/07 Javascript
微信小程序webview实现长按点击识别二维码功能示例
2019/01/24 Javascript
vue 微信扫码登录(自定义样式)
2020/01/06 Javascript
基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件功能
2021/02/23 Vue.js
vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)
2021/03/01 Vue.js
Python中使用logging模块代替print(logging简明指南)
2014/07/09 Python
Python多线程和队列操作实例
2015/06/21 Python
Python方法的延迟加载的示例代码
2017/12/18 Python
python实现基于SVM手写数字识别功能
2020/05/27 Python
Python操作MySQL数据库的方法
2018/06/20 Python
在django中自定义字段Field详解
2019/12/03 Python
PyCharm 无法 import pandas 程序卡住的解决方式
2020/03/09 Python
Python新手学习标准库模块命名
2020/05/29 Python
Pytorch 卷积中的 Input Shape用法
2020/06/29 Python
html5新增的定时器requestAnimationFrame实现进度条功能
2018/12/13 HTML / CSS
东芝官网商城:还原日式美学,打造美好生活
2018/12/27 全球购物
美国尼曼百货官网:Neiman Marcus
2019/09/05 全球购物
英国手工制作的现代与经典的沙发和床:Love Your Home
2020/09/26 全球购物
美术教师岗位职责
2014/03/18 职场文书
2015年全国保险公众宣传日活动方案
2015/05/06 职场文书