@minix-iot/ui
Version:
基于Vue的移动端轻量级UI组件库
127 lines (123 loc) • 2.63 kB
JSX
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>
)
}
}