mirror of
https://github.com/hi2shark/nazhua.git
synced 2026-01-17 17:50:43 +08:00
🪄 判断服务器数量决定是否才有过渡效果,数量多了会卡顿
This commit is contained in:
parent
786d6c0a87
commit
9d301b9681
112
src/views/components/server-list/server-list-warp.vue
Normal file
112
src/views/components/server-list/server-list-warp.vue
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
<template>
|
||||||
|
<transition-group
|
||||||
|
v-if="showTransition"
|
||||||
|
name="list"
|
||||||
|
tag="div"
|
||||||
|
class="server-list-container"
|
||||||
|
:class="{
|
||||||
|
'server-list--row': showListRow,
|
||||||
|
'server-list--card': showListCard,
|
||||||
|
}"
|
||||||
|
>
|
||||||
|
<slot />
|
||||||
|
</transition-group>
|
||||||
|
<div
|
||||||
|
v-else
|
||||||
|
class="server-list-container"
|
||||||
|
:class="{
|
||||||
|
'server-list--row': showListRow,
|
||||||
|
'server-list--card': showListCard,
|
||||||
|
}"
|
||||||
|
>
|
||||||
|
<slot />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
/**
|
||||||
|
* 服务器列表
|
||||||
|
*/
|
||||||
|
|
||||||
|
defineProps({
|
||||||
|
showTransition: {
|
||||||
|
type: Boolean,
|
||||||
|
default: true,
|
||||||
|
},
|
||||||
|
showListRow: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
showListCard: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.server-list-container.server-list--card {
|
||||||
|
--list-padding: 20px;
|
||||||
|
--list-gap-size: 20px;
|
||||||
|
--list-item-num: 3;
|
||||||
|
--list-item-width: calc(
|
||||||
|
(
|
||||||
|
var(--list-container-width)
|
||||||
|
- (var(--list-padding) * 2)
|
||||||
|
- (
|
||||||
|
var(--list-gap-size)
|
||||||
|
* (var(--list-item-num) - 1)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
/ var(--list-item-num)
|
||||||
|
);
|
||||||
|
position: relative;
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: var(--list-gap-size);
|
||||||
|
padding: 0 var(--list-padding);
|
||||||
|
width: var(--list-container-width);
|
||||||
|
margin: auto;
|
||||||
|
|
||||||
|
// 针对1440px以下的屏幕
|
||||||
|
@media screen and (max-width: 1440px) {
|
||||||
|
--list-gap-size: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 1024px) {
|
||||||
|
--list-item-num: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 680px) {
|
||||||
|
--list-item-num: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.server-list-container.server-list--row {
|
||||||
|
--list-padding: 20px;
|
||||||
|
--list-gap-size: 12px;
|
||||||
|
position: relative;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: var(--list-gap-size);
|
||||||
|
width: var(--list-container-width);
|
||||||
|
margin: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.list-move,
|
||||||
|
.list-enter-active,
|
||||||
|
.list-leave-active {
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
}
|
||||||
|
.list-enter-from {
|
||||||
|
opacity: 0;
|
||||||
|
transform: translateY(-30px);
|
||||||
|
}
|
||||||
|
.list-leave-to {
|
||||||
|
opacity: 0;
|
||||||
|
transform: translateY(30px);
|
||||||
|
}
|
||||||
|
.list-leave-active {
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@ -33,32 +33,28 @@
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<transition-group
|
<server-list-warp
|
||||||
v-if="showListRow"
|
v-if="showListRow"
|
||||||
name="list"
|
:show-transition="showTransition"
|
||||||
tag="div"
|
:show-list-row="showListRow"
|
||||||
class="server-list-container"
|
|
||||||
:class="`server-list--row`"
|
|
||||||
>
|
>
|
||||||
<server-row-item
|
<server-row-item
|
||||||
v-for="item in filterServerList.list"
|
v-for="item in filterServerList.list"
|
||||||
:key="item.ID"
|
:key="item.ID"
|
||||||
:info="item"
|
:info="item"
|
||||||
/>
|
/>
|
||||||
</transition-group>
|
</server-list-warp>
|
||||||
<transition-group
|
<server-list-warp
|
||||||
v-if="showListCard"
|
v-if="showListCard"
|
||||||
name="list"
|
:show-transition="showTransition"
|
||||||
tag="div"
|
:show-list-card="showListCard"
|
||||||
class="server-list-container"
|
|
||||||
:class="`server-list--card`"
|
|
||||||
>
|
>
|
||||||
<server-card-item
|
<server-card-item
|
||||||
v-for="item in filterServerList.list"
|
v-for="item in filterServerList.list"
|
||||||
:key="item.ID"
|
:key="item.ID"
|
||||||
:info="item"
|
:info="item"
|
||||||
/>
|
/>
|
||||||
</transition-group>
|
</server-list-warp>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@ -93,6 +89,7 @@ import validate from '@/utils/validate';
|
|||||||
|
|
||||||
import WorldMap from '@/components/world-map/world-map.vue';
|
import WorldMap from '@/components/world-map/world-map.vue';
|
||||||
import ServerOptionBox from './components/server-list/server-option-box.vue';
|
import ServerOptionBox from './components/server-list/server-option-box.vue';
|
||||||
|
import ServerListWarp from './components/server-list/server-list-warp.vue';
|
||||||
import ServerCardItem from './components/server-list/card/server-list-item.vue';
|
import ServerCardItem from './components/server-list/card/server-list-item.vue';
|
||||||
import ServerRowItem from './components/server-list/row/server-list-item.vue';
|
import ServerRowItem from './components/server-list/row/server-list-item.vue';
|
||||||
|
|
||||||
@ -100,6 +97,14 @@ const store = useStore();
|
|||||||
const worldMapWidth = ref();
|
const worldMapWidth = ref();
|
||||||
const windowWidth = ref(window.innerWidth);
|
const windowWidth = ref(window.innerWidth);
|
||||||
|
|
||||||
|
const showTransition = computed(() => {
|
||||||
|
// 强制开启
|
||||||
|
if (config.nazhua.forceTransition) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
// 服务器数量小于7时,不开启
|
||||||
|
return store.state.serverList.length < 7;
|
||||||
|
});
|
||||||
const showListRow = computed(() => {
|
const showListRow = computed(() => {
|
||||||
if (windowWidth.value > 1024) {
|
if (windowWidth.value > 1024) {
|
||||||
return config.nazhua.listServerItemType === 'row';
|
return config.nazhua.listServerItemType === 'row';
|
||||||
@ -335,69 +340,4 @@ onActivated(() => {
|
|||||||
padding: 0 20px;
|
padding: 0 20px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.server-list-container.server-list--card {
|
|
||||||
--list-padding: 20px;
|
|
||||||
--list-gap-size: 20px;
|
|
||||||
--list-item-num: 3;
|
|
||||||
--list-item-width: calc(
|
|
||||||
(
|
|
||||||
var(--list-container-width)
|
|
||||||
- (var(--list-padding) * 2)
|
|
||||||
- (
|
|
||||||
var(--list-gap-size)
|
|
||||||
* (var(--list-item-num) - 1)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
/ var(--list-item-num)
|
|
||||||
);
|
|
||||||
position: relative;
|
|
||||||
display: flex;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
gap: var(--list-gap-size);
|
|
||||||
padding: 0 var(--list-padding);
|
|
||||||
width: var(--list-container-width);
|
|
||||||
margin: auto;
|
|
||||||
|
|
||||||
// 针对1440px以下的屏幕
|
|
||||||
@media screen and (max-width: 1440px) {
|
|
||||||
--list-gap-size: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media screen and (max-width: 1024px) {
|
|
||||||
--list-item-num: 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media screen and (max-width: 680px) {
|
|
||||||
--list-item-num: 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.server-list-container.server-list--row {
|
|
||||||
--list-padding: 20px;
|
|
||||||
--list-gap-size: 12px;
|
|
||||||
position: relative;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
gap: var(--list-gap-size);
|
|
||||||
width: var(--list-container-width);
|
|
||||||
margin: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.list-move,
|
|
||||||
.list-enter-active,
|
|
||||||
.list-leave-active {
|
|
||||||
transition: all 0.3s ease;
|
|
||||||
}
|
|
||||||
.list-enter-from {
|
|
||||||
opacity: 0;
|
|
||||||
transform: translateY(-30px);
|
|
||||||
}
|
|
||||||
.list-leave-to {
|
|
||||||
opacity: 0;
|
|
||||||
transform: translateY(30px);
|
|
||||||
}
|
|
||||||
.list-leave-active {
|
|
||||||
position: absolute;
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user