新增加星空背景组件
This commit is contained in:
parent
0034e5eab1
commit
7015eff697
58
src/views/components/starBackground.vue
Normal file
58
src/views/components/starBackground.vue
Normal file
@ -0,0 +1,58 @@
|
||||
<template>
|
||||
<div class="stars">
|
||||
<div class="star" v-for="(item, index) in starsCount" :key="index" ref="star"></div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup name="starBackground">
|
||||
import { getCurrentInstance, onMounted } from 'vue'
|
||||
|
||||
const starsCount = ref(600)
|
||||
const distance = ref(800)
|
||||
const { proxy } = getCurrentInstance()
|
||||
onMounted(() => {
|
||||
initStars()
|
||||
})
|
||||
function initStars() {
|
||||
let starArr = proxy.$refs.star
|
||||
starArr.forEach((item) => {
|
||||
let speed = 0.2 + Math.random() * 1
|
||||
let thisDistance = distance.value + Math.random() * 300
|
||||
item.style.transformOrigin = `0 0 ${thisDistance}px`
|
||||
item.style.transform = `translate3d(0, 0, -${thisDistance}px) rotateY(${Math.random() * 360}deg) rotateX(${Math.random() * -50}deg) scale(${speed}, ${speed})`
|
||||
})
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
@keyframes rotate {
|
||||
0% {
|
||||
transform: perspective(600px) rotateZ(20deg) rotateX(-40deg) rotateY(0);
|
||||
}
|
||||
100% {
|
||||
transform: perspective(600px) rotateZ(20deg) rotateX(-40deg) rotateY(-360deg);
|
||||
}
|
||||
}
|
||||
|
||||
.stars {
|
||||
transform: perspective(500px);
|
||||
transform-style: preserve-3d;
|
||||
// position: absolute;
|
||||
perspective-origin: 50% 100%;
|
||||
left: 50%;
|
||||
animation: rotate 90s infinite linear;
|
||||
bottom: -200px;
|
||||
// 注意要用fixed,不然会超出屏幕
|
||||
position: fixed;
|
||||
}
|
||||
|
||||
.star {
|
||||
width: 2px;
|
||||
height: 2px;
|
||||
background: #f7f7b8;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
backface-visibility: hidden;
|
||||
}
|
||||
</style>
|
||||
Loading…
x
Reference in New Issue
Block a user