UNPKG

@minix-iot/ui

Version:

基于Vue的移动端轻量级UI组件库

127 lines (123 loc) 2.63 kB
import BScroll from 'better-scroll'; import { Namespace } from '../../utils/namespace'; const namespace = Namespace.Create('scroll-view') export default { name: namespace.name, props: { probeType: { type: Number, default: 1, }, click: { type: Boolean, default: true, }, scrollbar: { type: Boolean, default: false, }, scrollX: { type: Boolean, default: false, }, listenScroll: { type: Boolean, default: false, }, data: { type: Array, default: null, }, pullup: { type: Boolean, default: false, }, pulldown: { type: Boolean, default: false, }, beforeScroll: { type: Boolean, default: false, }, refreshDelay: { type: Number, default: 20, }, }, mounted() { setTimeout(() => { this._initScroll(); }, 20); }, methods: { _initScroll() { this.scroll = new BScroll(this.$refs.wrapper, { probeType: this.probeType, click: this.click, scrollbar: this.scrollbar, scrollX: this.scrollX, }); // scroll event if (this.listenScroll) { this.scroll.on('scroll', (pos) => { this.$emit('scroll', pos); }); } // scrollEnd if (this.pullup) { this.scroll.on('scrollEnd', () => { if (this.scroll.y <= this.scroll.maxScrollY + 50) { console.log('pullup'); this.$emit('scrollToEnd'); } }); } // pulldown if (this.pulldown) { this.scroll.on('touchEnd', (pos) => { if (pos.y > 50) { console.log('pulldown'); this.$emit('pulldown'); } }); } // start scroll event if (this.beforeScroll) { this.scroll.on('beforeScrollStart', () => { this.$emit('beforeScroll'); }); } }, disable() { this.scroll && this.scroll.disable(); }, enable() { this.scroll && this.scroll.enable(); }, refresh() { this.scroll && this.scroll.refresh(); }, scrollTo() { this.scroll && this.scroll.scrollTo.apply(this.scroll, arguments); }, scrollToElement() { this.scroll && this.scroll.scrollToElement.apply(this.scroll, arguments); }, }, watch: { // 监听数据变化 data() { setTimeout(() => { this.refresh(); }, this.refreshDelay); }, }, render(){ return ( <div ref="wrapper"> {this.$slots.default} </div> ) } }