1.0.6 • Published 5 years ago

vue-app-scroller v1.0.6

Weekly downloads
6
License
MIT
Repository
github
Last release
5 years ago

vue-app-scroller

根据 scroller.js 和 vue-scroller 改良的滚动插件,优化下拉刷新和上拉加载,优化获取滚动位置内容,可以适配多种类型的滑动效果要求。

使用前提

需要 vue 2.x,

需要支持 vue 组件解析的工程结构。

在线演示

Demo演示示例

安装使用

安装

$ npm install vue-app-scroller -S

使用

import VueAppScroller from 'vue-app-scroller';
// use 以后就会添加一个 vue-app-scroller 组件
Vue.use(VueAppScroller);
<template>
  <div class="demo">
    <nav-bar title="PullAndReach"></nav-bar>
    <div class="scroller-container">
      <vue-app-scroller>
        <div class="scroller-content">
    		<!-- dom -->
    	</div>
      </vue-app-scroller>
    </div>
  </div>
</template>
  • .scroller-container 为滚动区域的外容器 需要限制宽度和高度,并且采用定位的方式做为滚动容器父节点。这里不需要对溢出进行处理,组件会自动处理溢出内容,只需要设置定位和宽高内容即可。
.scroller-container{
  position: absolute;	// 定位元素  relative,fixed
  top:44px;				// 为导航预留高度
  left: 0;
  right: 0;
  bottom: 0;
  width: 100%;
  height: 500px;
}

参数

参数类型默认说明必填
scrollingXBooleanfalse是否横向滚动X 或者 Y
scrollingYBooleanfalse是否纵向滚动X 或者 Y
mousewheelBooleanfalse是否开启鼠标滚动
snappingBoolean,Number,Arrayfalse是否开启网格移动 传 true 默认为 50px
snappingTypeString"default"可选值 'select','default',如果使用 select 会以选择器的模式展示
snappingSelectNumber0snappingType 为 select 模式下当前选中的行或者列
snappingListIndexNumber0多列模式下当前指定的当前列,用于区分当前选择的值。多列模式【选择器模式】必须指定
snappingCompleteFunctionNOOP选择器切换选择后执行的函数,用于得到返回值,使用方式见 参数详细说明需要得到值必填
pagingBooleanfalse是否开启滑动分屏
bouncingBooleantrue是否使用回弹效果
animatingBooleantrue是否使用动画
durationNumber250由 scrollTo 触发的动画持续时间 ms
dataArray,Object,Number[]监听数据,更新滚动视图,如果使用number,建议是累加值*
scrollingCompleteFunctionNOOP每次滚动事件完成后需要执行的方法

参数详细说明

  • snapping : 传参方式为 Array 格式 width,height , 传参方式为 Number 格式,网格宽高同值

  • snappingType: 为 select 模式下,建议行数为奇数行效果最佳。可参考 示例

  • snappingComplete: 接收一个参数 该参数内容为

    snappingComplete(e){
        console.log(e) // {listIndex:0,selectIndex:0}
    }

方法

所有方法都通过引用模式调用

<vue-app-scroller ref="scroller">
</vue-app-scroller>
export default {
	data () {
        return {
          	scroller:null
        }
  	},
    mounted(){
		this.scroller = this.$refs.scroller
    },
    methods:{
        getAttr(){
			let direction = this.scroller.getAttr('scrollDirection');
        }
    }
}
方法名称参数返回值说明
refresh当数据更新滚动视图无法更新时候,手动刷新
stopScroll主动停止当前动画和滚动效果。
scrollTox, y, animatex: 为滚动到的横向位置,y: 为滚动到的纵向位置,animate:是否需要使用动画
publishx, y, animate同上 该方法 会实时获取滚动位置,scrollTo 会在滚动完成后 更新滚动位置。
getAttrname多种获取当前滚动的一些重要属性 参考下表
setAttrkey,value设置当前滚动的一些重要属性
可操作属性表
可获取的属性名称说明可设置可读取
scrollDirection'top','right','left','bottom' ,返回当前滑动的方向🌚🌝
enableScrollXtrue,false 横向滚动🌝🌝
enableScrollYtrue,false 纵向滚动🌝🌝
minWidthScrollXnumber 返回当前最小横向滚动距离🌚🌝
minHeightScrollYnumber 返回当前最小纵向滚动距离🌚🌝
maxWidthScrollXnumber 返回当前最大横向滚动距离🌚🌝
maxHeightScrollYnumber 返回当前最大纵向滚动距离🌚🌝

事件

事件名称类型说明传参参数类型返回
onScrollFunction监听页面滚动处理函数eObject{x:0,y:0}
onPullRefreshFunction监听下拉刷新处理函数doneFunction更新完毕 done()
onReachBottomFunction监听上拉加载处理函数eBoolean{hasMore:true/fase}

事件函数使用

为了减少参数传递,对事件采用绑定函数的方式进行使用。

<vue-app-scroller
  :scrollingY="true"  
  :onPullRefresh="refresh"
  :onReachBottom ="loadingMore"
  :onScroll ="scroll"
  :data="items">
</vue-app-scroller>
  • 使用一个刷新标志位置 isRefresh 来保证每次只有一个刷新函数在运行,避免多次重复的下拉刷新

  • 上拉加载会自动判断当前是否还能继续加载。

export default {
  data () {
    return {
      isRefresh:false,
      x:0,
      y:0,
      pageNum:1,
      items: []
    }
  },
  methods: {
    // 滚动事件监听
    scroll(e){
      this.x = e.x
      this.y = e.y
    },
    // 下拉事件监听
    refresh(done) {
      if(!this.isRefresh){
        this.isRefresh = true			  // 阻止重复操作
        let items = []
        for (let i = 1; i <= 20; i++) {
          items.push(i + 'my-data')
        }
        setTimeout(() => {
          this.items = items      // 重置数据
          this.pageNum = 1        // 重置分页
          this.isRefresh = false  // 重置刷新状态
          done()                  // 关闭刷新状态
        }, 1500)
      }
    },
    // 触底事件监听 会自动判断还有无更多数据
    loadingMore(e) {
      let items = []
      for (let i = 0; i < 20; i++) {
        items.push(i + 'my-data')
      }
      setTimeout(() => {
        this.items = this.items.concat(items)
        this.pageNum = this.pageNum + 1
      }, 1500)
    },
  }
}

其他

在 npm 包中的 dist 目录下有打包和压缩过后的 vue-app-scroller.min.js 可供使用。

自定义样式和自定义图标,暂未开发….

1.0.6

5 years ago

1.0.5

5 years ago

1.0.4

5 years ago

1.0.3

5 years ago

1.0.2

5 years ago

1.0.1

5 years ago

1.0.0

5 years ago