Files
cashier_weapp/components/blackmonth-swiper/index.vue
魏啾 3b85017f91 1
2024-04-30 18:27:43 +08:00

155 lines
3.5 KiB
Vue

<template>
<view>
<view class="swiperPanel" @touchstart="startMove" @touchend="endMove">
<view class="swiperItem" v-for="(item, index) in swiperList" :key="index"
:style="{transform: itemStyle[index].transform, zIndex: itemStyle[index].zIndex, opacity: itemStyle[index].opacity}">
<view class="children">
<image class="pic" :src="item.logo"></image>
</view>
</view>
</view>
<!-- <swiper class="swiperItem" circular v-for="(item, index) in swiperList" :key="index"
:style="{transform: itemStyle[index].transform, zIndex: itemStyle[index].zIndex, opacity: itemStyle[index].opacity}">
<swiper-item class="children">
<image class="pic" :src="item.logo"></image>
</swiper-item>
</swiper> -->
</view>
</template>
<script>
export default {
props: {
swiperList: {
type: Array,
default () {
return []
}
},
timersetnteritem: {
type: String,
default: '0'
}
},
data() {
return {
timersetInterval: null,
slideNote: {
x: 0,
y: 0
},
screenWidth: 0,
itemStyle: [
{
transform:''
}
]
};
},
watch: {
timersetnteritem(newVal,oldVal) {
if (newVal == 1) {
clearTimeout(this.timersetInterval);
this.timersetInterval = null;
}
}
},
mounted() {
var macInfo = uni.getSystemInfoSync();
this.screenWidth = macInfo.screenWidth;
// 计算swiper样式
this.swiperList.forEach((item, index) => {
this.itemStyle.push(this.getStyle(index))
})
// this.timersetInterval = setInterval(() => {
// this.endMove()
// }, 2000);
},
methods: {
getStyle(e) {
if (e > this.swiperList.length / 2) {
var right = this.swiperList.length - e
return {
transform: 'scale(' + (1) + ') translate(-' + (right * 20) + '%,0px)',
zIndex: 9999 - right,
opacity: 1
}
} else {
return {
transform: 'scale(' + (1) + ') translate(' + (e * 20) + '%,0px)',
zIndex: 9999 - e,
opacity: 1
}
}
// if (e > this.swiperList.length / 2) {
// var right = this.swiperList.length - e
// return {
// transform: 'scale(' + (1 - right / 10) + ') translate(-' + (right * 9) + '%,0px)',
// zIndex: 9999 - right,
// opacity: 0.8 / right
// }
// } else {
// return {
// transform: 'scale(' + (1 - e / 10) + ') translate(' + (e * 9) + '%,0px)',
// zIndex: 9999 - e,
// opacity: 0.8 / e
// }
// }
},
startMove(e) {
this.slideNote.x = e.changedTouches[0] ? e.changedTouches[0].pageX : 0;
this.slideNote.y = e.changedTouches[0] ? e.changedTouches[0].pageY : 0;
},
endMove(e) {
var newList = JSON.parse(JSON.stringify(this.itemStyle))
// if ((e.changedTouches[0].pageX - this.slideNote.x) < 0) {
// 向左滑动
var last = [newList.pop()]
newList = last.concat(newList)
// } else {
// 向右滑动
// newList.push(newList[0])
// newList.splice(0, 1)
// }
this.itemStyle = newList
}
}
}
</script>
<style lang="scss">
.swiperPanel {
height: 28rpx;
width: 100%;
overflow: hidden;
position: relative;
.swiperItem {
height: 100%;
width: 100%;
position: absolute;
top: 0;
left: 0;
transition: all .5s;
/* 定义一个动画关键帧 */
.children {
height: 100%;
width: 25%;
// margin: 2rpx auto;
/* 应用动画,设置动画时长、循环次数和速度曲线 */
.pic {
height: 100%;
width: 100%;
border-radius: 50%;
// box-shadow: 0 0 10px #333;
}
}
}
}
</style>