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 相关文章推荐
js 立即调用的函数表达式如何写
Jan 12 Javascript
兼容Firefox的Javascript XSLT 处理XML文件
Dec 31 Javascript
js实现支持手机滑动切换的轮播图片效果实例
Apr 29 Javascript
JavaScript里实用的原生API汇总
May 14 Javascript
详解vue 配合vue-resource调用接口获取数据
Jun 22 Javascript
浅谈webpack 构建性能优化策略小结
Jun 13 Javascript
ios设备中angularjs无法改变页面title的解决方法
Sep 13 Javascript
vue.js自定义组件directives的实例代码
Nov 09 Javascript
vue给对象动态添加属性和值的实例
Sep 09 Javascript
CountUp.js数字滚动插件使用方法详解
Oct 17 Javascript
Vue实现仿iPhone悬浮球的示例代码
Mar 13 Javascript
javascript设计模式 ? 单例模式原理与应用实例分析
Apr 09 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数组函数序列之array_key_exists() - 查找数组键名是否存在
2011/10/29 PHP
php之static静态属性与静态方法实例分析
2015/07/30 PHP
jquery 操作表格实现代码(多种操作打包)
2011/03/20 Javascript
基于jquery的DIV随滚动条滚动而滚动的代码
2012/07/20 Javascript
使用JS获取当前地理位置方法汇总
2014/12/18 Javascript
JavaScript学习心得之概述
2015/01/20 Javascript
js实现宇宙星空背景效果的方法
2015/03/03 Javascript
js中不同的height, top的区别对比
2015/09/24 Javascript
jQuery插件实现文字无缝向上滚动效果代码
2016/02/25 Javascript
JS 拼凑字符串的简单实例
2016/09/02 Javascript
微信小程序 两种为对象属性赋值的方式详解
2017/02/23 Javascript
js中el表达式的使用和非空判断方法
2018/03/28 Javascript
关于vue-router的那些事儿
2018/05/23 Javascript
vscode中vue-cli项目es-lint的配置方法
2018/07/30 Javascript
layui结合form,table的全选、反选v1.0示例讲解
2018/08/15 Javascript
JS大坑之19位数的Number型精度丢失问题详解
2019/04/22 Javascript
[01:01]青春无憾,一战成名——DOTA2全国高校联赛开启
2018/02/25 DOTA
Python匹配中文的正则表达式
2016/05/11 Python
Python3网络爬虫之使用User Agent和代理IP隐藏身份
2017/11/23 Python
python 实现矩阵按对角线打印
2019/11/29 Python
python列表的逆序遍历实现
2020/04/20 Python
html5+svg学习指南之SVG基础知识
2014/12/17 HTML / CSS
英国安全产品购物网站:The Safe Shop
2017/03/20 全球购物
美国台面电器和厨具品牌:KitchenAid
2019/04/12 全球购物
《黄山奇石》教学反思
2014/04/19 职场文书
英语教研活动总结
2014/07/02 职场文书
应届本科毕业生求职信
2014/07/23 职场文书
领导干部对照检查材料
2014/08/24 职场文书
英语课前三分钟演讲稿(6篇)
2014/09/13 职场文书
领导干部群众路线教育实践活动剖析材料
2014/10/10 职场文书
幼儿园见习报告范文
2014/10/30 职场文书
六年级学生期末评语
2014/12/26 职场文书
2015年法律事务部工作总结
2015/07/27 职场文书
干货:企业内部人才推荐奖励方案!
2019/07/09 职场文书
用javascript制作qq注册动态页面
2021/04/14 Javascript
Nginx速查手册及常见问题
2022/04/07 Servers