vue3 实现一个数组项在水平轴上按照奇偶数项分别上下排列
·
组件完整代码:
<template>
<div class="h-full">
<div class="h-full scroll-container">
<div class="flex flex-row mt-[60rem]">
<div v-for="(ele, i) in DataList" :key="'i'+i" class="grid-item flex flex-col items-center">
<div class="grid-top h-[162rem] pt-[21rem]">
<div class="grid-img flex justify-center">
<NuxtImg :src="ele.img" alt="alt" class="object-cover" />
</div>
</div>
<div class="grid-line flex flex-col">
<div class="relative h-[50rem]">
<div class="t-line">
<svg xmlns="http://www.w3.org/2000/svg" width="2rem" height="52rem" viewBox="0 0 2 52" fill="none">
<path d="M1 51L1 1" stroke="#FF4500" stroke-linecap="round" />
</svg>
</div>
</div>
<div class="relative">
<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="2rem" viewBox="0 0 1055 2" fill="none">
<path d="M-91 1H1054" stroke="#0000FF" stroke-linecap="round" />
</svg>
<div class="w-[18rem] h-[18rem] absolute left-[50%] ml-[-9rem] mt-[-9rem]">
<svg xmlns="http://www.w3.org/2000/svg" width="18rem" height="18rem" viewBox="0 0 49 49" fill="none">
<g filter="url(#filter0_di_1963_1519)">
<circle cx="24.5" cy="24.5" r="11.5" fill="#03BBBF" />
<circle cx="24.5" cy="24.5" r="9.58333" stroke="white" stroke-width="3.83333" />
</g>
<defs>
<filter id="filter0_di_1963_1519" x="0.222222" y="0.222222" width="48.5556" height="48.5556" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix" />
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha" />
<feOffset />
<feGaussianBlur stdDeviation="6.38889" />
<feComposite in2="hardAlpha" operator="out" />
<feColorMatrix type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0" />
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_1963_1519" />
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_1963_1519" result="shape" />
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha" />
<feOffset />
<feGaussianBlur stdDeviation="7.53889" />
<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1" />
<feColorMatrix type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0" />
<feBlend mode="normal" in2="shape" result="effect2_innerShadow_1963_1519" />
</filter>
</defs>
</svg>
</div>
</div>
</div>
<div class="grid-bot h-[162rem] flex">
<div>
<div class="b-title">{{ ele.title }}</div>
<div class="b-desc">{{ ele.desc }}</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script lang="ts" setup>
const DataList = ref([
{
title: 'Pic title 1',
desc: 'Pic desc 1',
img: 'https://picsum.photos/400/300?random=1',
},
{
title: 'Pic title 2',
desc: 'Pic desc 2',
img: 'https://picsum.photos/400/300?random=2',
},
{
title: 'Pic title 3',
desc: 'Pic desc 3',
img: 'https://picsum.photos/400/300?random=3',
},
{
title: 'Pic title 4',
desc: 'Pic desc 4',
img: 'https://picsum.photos/400/300?random=4',
},
{
title: 'Pic title 5',
desc: 'Pic desc 5',
img: 'https://picsum.photos/400/300?random=5',
},
])
</script>
<style scoped>
.scroll-container {
background-color: darkseagreen;
/* background-image: url('https://picsum.photos/400/300?random=0'); */
background-size: cover;
background-repeat: no-repeat;
background-position: center;
width: 100%;
height: 100%;
max-width: 100vw; /* 固定为视口宽度,避免内容撑宽页面 */
padding: 80rem 0 96rem 0;
}
.line-wapper {
width: 100%;
height: 2rem;
background-color: #b5b5b5;
}
.grid-item {
text-align: center;
flex: 1;
}
.grid-item:nth-child(2n) {
margin-top: 50rem;
flex-direction: column-reverse;
}
.grid-top {
border-radius: 16rem;
background: linear-gradient(
323deg,
rgba(255, 255, 255, 0.7) -20.1%,
rgba(255, 255, 255, 0.28) 136.24%
);
}
.grid-img {
width: 121rem;
height: 121rem;
}
.grid-img img {
width: 100%;
height: auto;
}
.grid-item:nth-child(2n) .grid-line {
flex-direction: column-reverse;
}
.grid-item:nth-child(2n + 1) .grid-bot {
padding-top: 22rem;
}
.grid-item:nth-child(2n) .grid-bot {
padding-bottom: 22rem;
align-items: flex-end;
}
.b-title {
margin-bottom: 4rem;
@apply text-[#1A1C20] text-[20rem] leading-[140%] tracking-[-0.2rem];
font-family: PoppinsZN-600;
}
.b-desc {
@apply text-[rgba(26,28,32,0.45)] text-[12rem] leading-[130%] tracking-[-0.12rem] opacity-65;
font-family: PoppinsZN-600;
}
.t-line {
position: absolute;
left: 50%; /* 将元素左边缘定位到父容器50%的位置 */
transform: translateX(-50%); /* 向左移动自身宽度的50%,实现水平居中 */
}
</style>
页面效果如下:

更多推荐


所有评论(0)