Homepage-imsyy/src/components/Links/index.vue

189 lines
3.9 KiB
Vue
Raw Normal View History

2023-01-15 05:22:30 +00:00
<template>
2023-06-19 03:21:37 +00:00
<div v-if="siteLinks[0]" class="links">
2023-01-15 05:22:30 +00:00
<div class="line">
<Icon size="20">
<Link />
</Icon>
<span class="title">网站列表</span>
</div>
<!-- 网站列表 -->
<Swiper
v-if="siteLinks[0]"
:modules="[Pagination, Mousewheel]"
:slides-per-view="1"
:space-between="40"
:pagination="{
el: '.swiper-pagination',
clickable: true,
bulletElement: 'div',
}"
:mousewheel="true"
>
2023-06-19 03:21:37 +00:00
<SwiperSlide v-for="site in siteLinksList" :key="site">
<el-row class="link-all" :gutter="20">
<el-col
v-for="(item, index) in site"
2023-06-19 03:21:37 +00:00
:span="8"
:key="item"
@click="jumpLink(item)"
>
<div
class="item cards"
:style="index < 3 ? 'margin-bottom: 20px' : null"
>
<Icon size="26">
<component :is="siteIcon[item.icon]" />
</Icon>
<span class="name">{{ item.name }}</span>
</div>
</el-col>
</el-row>
</SwiperSlide>
<div class="swiper-pagination" />
</Swiper>
2023-01-15 05:22:30 +00:00
</div>
</template>
<script setup>
2023-06-19 03:21:37 +00:00
import { onMounted, computed } from "vue";
2023-01-15 05:22:30 +00:00
import { Icon } from "@vicons/utils";
// 可前往 https://www.xicons.org 自行挑选并在此处引入
2023-01-15 05:22:30 +00:00
import {
Link,
Blog,
CompactDisc,
Cloud,
Compass,
Book,
2023-03-10 06:59:09 +00:00
Fire,
LaptopCode,
2023-01-15 05:22:30 +00:00
} from "@vicons/fa";
import { mainStore } from "@/store";
import { Swiper, SwiperSlide } from "swiper/vue";
import { Pagination, Mousewheel } from "swiper";
import siteLinks from "@/assets/siteLinks.json";
import "swiper/scss";
import "swiper/scss/pagination";
const store = mainStore();
2023-01-15 05:22:30 +00:00
2023-06-19 03:21:37 +00:00
// 计算网站链接
const siteLinksList = computed(() => {
const result = [];
for (let i = 0; i < siteLinks.length; i += 6) {
const subArr = siteLinks.slice(i, i + 6);
result.push(subArr);
}
return result;
});
// 网站链接图标
const siteIcon = {
Blog,
Cloud,
CompactDisc,
Compass,
Book,
Fire,
LaptopCode,
};
2023-01-15 05:22:30 +00:00
// 链接跳转
const jumpLink = (data) => {
if (data.name === "音乐" && store.musicClick) {
if (typeof $openList === "function") $openList();
} else {
window.open(data.link, "_blank");
}
2023-01-15 05:22:30 +00:00
};
onMounted(() => {
console.log(siteLinks);
});
2023-01-15 05:22:30 +00:00
</script>
<style lang="scss" scoped>
.links {
.line {
margin: 2rem 0.25rem 1rem;
font-size: 1.1rem;
display: flex;
align-items: center;
animation: fade;
-webkit-animation: fade 0.5s;
.title {
margin-left: 8px;
font-size: 1.15rem;
text-shadow: 0 0 5px #00000050;
}
}
.swiper {
left: -10px;
width: calc(100% + 20px);
padding: 5px 10px 0;
z-index: 0;
.swiper-slide {
height: 100%;
}
.swiper-pagination {
position: static;
margin-top: 4px;
:deep(.swiper-pagination-bullet) {
background-color: #fff;
width: 18px;
height: 4px;
border-radius: 4px;
transition: opacity 0.3s;
&:hover {
opacity: 1;
}
}
}
}
2023-01-15 05:22:30 +00:00
.link-all {
2023-06-19 03:21:37 +00:00
height: 220px;
2023-01-15 05:22:30 +00:00
.item {
height: 100px;
width: 100%;
display: flex;
align-items: center;
flex-direction: row;
justify-content: center;
animation: fade;
-webkit-animation: fade 0.5s;
&:hover {
transform: scale(1.02);
background: rgb(0 0 0 / 40%);
transition: 0.3s;
}
&:active {
transform: scale(1);
}
2023-01-15 05:22:30 +00:00
.name {
font-size: 1.1rem;
margin-left: 8px;
}
@media (min-width: 720px) and (max-width: 820px) {
.name {
display: none;
}
}
@media (max-width: 720px) {
height: 80px;
}
@media (max-width: 460px) {
flex-direction: column;
.name {
font-size: 1rem;
margin-left: 0;
margin-top: 8px;
}
}
}
}
}
</style>