semiCircleStyle ( item, dir ) {
return {
backgroundColor: `rgba(${item.r},${item.g},${item.b})`,
backgroundSize: item.backgroundSize,
backgroundImage: dir === 'left' ? item.imgLeft : item.imgRight,
}
},
rotate ( index, type ) {
const item = flapCardList[ index ];
let dom;
if (type === 'front') {
dom = this.$refs.right[ index ]
} else {
dom = this.$refs.left[ index ]
}
dom.style.transform = `rotateY(${item.rotateDegree}deg)`;
dom.style.backgroundColor = `rgb(${item.r},${item._g},${item.b})`
},
flapCardRotate () {
const frontFlapCard = this.flapCardList[ this.front ];
const backFlapCard = this.flapCardList[ this.back ];
frontFlapCard.rotateDegree += 10;
frontFlapCard._g -= 5;
backFlapCard.rotateDegree -= 10;
if (backFlapCard.rotateDegree < 90) {
backFlapCard._g += 5;
}
if (frontFlapCard.rotateDegree === 90 && backFlapCard.rotateDegree === 90) {
backFlapCard.zIndex += 2;
}
this.rotate (this.front, 'front');
this.rotate (this.back, 'back');
if (frontFlapCard.rotateDegree === 180 && backFlapCard.rotateDegree === 0) {
this.next ();
}
},
next () {
const frontFlapCard = this.flapCardList[ this.front ];
const backFlapCard = this.flapCardList[ this.back ];
frontFlapCard.rotateDegree = 0;
frontFlapCard._g = frontFlapCard.g;
backFlapCard.rotateDegree = 0;
backFlapCard._g = backFlapCard.g;
this.rotate (this.front, 'front');
this.rotate (this.back, 'back');
this.front++;
this.back++;
const len = this.flapCardList.length;
if (this.front >= len) {
this.front = 0
}
if (this.back >= len) {
this.back = 0;
}
//z-index
// 100 -> 96
// 99 ->100
// 98 ->99
// 97 -> 98
this.flapCardList.forEach (( item, index ) => {
item.zIndex = 100 - ( ( index - this.front + len ) % len );
});
this.prepare ();
},
prepare () {
const backFlapCard = this.flapCardList[ this.back ];
backFlapCard.rotateDegree = 180;
backFlapCard._g = backFlapCard.g - 5 * 9;
this.rotate (this.back, 'back');
},
reset () {
this.front = 0;
this.back = 1;
flapCardList.forEach (( item, index ) => {
item.zIndex = 100 - index;
item._g = item.g;
item.rotateDegree = 0;
this.rotate (index, 'left');
this.rotate (index, 'right');
})
},
startFlapCardAnimate () {
this.prepare ();
this.task = setInterval (() => {
this.flapCardRotate ();
}, this.intervalTime)
},
stopFlapAnimate () {
if (this.task) {
clearInterval (this.task);
}
this.reset ()
}