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中遭遇级联表达式陷阱
Mar 08 Javascript
禁用页面部分JavaScript方法的具体实现
Jul 31 Javascript
使用jQuery插件创建常规模态窗口登陆效果
Aug 23 Javascript
运用jQuery定时器的原理实现banner图片切换
Oct 22 Javascript
javascript实现判断鼠标的状态
Jul 10 Javascript
浅谈JS原生Ajax,GET和POST
Jun 08 Javascript
jQuery实现的自动加载页面功能示例
Sep 04 Javascript
利用 spin.js 生成等待效果(js 等待效果)
Jun 25 Javascript
Bootstrap 模态框多次显示后台提交多次BUG的解决方法
Dec 26 Javascript
原生JS实现动态加载js文件并在加载成功后执行回调函数的方法
Dec 30 Javascript
vue-cli配置全局sass、less变量的方法
Jun 06 Javascript
vite+vue3.0+ts+element-plus快速搭建项目的实现
Jun 24 Vue.js
深入学习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数据库抽象层 PDO
2011/05/07 PHP
yii框架表单模型使用及以数组形式提交表单数据示例
2014/04/30 PHP
mac下Apache + MySql + PHP搭建网站开发环境
2014/06/02 PHP
PHP 面向对象程序设计(oop)学习笔记(一) - 抽象类、对象接口、instanceof 和契约式编程
2014/06/12 PHP
PHP封装的简单连接MongoDB类示例
2019/02/13 PHP
js两行代码按指定格式输出日期时间
2011/10/21 Javascript
javascript中的onkeyup和onkeydown区别介绍
2013/04/28 Javascript
js重写alert控件(适合学习js的新手朋友)
2014/08/24 Javascript
浅谈javascript 函数内部属性
2015/01/21 Javascript
js实现兼容IE和FF的上下层的移动
2015/05/04 Javascript
对JavaScript客户端应用编程的一些建议
2015/06/24 Javascript
Jquery修改image的src属性,图片不加载问题的解决方法
2016/05/17 Javascript
JavaScript中对象的不同创建方法
2016/08/12 Javascript
Bootstrap 3 按钮标签实例代码
2017/02/21 Javascript
Node.js log4js日志管理详解
2018/07/31 Javascript
js实现按钮开关单机下拉菜单效果
2018/11/22 Javascript
实现Vue的markdown文档可以在线运行的方法示例
2018/12/11 Javascript
了解javascript中变量及函数的提升
2019/05/27 Javascript
JavaScript异步操作的几种常见处理方法实例总结
2020/05/11 Javascript
JS实现前端路由功能示例【原生路由】
2020/05/29 Javascript
python将人民币转换大写的脚本代码
2013/02/10 Python
Python最基本的数据类型以及对元组的介绍
2015/04/14 Python
Python NumPy库安装使用笔记
2015/05/18 Python
详解如何利用Cython为Python代码加速
2018/01/27 Python
教你使用python实现微信每天给女朋友说晚安
2018/03/23 Python
Python logging模块写入中文出现乱码
2020/05/21 Python
pycharm如何设置官方中文(如何汉化)
2020/12/29 Python
中专生自荐信
2013/10/12 职场文书
法人单位授权委托书范文
2014/10/06 职场文书
担保书范文
2015/01/20 职场文书
监察建议书
2015/02/04 职场文书
小学数学教学反思范文
2016/02/16 职场文书
《日月潭》教学反思
2016/02/20 职场文书
800字作文之大雪
2019/12/04 职场文书
聊聊JS ES6中的解构
2021/04/29 Javascript
python实现简易自习室座位预约系统
2021/06/30 Python