vue 使用betterscroll开发轮播图

核心思想:
slider.vue源码

<template>
	<div class="wrapper" ref="wrapper">
		<div class="content" ref="content">
			<slot></slot>
		</div>
	</div>
</template>

<script>
	import Bscroll from 'better-scroll'
	import {
		addClass
	} from '../common/dom.js'
	export default {
		props: {
			loop: {
				type: Boolean,
				default: true,
			},
			autoPlay: {
				type: Boolean,
				default: true,
			},
			interval: {
				type: Number,
				default: 1000
			}
		},

		data() {
			return {
				scroll: '',
				children: []
			}
		},
		components: {},
		methods: {
			_resetwidth() {
				setTimeout(() => {
					this._setSliderWidth()
					this.init()
				}, 20)
			},
			_setSliderWidth() {
				this.children = this.$refs.content.children;

				let width = 0;
				let sliderWidth = this.$refs.wrapper.clientWidth;
				let child = {}
				for (let i = 0; i < this.children.length; i++) {
					width += sliderWidth;
					child = this.children[i]
					child.style.width = sliderWidth + 'px'
					console.log(child.style.width)
					this.children[i].style.width = sliderWidth

					addClass(child, 'lunboitem')
				}
				if (this.loop) {
					width += 2 * sliderWidth;
				}
				this.$refs.content.style.width = width + 'px';
			},
			init() {
				this.scroll = new Bscroll(this.$refs.wrapper, {
					scrollX: true,
					scrollY: false,
					momentum: false, //关闭或者打开惯性运动的执行
					snap: true, //隔断(翻页)
					snapLoop: this.loop, //无限滚动
					snapThreshold: 0,
					snapSpeed: 400, //滑动的时间

				})
			},

		},

		mounted() {
			setTimeout(() => {
				this._setSliderWidth()
				this.init()
			}, 20)
			window.addEventListener('resize',()=>{
				this._resetwidth()
			})

		},
		created() {},
		watch: {}
	}
</script>

<style scoped lang="scss">
	.wrapper {
		overflow: hidden;

		.content {
			overflow: hidden;

			.lunboitem {
				float: left;
			}


		}
	}
</style>

dom.js源码

export function addClass(el,classname){
	if(hasClass(el,classname)){
		
		return 
	}
	else{
		let newClass = el.className.split(' ')
		newClass.push(classname)
		
	}
}
export function hasClass(el,classname){
	let reg = new RegExp('(^|\\s)'+classname+'($|\\s)')
	
	return reg.test(el.className)
}

使用代码

import Slider from './components/Slider.vue'
components:{
			Slider
			
		}
 <Slider>
	<div class="silderitem" v-for="(item,index) in color" :key='index' :class="item"></div>
   </Slider>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值