144 lines
3.5 KiB
Vue
144 lines
3.5 KiB
Vue
|
|
<template>
|
|||
|
|
<div class="container">
|
|||
|
|
<div class="grid-container">
|
|||
|
|
<div class="grid-item">
|
|||
|
|
<image class="img-front" src="/static/image/collected.png" alt="" />
|
|||
|
|
<image class="img-back" src="/static/image/collected1.png" alt="" />
|
|||
|
|
</div>
|
|||
|
|
<div class="grid-item">
|
|||
|
|
<image class="img-front" src="/static/image/favicon.png" alt=""/>
|
|||
|
|
<image class="img-back" src="/static/image/favicon1.png" alt=""/>
|
|||
|
|
</div>
|
|||
|
|
<div class="grid-item">
|
|||
|
|
<image class="img-front" src="/static/image/freeok.png" alt="" />
|
|||
|
|
<image class="img-back" src="/static/image/freeok1.png" alt="" />
|
|||
|
|
</div>
|
|||
|
|
<div class="grid-item">
|
|||
|
|
<image class="img-front" src="/static/image/freeok.png" alt="" />
|
|||
|
|
<image class="img-back" src="/static/image/freeok1.png" alt="" />
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
</template>
|
|||
|
|
|
|||
|
|
<script>
|
|||
|
|
export default {
|
|||
|
|
data() {
|
|||
|
|
return {
|
|||
|
|
images: [
|
|||
|
|
['/static/image/collected.png'],
|
|||
|
|
['/static/image/collected1.png'],
|
|||
|
|
['/static/image/favicon.png'],
|
|||
|
|
['/static/image/favicon1.png'],
|
|||
|
|
['/static/image/freeok.png'],
|
|||
|
|
['/static/image/freeok1.png'],
|
|||
|
|
['/static/image/fullscreen.png'],
|
|||
|
|
['/static/image/fullscreen1.png']
|
|||
|
|
],
|
|||
|
|
isSecondImage: Array(8).fill(false),
|
|||
|
|
transitionClass: 'fade'
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
mounted() {
|
|||
|
|
setInterval(() => {
|
|||
|
|
this.isSecondImage = this.isSecondImage.map(item => !item);
|
|||
|
|
if (typeof document !== 'undefined') {
|
|||
|
|
const gridItems = document.querySelectorAll('.grid-item');
|
|||
|
|
gridItems.forEach((item) => {
|
|||
|
|
console.log('翻转执行')
|
|||
|
|
const currentRotation = parseInt(item.style.transform.replace('rotateY(', '').replace('deg)', '')) || 0;
|
|||
|
|
item.style.transform = `rotateY(${(currentRotation + 180) % 360}deg)`;
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
}, 3000);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
</script>
|
|||
|
|
|
|||
|
|
<style>
|
|||
|
|
* {
|
|||
|
|
/* 清除默认样式 */
|
|||
|
|
margin: 0;
|
|||
|
|
padding: 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
body {
|
|||
|
|
/* 定义变量 */
|
|||
|
|
--img-width: 180rpx;
|
|||
|
|
--img-height: 100vh;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.container {
|
|||
|
|
/* 设为flex容器 */
|
|||
|
|
display: flex;
|
|||
|
|
/* 设置子元素水平居中 */
|
|||
|
|
justify-content: center;
|
|||
|
|
/* 设置子元素垂直居中 */
|
|||
|
|
align-items: center;
|
|||
|
|
/* 设置容器宽高为整个可视区的宽高 */
|
|||
|
|
width: 100vw;
|
|||
|
|
height: 100vh;
|
|||
|
|
background-color: #eeffff;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.grid-container {
|
|||
|
|
position: relative;
|
|||
|
|
/* 设为grid容器 */
|
|||
|
|
display: grid;
|
|||
|
|
/* 设置为4列,列宽为200px(图片宽度) */
|
|||
|
|
grid-template-columns: repeat(4, var(--img-width));
|
|||
|
|
/* 设为两行,行高为270px(图片高度) */
|
|||
|
|
grid-template-rows: repeat(1, var(--img-height));
|
|||
|
|
/* 设置行列间距为20px */
|
|||
|
|
gap: 10rpx;
|
|||
|
|
|
|||
|
|
/* 设置观测距离 Z=0 平面*/
|
|||
|
|
perspective: 1600px;
|
|||
|
|
/* 设置观测位置 */
|
|||
|
|
perspective-origin: 50% 50%;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.grid-item {
|
|||
|
|
/* 设为相对定位 */
|
|||
|
|
position: relative;
|
|||
|
|
|
|||
|
|
/* 设置过度时间 */
|
|||
|
|
transition: 2s;
|
|||
|
|
/* 应用3D转换 */
|
|||
|
|
transform-style: preserve-3d;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.grid-item:hover {
|
|||
|
|
/* 沿Y轴旋转180° */
|
|||
|
|
transform: rotateY(180deg);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.img-front,
|
|||
|
|
.img-back {
|
|||
|
|
/* 设为绝对定位 */
|
|||
|
|
position: absolute;
|
|||
|
|
/* 距离父元素上边距和左边距均为0 */
|
|||
|
|
top: 0;
|
|||
|
|
left: 0;
|
|||
|
|
/* 图片的默认大小(父盒子的宽高) */
|
|||
|
|
width: 100%;
|
|||
|
|
height: 100%;
|
|||
|
|
|
|||
|
|
border-radius: 6px;
|
|||
|
|
box-shadow: 0 0 6px 1px #666;
|
|||
|
|
|
|||
|
|
/* 设置图片背面不可见 */
|
|||
|
|
backface-visibility: hidden;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.img-front {
|
|||
|
|
/* 提高堆叠顺序 */
|
|||
|
|
z-index: 2;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.img-back {
|
|||
|
|
/* 卡片反面图默认背面朝向观察者 */
|
|||
|
|
transform: rotateY(-180deg);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
</style>
|