vue 的 scroller 使用
一 安装
使用npm 安装npm install vue-scroller -d
二 引入
import VueScroller from "vue-scroller"
Vue.use(VueScroller);
三 使用
   <tab>
         <tab-item @on-item-click="e=>tabChange(0)" v-bind:selected="selectTabIndex=='0'?true:false">未验收</tab-item>
        <tab-item @on-item-click="e=>tabChange(1)" v-bind:selected="selectTabIndex=='1'?true:false">已验收</tab-item>
      </tab>
 <scroller :on-refresh="refresh" :on-infinite="infinite" ref="my_scroller" >
<scroller>
或者下图(中间的是模板)

在methods方法中增加refresh和infinite2个方法。
  methods: {
    /**
     * 下拉刷新
     */
    refresh() {
      console.log("refresh");
      this.pageNumber = 1;
      this.getOrderList(this.selectTabIndex);
    },
    /**
     * 上拉获取
     */
    infinite(done) {
      this.pageNumber++;
      console.log("infinite");
      this.getOrderList(this.selectTabIndex, done);
    },
    /**
     * 左右滑动设置初始值
     */
    setInitParas(){
      this.pageNumber = 1;
      this.setloadingshow();
      this.items=[]
      this.$refs.my_scroller.finishInfinite(false);
    },
 /**
     * 获取台账列表参数信息
     */
    getOrderParams(index) {
      //index为1表示已验货,0表示未验货 2
      let dbconsignee_phone = localStorage.getItem("dbconsignee_phone");
      var searchData = {
        dbordernumber: "", //提货单号
        dbconsignee_phone: dbconsignee_phone, //手机号码
        acceptance_status: index,
        pageSize:5, //一页多少数
        pageNumber: this.pageNumber, //页码
        order: "",
        sort: ""
      };
      return searchData;
    },
    setloadingshow() {
      this.$vux.loading.show({
        text: "加载中"
      });
    },
    /**
     * 获取台账列表信息
     */
    getOrderList(index, done) {
      const that = this;
      this.selectTabIndex = index;
      const searchData = this.getOrderParams(this.selectTabIndex);
      const params = {
        url: "/receiver/bill/order/datalist",
        reqparams: {
          cmdData: JSON.stringify(searchData)
        },
        onSuccess(data) {
          that.$vux.loading.hide();
          const billJson = JSON.parse(data);
          const newOrderItem = that.formatterOrderData(billJson.rows);
          if (newOrderItem.length > 0) {
            that.items = that.items.concat(newOrderItem);
          }
          if(typeof(done)=="function"){
            done();
          }
          that.$refs.my_scroller.finishPullToRefresh();
          if ( that.pageNumber >= billJson.pageCount ||billJson.pageCount == 0 ) {
            that.$refs.my_scroller.finishInfinite(true);
          }
        }
      };
      http.getData(params);
    },
 }
四 使用的坑
- 1 做的功能中左右切换使用的是同一个scroller,当一个数据加载完毕,切换到另外一个,不可以上拉获取数据。 
 在切换tab页的时候调用- this.$refs.my_scroller.finishInfinite(false)
 - finishInfinite函数为scroller实例的方法,当参数为false时,上拉获取数据可以重新调用。当参数为true,上拉获取数据回调函数停止使用,下拉下部不再显示loading,会显示‘’暂无更多数据
- 下拉刷新,刷新完毕,loading动画一直存在不消失。 
 需要手动调用- finishPullToRefresh。停止下拉刷新。
 调用方式:- this.$refs.my_scroller.finishPullToRefresh();
- infinite的回调函数done调用时间 
 将后台获取的数据,复制到vue组件的数据源后,再进行调用done函数。如果在之前调用,会循环调用。如果不调用这个函数,上拉获取数据函数调用不成功。
并附官网API
API
翻译了一部分经常使用的
| Attr. Name | Description | Required | Default Value | 
|---|---|---|---|
| onRefresh | 下拉刷新 | N | - | 
| onInfinite | 上拉获取数据 | N | - | 
| refreshText | pull-to-refresh的提示信息 | N | 下拉刷新 | 
| noDataText | 当全部数据加载完毕提示信息 | N | 没有更多数据 | 
| width | scroller container width | N | 100% | 
| height | scroller container height | N | 100% | 
| snapping | enable snapping mode | N | false | 
| snappingWidth | snapping width | N | 100 (stand for 100px) | 
| snappingHeight | snapping height | N | 100 | 
| refreshLayerColor | text color of pull-to-refreshlayer | N | #AAA | 
| loadingLayerColor | text color of infinite-loadinglayer | N | #AAA | 
| minContentHeight | min content height (px) of scroll-content | N | 0 | 
Scroller vm instance methods:
- resize()resize scroller content (已经废弃)
- triggerPullToRefresh()触发下拉刷新
- finishPullToRefresh()完成下拉刷新.可以手动调用
- finishInfinite(isNoMoreData :Boolean)当参数为false时,上拉获取数据可以重新调用。当参数为true,上拉获取数据回调函数停止使用,下拉下部不再显示loading,会显示‘’暂无更多数据
- scrollTo(x:Integer, y:Integer, animate:Boolean)scroll to a position in scroller content
- scrollBy(x:Integer, y:Integer, animate:Boolean)scroll by a position in scroller content
- getPosition :Objectget current position of scroller content
另:
document.getElementsByClassName(
"_v-content"
)[0].addEventListener("transitionend",function(e){
self.showToTop = self.$refs.itemDetail_scroller.getPosition().top > 300;
})
 
监听变化
上面的方法 兼容不是很好可以重写下面的方法
 mounted() {
    let self = this;
    // debugger
    // document
    //   .getElementsByClassName("_v-content")[0]
    //   .addEventListener("transitionend", function(e) {
    self.$refs.category3_scroller.touchMoveold =
      self.$refs.category3_scroller.touchMove;
    self.$refs.category3_scroller.touchMove = function(t) {
      self.showToTop = self.$refs.category3_scroller.getPosition().top > 300;
      self.$refs.category3_scroller.touchMoveold(t);
    };
    //});
  }
vue 的 scroller 使用的更多相关文章
- Vue Scroller:Vue 下拉刷新及无限加载组件
		Vue Scroller Vue Scroller is a foundational component ofVonic UI. In purpose of smooth scrolling, pu ... 
- 如何优雅的使用vue+vux开发app -03
		如何优雅的使用vue+vux开发app -03 还是一个错误的示范,但是离优雅差的不远了... <!DOCTYPE html> <html> <head> < ... 
- 如何优雅的使用vue+vux开发app -02
		如何优雅的使用vue+vux开发app -02 很明显这又是一个错误的示范,请勿模仿 使用动态组件实现保留状态的路由 <!DOCTYPE html> <html> <he ... 
- 如何优雅的使用vue+vux开发app -01
		如何优雅的使用vue+vux开发app -01 很明显下面是个错误的示范: <!DOCTYPE html> <html> <head> <title>v ... 
- 2018年度 35 个最好用 Vue 开源库
		在本文中,我们将推荐一些非常好用的 Vue 相关的开源项目.无论是开发新手还是经验丰富的老手,我们都喜欢开源软件包.对于开发者来说,如果没有这些开源软件包,很难想象我们的生活会变得多么疲惫不堪,而且靠 ... 
- 35 个最好用的 Vue 开源库
		35 个最好用的 Vue 开源库 Vue.js 是一个非常易用的渐进式 JavaScript 框架,用于构建用户界面. 1.Vue Dark Mode Vue.js 的一个极简主义的深色设计系统.它提 ... 
- 力荐!35 个最好用的 Vue 开源库!
		无论是开发新手还是经验丰富的老手,我们都喜欢开源软件包.对于开发者来说,如果没有这些开源软件包,很难想象我们的生活会变得多么疲惫不堪,而且靠咖啡度日也会成为家常便饭.所幸的是,随着 Vue.js 和 ... 
- Github 上 36 个最实用的 Vue 开源库
		任何一个开发者,都是十分喜欢使用开源软件包的.因为它使开发工作变得更快速.高效.容易.如果没有开源软件包,开发工作将变得疲惫不堪,不断的重复造轮子! 下面整理了 Github 上 36 个实用的 Vu ... 
- 35 个最好用 Vue 开源库
		2018年度 35 个最好用 Vue 开源库 在本文中,我们将推荐一些非常好用的 Vue 相关的开源项目.无论是开发新手还是经验丰富的老手,我们都喜欢开源软件包.对于开发者来说,如果没有这些开源软件包 ... 
随机推荐
- echarts  百度地图 json
			百度ECharts地图Json数据在线下载 最近需要写一个echarts地图统计表,苦于弄不到对应的地图json文件, CSDN 上下载的很多不完整或者不能用,功夫不负苦心人找到了这个. 阿里云地图选 ... 
- idea获取激活码
			访问地址拿到激活码:http://idea.lanyus.com/getkey 
- Storm编程入门API系列之Storm的Topology多个Executors数目控制实现
			前期博客 Storm编程入门API系列之Storm的Topology默认Workers.默认executors和默认tasks数目 Storm编程入门API系列之Storm的Topology多个Wor ... 
- 使用openssl 生成免费证书
			阅读目录 一:什么是openssl? 它的作用是?应用场景是什么? 二:使用openssl生成免费证书 回到顶部 一:什么是openssl? 它的作用是?应用场景是什么? 即百度百科说:openssl ... 
- Javaoo学习数组
- Apache is running a threaded MPM, but your PHP module is not compiled to be threadsafe. you need to recompile php. pre-configuration failed
			手动配置想要组合版本的wamp环境时,在服务器上直接下载的几个安装包怎么都组合安装不成功,纠结很久,终于找到原因.配置apache支持php后apache一直无法成功启动.后来发现php是nts的版本 ... 
- uvm_driver——老司机带带我
			文件:src/comps/uvm_driver.svh类: uvm_driver uvm_driver继承(C++中叫继承)自uvm_component,其中定义了两个Ports:seq_item_p ... 
- FusionCharts 3.2.1 常用用法
			一.XML格式 1.实例化一个FusionCharts 对象 var member_fund_count_pie = new FusionCharts("FusionCharts3.2.1/ ... 
- MyBatis插入数据之后返回插入记录的id
			MyBatis插入数据的时候,返回该记录的id<insert id="insert" keyProperty="id" useGeneratedKeys= ... 
- 限制UITextField输入长度
			如果要限制UITextField输入长度最长不超过kMaxLength,那么需要实现做以下操作: 1.实现UITextFieldDelegate协议: 2.实现textField:shouldChan ... 
