UNPKG

vue-concise-slider

Version:

vue-slider,A simple sliding component,has easy configuration,support self-adaption / fullscreen / button / page,and is compatible with mobile and PC terminal

128 lines (123 loc) 3.96 kB
import sliderNest from './sliderNest.js' export default { props: { options: { type: Object, // 对象或数组且一定会从一个工厂函数返回默认值 default: function() { return {} } } }, name: 'sliderBasic', data() { return { data: {}, config: { slidesToScroll: this.options.slidesToScroll || 1, effect: this.options.effect || 'slide', direction: this.options.direction || 'horizontal', transitionEnding: false, itemTransitionEnding: false, animation: false, slidesPerView: this.options.slidesPerView || 0, $parent: this.judgeParentSlider(this), nested: this.options.nested === undefined ? true : this.options.nested } } }, methods: { judgeParentSlider(that) { if (that.$parent && that.$parent.$vnode && that.$parent.$options._componentTag === 'slider') { return that.$parent } else if (that.$parent && that.$parent.$vnode === undefined) { return false } else { return this.judgeParentSlider(that.$parent) } }, swipeMove(e) { if (this.config.tracking && this.config.effect === 'slide') { if (this.config.direction === 'vertical') { // 处理嵌套滚动 this.data.posheight = -this.currentHeight + this.data.end.y - this.data.start.y } else { this.data.poswidth = -this.currentWidth + this.data.end.x - this.data.start.x } } if (this.config.tracking && this.config.effect === 'nest') { sliderNest.methods.swipeMove.call(this, e) } }, pre() { let $parent = this.config.$parent let slidesToScroll = this.config.slidesToScroll let sliderLength = this.config.sliderLength // 单张情况下 if (sliderLength <= 1) { return this.slide(0) } if (this.data.currentPage >= 1 && this.data.currentPage - slidesToScroll >= 0) { this.data.currentPage -= slidesToScroll || 1 this.slide() return false } if ( this.options.loop && this.data.currentPage - slidesToScroll < 0 && (!$parent || !$parent.config.nested) ) { this.data.currentPage -= slidesToScroll || 1 this.config.transitionEnding = true this.config.itemTransitionEnding = true this.slide() return false } if (this.config.effect === 'nest') { return sliderNest.methods.pre.call(this) } this.slide(0) }, next() { let $parent = this.config.$parent let sliderLength = this.config.sliderLength let slidesToScroll = this.config.slidesToScroll // let slidesPerView = this.uoptions.loop ? 0 : ((sliderLength - this.config.slidesPerView) / slidesToScroll) // 单张情况下 if (sliderLength <= 1) { return this.slide(0) } if ( this.data.currentPage < sliderLength - 1 && this.data.currentPage + slidesToScroll <= sliderLength - 1 ) { this.data.currentPage += this.options.slidesToScroll || 1 this.slide() return false } if ( this.options.loop && this.data.currentPage + slidesToScroll > sliderLength - 1 && (!$parent || !$parent.config.nested) ) { this.data.currentPage += this.options.slidesToScroll || 1 this.config.transitionEnding = true this.config.itemTransitionEnding = true this.slide() return false } if (this.config.effect === 'nest') { return sliderNest.methods.next.call(this) } this.slide() }, slide(pagenum, type) { // 增加垂直滚动判定 if (this.options.direction === 'vertical' && this.config.effect !== 'fade') { this.data.posheight = -this.currentHeight } else { this.data.poswidth = -this.currentWidth } } } }