Commit 670569df authored by beisir's avatar beisir

feat:头像动画改动

parent 662c1fae
<template> <template>
<div class="avator-swiper"> <div class="avator-swiper">
<div v-if="isLoop" ref="refLeft" :class="{ 'ani-left': isAddClass }" class="avator-swiper_left"> <div v-if="isLoop" class="avator_left avator-swiper_item" :class="{ 'ani-left': isAddClass }">
<cr-image class="avator-swiper_small" :src="leftImgPath" /> <img :src="leftImgPath" />
</div> </div>
<swiper ref="mySwiper" :options="swiperOptions" class="avator-swiper_container"> <swiper ref="mySwiper" :options="swiperOptions" class="avator-swiper_container">
<swiper-slide <swiper-slide
...@@ -10,20 +10,14 @@ ...@@ -10,20 +10,14 @@
:data-src="item" :data-src="item"
:data-name="item" :data-name="item"
class="avator-swiper_item" class="avator-swiper_item"
@set-translate="setTranslate"
> >
<div class="avator-swiper_item"> <div class="avator-swiper_item">
<img :src="item | Img2Thumb" /> <img :src="item | Img2Thumb" />
</div> </div>
</swiper-slide> </swiper-slide>
</swiper> </swiper>
<div <div v-if="isLoop" class="avator_right avator-swiper_item" :class="{ 'ani-right': isAddClass }">
v-if="isLoop" <img :src="rightImgPath" />
ref="refRight"
:class="{ 'ani-right': isAddClass }"
class="avator-swiper_right"
>
<cr-image class="avator-swiper_small" :src="rightImgPath" />
</div> </div>
</div> </div>
</template> </template>
...@@ -53,6 +47,7 @@ export default { ...@@ -53,6 +47,7 @@ export default {
const isLoop = vm.avatorData.length < 9 ? false : true; const isLoop = vm.avatorData.length < 9 ? false : true;
const autoplay = isLoop ? { delay: 5000 } : false; const autoplay = isLoop ? { delay: 5000 } : false;
return { return {
timer: null,
isLoop, isLoop,
isAddClass: false, isAddClass: false,
rightImgPath: '', rightImgPath: '',
...@@ -62,12 +57,15 @@ export default { ...@@ -62,12 +57,15 @@ export default {
initialSlide: 0, initialSlide: 0,
slidesPerView: 9, slidesPerView: 9,
spaceBetween: 4, spaceBetween: 4,
speed: 900, speed: 600,
centeredSlides: isLoop, centeredSlides: true,
watchSlidesProgress: false, watchSlidesProgress: false,
allowTouchMove: false, allowTouchMove: false,
autoplay, autoplay,
on: { on: {
slideChangeTransitionStart: function() {
vm.$store.dispatch('goods_avator_info', { showInfo: false });
},
transitionStart: function() { transitionStart: function() {
const activeIndex = this.activeIndex; const activeIndex = this.activeIndex;
const slideLeft = this.slides.eq(activeIndex - 5); const slideLeft = this.slides.eq(activeIndex - 5);
...@@ -78,10 +76,13 @@ export default { ...@@ -78,10 +76,13 @@ export default {
slideRight.addClass('ani-opt'); slideRight.addClass('ani-opt');
slideLeft.addClass('ani-opt'); slideLeft.addClass('ani-opt');
vm.isAddClass = true; vm.isAddClass = true;
vm.$store.dispatch('goods_avator_info', { showInfo: false }); clearTimeout(vm.timer);
vm.timer = setTimeout(() => {
vm.$store.dispatch('goods_avator_info', { ...vm.avatorItem, showInfo: true });
clearTimeout(vm.timer);
}, 800);
}, },
transitionEnd: function() { transitionEnd: function() {
vm.$store.dispatch('goods_avator_info', { ...vm.avatorItem, showInfo: true });
vm.isAddClass = false; vm.isAddClass = false;
for (let i = 0; i < this.slides.length; i++) { for (let i = 0; i < this.slides.length; i++) {
let slide = this.slides.eq(i); let slide = this.slides.eq(i);
...@@ -98,14 +99,14 @@ export default { ...@@ -98,14 +99,14 @@ export default {
} }
}, },
methods: { methods: {
setTranslate() { // setTranslate() {
const slides = this.swiper.slides; // const slides = this.swiper.slides;
for (let i = 0; i < slides.length; i++) { // for (let i = 0; i < slides.length; i++) {
const slide = slides.eq(i); // const slide = slides.eq(i);
const progress = slides[i].progress; // const progress = slides[i].progress;
slide.css('transform', `scale(${1 - Math.abs(progress) / 17}`); // slide.css('transform', `scale(${1 - Math.abs(progress) / 17}`);
} // }
}, // },
getAvatorItem(ele) { getAvatorItem(ele) {
return { return {
src: ele.data('src'), src: ele.data('src'),
...@@ -119,75 +120,87 @@ export default { ...@@ -119,75 +120,87 @@ export default {
@keyframes bigToSamll { @keyframes bigToSamll {
from { from {
transform: scale(1); transform: scale(1);
opacity: 1;
} }
to { to {
transform: scale(0); transform: scale(0.3);
opacity: 0;
} }
} }
@keyframes samllToBig { @keyframes samllToBig {
from { from {
transform: scale(0); transform: scale(0.3);
opacity: 0;
} }
to { to {
transform: scale(1); transform: scale(1);
opacity: 1;
} }
} }
.ani-left { .ani-left {
transform-origin: center; transform-origin: center;
animation: bigToSamll 1s linear; animation: bigToSamll 0.6s linear;
animation-fill-mode: forwards;
} }
.ani-right { .ani-right {
transform-origin: center; transform-origin: center;
animation: samllToBig 1s linear; animation: samllToBig 0.6s linear;
animation-fill-mode: forwards;
} }
.ani-opt { .ani-opt {
opacity: 0; opacity: 0;
} }
@keyframes scaleTo { .avator_left,
to { .avator_right {
opacity: 1; backface-visibility: hidden;
} perspective: 1000;
position: absolute;
top: 0;
}
.avator_right {
right: 0;
}
.avator_left {
left: 0;
} }
.avator-swiper { .avator-swiper {
position: relative; position: relative;
width: 100%; width: 100%;
margin: 0 auto !important;
&_item { &_item {
transition: transform 0.2s linear;
height: 32px; height: 32px;
padding-top: 2px; display: flex;
align-items: center;
justify-content: center;
// transform: scale(1);
// transition: transform 0 0.2s linear;
img { img {
height: 25px; height: 25px;
width: 25px; width: 25px;
border-radius: 50%; border-radius: 50%;
} }
&.active {
transform: scale(1.2);
}
} }
} }
.avator-swiper_left,
.avator-swiper_right { .swiper-slide {
position: absolute; text-align: center;
width: 18px;
height: 18px; /* Center slide text vertically */
top: 50%; display: -webkit-box;
margin-top: -9px; display: -ms-flexbox;
border-radius: 50%; display: -webkit-flex;
overflow: hidden; display: flex;
img { -webkit-box-pack: center;
width: 100%; -ms-flex-pack: center;
height: 100%; -webkit-justify-content: center;
} justify-content: center;
} -webkit-box-align: center;
.avator-swiper_left { -ms-flex-align: center;
left: 3.5px; -webkit-align-items: center;
align-items: center;
} }
.avator-swiper_right {
right: 3.5px; .swiper-slide-active {
transform: scale(1.2);
transition: transform 0.6s linear;
} }
</style> </style>
...@@ -155,7 +155,6 @@ export default { ...@@ -155,7 +155,6 @@ export default {
position: absolute; position: absolute;
top: 0; top: 0;
right: -2px; right: -2px;
background-color: #000;
z-index: 2; z-index: 2;
} }
.avator-swiper { .avator-swiper {
......
...@@ -122,18 +122,21 @@ export default { ...@@ -122,18 +122,21 @@ export default {
} }
}, },
watch: { watch: {
$route(to) { // $route(to) {
if (to.name !== 'groupBuyList') { // if (to.name !== 'groupBuyList') {
this.setTitleColor(); // this.setTitleColor();
return; // return;
} // }
this.setTitleColor(this.goodsTemp.bgcolor); // this.setTitleColor(this.goodsTemp.bgcolor);
} // }
}, },
created() { created() {
this.showLoops = true; this.showLoops = true;
this.reload = true; this.reload = true;
}, },
beforeDestroy() {
this.setTitleColor();
},
// deactivated() { // deactivated() {
// this.showLoops = false; // this.showLoops = false;
// }, // },
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment