scroll.md 7.1 KB
Newer Older
M
init  
miaodian 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
## Scroll

滚动列表,提供了优质的原生滚动体验,便捷的配置项和事件,是一个基于`better-scroll`进行封装的组件。

### 示例

- 基本使用

  通过设置 `data` 属性为一个数组,即可生成能够在容器内优雅滚动的列表。

  ```html
  <div class="scroll-wrapper">
    <cube-scroll :data="items"></cube-scroll>
  </div>
  ```

A
AmyFoxFN 已提交
17 18
- 配置 better-scroll 选项

A
AmyFoxFN 已提交
19
  通过 options 属性可以配置 better-scroll 的选项,包括滚动条、下拉刷新、上拉加载等,具体可查看 better-scroll 的[官方文档](https://ustbhuangyi.github.io/better-scroll/doc/zh-hans/options.html),这里仅对几个常用的配置项进行介绍说明。
A
AmyFoxFN 已提交
20 21

  1)滚动条
M
init  
miaodian 已提交
22 23 24 25

  默认无滚动条,还可设为淡入淡出滚动条或一直显示滚动条。

  ```html
A
AmyFoxFN 已提交
26
  <cube-scroll :data="items" :options="options"></cube-scroll>
M
init  
miaodian 已提交
27 28 29 30 31 32
  ```
  ```javascript
  export default {
    data() {
      return {
        items: [1, 2, 3, 4, 5],
A
AmyFoxFN 已提交
33 34 35 36
        options: {
          scrollbar: {
            fade: false
          }
M
init  
miaodian 已提交
37 38 39 40 41 42
        }
      }
    }
  }
  ```

A
AmyFoxFN 已提交
43
  2)下拉刷新
M
init  
miaodian 已提交
44

A
AmyFoxFN 已提交
45
  默认无下拉刷新功能,可通过配置项`pullDownRefresh`开启`pulling-down`事件派发和下拉动画,你可以监听`pulling-down`事件更新数据。
M
init  
miaodian 已提交
46 47 48 49 50

  ```html
  <cube-scroll
    ref="scroll"
    :data="items"
A
AmyFoxFN 已提交
51 52 53
    :options="options"
    @pulling-down="onPullingDown">
  </cube-scroll>
M
init  
miaodian 已提交
54 55 56 57 58 59
  ```
  ```javascript
  export default {
    data() {
      return {
        items: [1, 2, 3, 4, 5],
A
AmyFoxFN 已提交
60 61 62 63 64 65
        options: {
          pullDownRefresh: {
            threshold: 90,
            stop: 40,
            txt: 'Refresh success'
          }
M
init  
miaodian 已提交
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
        }
      }
    },
    methods: {
      onPullingDown() {
        // 模拟更新数据
        setTimeout(() => {
          if (Math.random() > 0.5) {
            // 如果有新数据
            this.items.unshift('I am new data: ' + +new Date())
          } else {
            // 如果没有新数据
            this.$refs.scroll.forceUpdate()
          }
        }, 1000)
      }
    }
  }
  ```

A
AmyFoxFN 已提交
86
  3)上拉加载
M
init  
miaodian 已提交
87

A
AmyFoxFN 已提交
88
  默认无上拉加载功能,可通过配置项`pullUpLoad`开启`pulling-up`事件派发和上拉动画,你可以监听`pulling-up`事件更新数据。
M
init  
miaodian 已提交
89 90 91 92 93

  ```html
  <cube-scroll
    ref="scroll"
    :data="items"
A
AmyFoxFN 已提交
94
    :options="options"
M
init  
miaodian 已提交
95 96 97 98 99 100 101 102
    @pulling-up="onPullingUp"></cube-scroll>
  ```
  ```javascript
  export default {
    data() {
      return {
        items: [1, 2, 3, 4, 5],
        itemIndex: 5,
A
AmyFoxFN 已提交
103 104 105 106 107 108 109
        options: {
          pullUpLoad: {
            threshold: 0,
            txt: {
              more: 'Load more',
              noMore: 'No more data'
            }
M
init  
miaodian 已提交
110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
          }
        }
      }
    },
    methods: {
      onPullingUp() {
        // 更新数据
        setTimeout(() => {
          if (Math.random() > 0.5) {
            // 如果有新数据
            let newPage = [
              'I am line ' + ++this.itemIndex,
              'I am line ' + ++this.itemIndex,
              'I am line ' + ++this.itemIndex,
              'I am line ' + ++this.itemIndex,
              'I am line ' + ++this.itemIndex
            ]

            this.items = this.items.concat(newPage)
          } else {
            // 如果没有新数据
            this.$refs.scroll.forceUpdate()
          }
        }, 1000)
      }
    }
  }
  ```

- 自定义下拉刷新和上拉加载动画

  如果你不喜欢内置的下载刷新插槽和上拉加载,还可以用[作用域插槽](https://cn.vuejs.org/v2/guide/components.html#作用域插槽)做自定义动画。下面这个示例,就是用作用域插槽对下拉刷新做了自定义动画,而上拉加载则保留了缺省的内置动画。
A
AmyFoxFN 已提交
142

M
init  
miaodian 已提交
143 144 145 146
  ```html
  <cube-scroll
    ref="scroll"
    :data="items"
A
AmyFoxFN 已提交
147
    :options="options"
M
init  
miaodian 已提交
148 149 150 151 152 153 154 155 156 157 158 159 160 161
    @pulling-down="onPullingDown"
    @pulling-up="onPullingUp">
    <template slot="pulldown" slot-scope="props">
      <div
        v-if="props.pullDownRefresh"
        class="cube-pulldown-wrapper"
        :style="props.pullDownStyle">
        <div
          v-if="props.beforePullDown"
          class="before-trigger"
          :style="{paddingTop: props.bubbleY + 'px'}">
          <span :class="{rotate: props.bubbleY > 40}"></span>
        </div>
        <div class="after-trigger" v-else>
U
ustbhuangyi 已提交
162
          <div v-if="props.isPullingDown" class="loading">
M
init  
miaodian 已提交
163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178
            <cube-loading></cube-loading>
          </div>
          <div v-else><span>Refresh success</span></div>
        </div>
      </div>
    </template>
  </cube-scroll>
  ```

  通过作用域插槽提供的作用域参数,你可以根据各个状态的变化来控制动画流程。具体的作用域参数及其含义详见下面的插槽。

### Props 配置

| 参数 | 说明 | 类型 | 可选值 | 默认值 |
| - | - | - | - | - |
| data | 用于列表渲染的数据 | Array | - | [] |
D
dolymood 已提交
179
| options | better-scroll 配置项 | Object | - | {<br>  observeDOM: true,<br>  click: true,<br>  probeType: 1,<br>  scrollbar: false,<br>  pullDownRefresh: false,<br>  pullUpLoad: false<br>} |
M
init  
miaodian 已提交
180 181 182
| direction | 滚动方向 | String | 'vertical', 'horizontal' | 'vertical' |
| listenScroll | 是否派发 scroll 事件 | Boolean | true/false | false |
| listenBeforeScroll | 是否派发 before-scroll-start 事件 | Boolean | true/false | false |
A
AmyFoxFN 已提交
183
| refreshDelay | data属性的数据更新后,scroll 的刷新延时 | Number | - | 20 |
M
init  
miaodian 已提交
184

A
AmyFoxFN 已提交
185
- `scrollbar` 子配置项
M
init  
miaodian 已提交
186 187 188 189 190

| 参数 | 说明 | 类型 | 可选值 | 默认值 |
| - | - | - | - | - |
| fade | 是否淡入淡出 | Boolean | true/false | false |

A
AmyFoxFN 已提交
191
- `pullDownRefresh` 子配置项
M
init  
miaodian 已提交
192 193 194 195 196 197 198

| 参数 | 说明 | 类型 | 可选值 | 默认值 |
| - | - | - | - | - |
| threshold | 下拉刷新动作的下拉距离阈值 | Number | - | 90 |
| stop | 回弹停留的位置 | Number | - | 40 |
| txt | 刷新成功的文案 | String | - | 'Refresh success' |

A
AmyFoxFN 已提交
199
- `pullUpLoad` 子配置项
M
init  
miaodian 已提交
200 201 202 203

| 参数 | 说明 | 类型 | 可选值 | 默认值 |
| - | - | - | - | - |
| threshold | 上拉刷新动作的上拉距离阈值 | Number | - | 0 |
A
AmyFoxFN 已提交
204
| txt | 上拉加载的相关文案 | Object | - | { more: '', noMore: '' } |
M
init  
miaodian 已提交
205 206 207

### 插槽

D
dolymood 已提交
208
| 名字 | 说明 | 作用域参数 |
M
init  
miaodian 已提交
209
| - | - | - |
A
AmyFoxFN 已提交
210
| default | 基于`data`属性渲染的列表 | - |
U
ustbhuangyi 已提交
211
| pulldown | 位于列表上方,会在下拉刷新时显示 | pullDownRefresh: 是否开启了下拉刷新功能 <br> pullDownStyle: 移入移出的样式 <br> beforePullDown: 是否正在做下拉操作 <br> isPullingDown: 是否正在拉取数据 <br> bubbleY: 当前下拉的距离 - 50|
M
init  
miaodian 已提交
212 213 214 215 216 217 218 219 220 221 222
| pullup | 位于列表下方,会在上拉加载时显示 | pullUpLoad: 是否开启了上拉加载功能 <br> isPullUpLoad: 是否正在加载数据 |

### 事件

| 事件名 | 说明 | 参数 |
| - | - | - |
| click | 点击列表项时触发 | item - 该列表项的数据 |
| scroll | 当 listenScroll 为 true 时,根据 probeType 的值决定派发时机 | Object {x, y} - 滚动的实时坐标 |
| before-scroll-start | 当 listenBeforeScroll 属性为 true 时,在滚动开始之前触发 | - |
| pulling-down | 当 pullDownRefresh 属性为 true 时,在下拉超过阈值时触发 | - |
| pulling-up | 当 pullUpLoad 属性为 true 时,在上拉超过阈值时触发 | - |