This commit is contained in:
huangjinming 2023-03-30 11:47:43 +08:00
parent bc19ac46d3
commit 94bef74e15
9 changed files with 184 additions and 62 deletions

14
package-lock.json generated
View File

@ -12,6 +12,7 @@
"@animxyz/vue3": "^0.6.7", "@animxyz/vue3": "^0.6.7",
"@esbuild-plugins/node-globals-polyfill": "^0.2.3", "@esbuild-plugins/node-globals-polyfill": "^0.2.3",
"@metamask/safe-event-emitter": "^2.0.0", "@metamask/safe-event-emitter": "^2.0.0",
"@vue/runtime-dom": "^3.2.47",
"@vueuse/core": "^9.12.0", "@vueuse/core": "^9.12.0",
"@walletconnect/web3-provider": "^1.8.0", "@walletconnect/web3-provider": "^1.8.0",
"ant-design-vue": "^3.2.15", "ant-design-vue": "^3.2.15",
@ -24,7 +25,6 @@
"postcss-px-to-viewport": "^1.1.1", "postcss-px-to-viewport": "^1.1.1",
"process": "^0.11.10", "process": "^0.11.10",
"rollup-plugin-polyfill-node": "^0.12.0", "rollup-plugin-polyfill-node": "^0.12.0",
"scrollama": "^3.2.0",
"stream-browserify": "^3.0.0", "stream-browserify": "^3.0.0",
"swiper": "8", "swiper": "8",
"util": "^0.12.5", "util": "^0.12.5",
@ -32,7 +32,6 @@
"videojs-flash": "^2.2.1", "videojs-flash": "^2.2.1",
"vue": "^3.2.45", "vue": "^3.2.45",
"vue-3d-loader": "^2.1.5", "vue-3d-loader": "^2.1.5",
"vue-demi": "^0.13.11",
"vue-router": "^4.1.6", "vue-router": "^4.1.6",
"web3": "^1.8.2", "web3": "^1.8.2",
"youtube-player": "^5.6.0" "youtube-player": "^5.6.0"
@ -1804,7 +1803,6 @@
"version": "3.2.47", "version": "3.2.47",
"resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.47.tgz", "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.47.tgz",
"integrity": "sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==", "integrity": "sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==",
"license": "MIT",
"dependencies": { "dependencies": {
"@vue/runtime-core": "3.2.47", "@vue/runtime-core": "3.2.47",
"@vue/shared": "3.2.47", "@vue/shared": "3.2.47",
@ -8677,11 +8675,6 @@
"compute-scroll-into-view": "^1.0.20" "compute-scroll-into-view": "^1.0.20"
} }
}, },
"node_modules/scrollama": {
"version": "3.2.0",
"resolved": "https://registry.npmmirror.com/scrollama/-/scrollama-3.2.0.tgz",
"integrity": "sha512-PIPwB1kYBnbw/ezvPBJa5dCN5qEwokfpAkI3BmpZWAwcVID4nDf1qH6WV16A2fQaJmsKx0un5S/zhxN+PQeKDQ=="
},
"node_modules/scrypt-js": { "node_modules/scrypt-js": {
"version": "3.0.1", "version": "3.0.1",
"resolved": "https://registry.npmmirror.com/scrypt-js/-/scrypt-js-3.0.1.tgz", "resolved": "https://registry.npmmirror.com/scrypt-js/-/scrypt-js-3.0.1.tgz",
@ -17524,11 +17517,6 @@
"compute-scroll-into-view": "^1.0.20" "compute-scroll-into-view": "^1.0.20"
} }
}, },
"scrollama": {
"version": "3.2.0",
"resolved": "https://registry.npmmirror.com/scrollama/-/scrollama-3.2.0.tgz",
"integrity": "sha512-PIPwB1kYBnbw/ezvPBJa5dCN5qEwokfpAkI3BmpZWAwcVID4nDf1qH6WV16A2fQaJmsKx0un5S/zhxN+PQeKDQ=="
},
"scrypt-js": { "scrypt-js": {
"version": "3.0.1", "version": "3.0.1",
"resolved": "https://registry.npmmirror.com/scrypt-js/-/scrypt-js-3.0.1.tgz", "resolved": "https://registry.npmmirror.com/scrypt-js/-/scrypt-js-3.0.1.tgz",

View File

@ -14,6 +14,7 @@
"@animxyz/vue3": "^0.6.7", "@animxyz/vue3": "^0.6.7",
"@esbuild-plugins/node-globals-polyfill": "^0.2.3", "@esbuild-plugins/node-globals-polyfill": "^0.2.3",
"@metamask/safe-event-emitter": "^2.0.0", "@metamask/safe-event-emitter": "^2.0.0",
"@vue/runtime-dom": "^3.2.47",
"@vueuse/core": "^9.12.0", "@vueuse/core": "^9.12.0",
"@walletconnect/web3-provider": "^1.8.0", "@walletconnect/web3-provider": "^1.8.0",
"ant-design-vue": "^3.2.15", "ant-design-vue": "^3.2.15",
@ -26,7 +27,6 @@
"postcss-px-to-viewport": "^1.1.1", "postcss-px-to-viewport": "^1.1.1",
"process": "^0.11.10", "process": "^0.11.10",
"rollup-plugin-polyfill-node": "^0.12.0", "rollup-plugin-polyfill-node": "^0.12.0",
"scrollama": "^3.2.0",
"stream-browserify": "^3.0.0", "stream-browserify": "^3.0.0",
"swiper": "8", "swiper": "8",
"util": "^0.12.5", "util": "^0.12.5",
@ -34,7 +34,6 @@
"videojs-flash": "^2.2.1", "videojs-flash": "^2.2.1",
"vue": "^3.2.45", "vue": "^3.2.45",
"vue-3d-loader": "^2.1.5", "vue-3d-loader": "^2.1.5",
"vue-demi": "^0.13.11",
"vue-router": "^4.1.6", "vue-router": "^4.1.6",
"web3": "^1.8.2", "web3": "^1.8.2",
"youtube-player": "^5.6.0" "youtube-player": "^5.6.0"

View File

@ -13,8 +13,12 @@
</div> </div>
<div class="slogan"> <div class="slogan">
<div> <div>
CEBG is the first blockchain-based animation game which consists of <ScrollAnimatedText>
Moba, Battleroyal; funded by more than 7 institutional investors. CEBG is the first blockchain-based animation game which consists of
Moba, Battleroyal; funded by more than 7 institutional
investors.
</ScrollAnimatedText
>
</div> </div>
</div> </div>
<div class="more"> <div class="more">
@ -27,7 +31,9 @@
</div> </div>
</template> </template>
<script setup></script> <script setup>
import ScrollAnimatedText from "../global/ScrollAnimatedText.vue";
</script>
<style lang="scss" scoped> <style lang="scss" scoped>
.whitepaper { .whitepaper {
@ -81,7 +87,7 @@
margin-left: 64px; margin-left: 64px;
padding-bottom: 52px; padding-bottom: 52px;
font-size: 18px; font-size: 18px;
font-family: 'Poppins'; font-family: "Poppins";
font-weight: 400; font-weight: 400;
color: #ffffff; color: #ffffff;
line-height: 26px; line-height: 26px;

View File

@ -0,0 +1,43 @@
<template>
<div class="animated-title">
<transition-group name="bounce" tag="div">
<span v-for="(char, index) in titleChars" :key="index">{{ char }}</span>
</transition-group>
</div>
</template>
<script setup>
import { computed } from 'vue';
const props = defineProps({
title: {
type: String,
default: ''
}
});
const titleChars = computed(() => props.title.split(''));
</script>
<style scoped>
.bounce-enter-active {
animation: bounce-in 0.5s ease;
}
.bounce-leave-active {
animation: bounce-in 0.5s ease reverse;
}
@keyframes bounce-in {
0% {
transform: translateY(100%);
opacity: 0;
}
50% {
transform: translateY(-10%);
}
100% {
transform: translateY(0);
opacity: 1;
}
}
</style>

View File

@ -0,0 +1,57 @@
<template>
<span :style="{ fontSize: fontSize, color: textColor }" ref="text">
<slot></slot>
</span>
</template>
<script setup>
import { defineProps, onMounted, ref } from "vue";
const props = defineProps({
fontSize: {
type: String,
default: "16px",
},
textColor: {
type: String,
default: "",
},
});
const text = ref(null);
const fadeIn = (el) => {
el.style.opacity = 0;
el.style.transform = "translateY(90px)";
const observer = new IntersectionObserver((entries) => {
entries.forEach((entry) => {
if (entry.isIntersecting) {
el.style.transition = "opacity 2s ease, transform 2s ease";
el.style.opacity = 1;
el.style.transform = "translateY(0)";
observer.disconnect();
}
});
}, {});
observer.observe(el);
};
onMounted(() => {
fadeIn(text.value);
});
</script>
<style scoped>
span {
display: inline-block;
font-family: "Poppins";
font-weight: bold;
line-height: 28px;
word-spacing: 2px;
background-clip: text;
color: black;
-webkit-background-clip: text;
}
</style>

View File

@ -6,24 +6,48 @@
</div> </div>
<div class="container"> <div class="container">
<div class="grid"> <div class="grid">
<div class="grid-item-red"> <img src="@/assets/img/home/chip/red-chip-01.png" alt="" /></div> <div class="grid-item-red">
<div class="grid-item-red"> <img src="@/assets/img/home/chip/red-chip-02.png" alt="" /></div> <img src="@/assets/img/home/chip/red-chip-01.png" alt="" />
<div class="grid-item-red"> <img src="@/assets/img/home/chip/red-chip-03.png" alt="" /></div> </div>
<div class="grid-item-red"> <img src="@/assets/img/home/chip/red-chip-04.png" alt="" /></div> <div class="grid-item-red">
<img src="@/assets/img/home/chip/red-chip-02.png" alt="" />
</div>
<div class="grid-item-red">
<img src="@/assets/img/home/chip/red-chip-03.png" alt="" />
</div>
<div class="grid-item-red">
<img src="@/assets/img/home/chip/red-chip-04.png" alt="" />
</div>
</div> </div>
<div class="grid"> <div class="grid">
<div class="grid-item-yellow"> <img src="@/assets/img/home/chip/yellow-chip-01.png" alt="" /></div> <div class="grid-item-yellow">
<div class="grid-item-yellow"> <img src="@/assets/img/home/chip/yellow-chip-02.png" alt="" /></div> <img src="@/assets/img/home/chip/yellow-chip-01.png" alt="" />
<div class="grid-item-yellow"> <img src="@/assets/img/home/chip/yellow-chip-03.png" alt="" /></div> </div>
<div class="grid-item-yellow"> <img src="@/assets/img/home/chip/yellow-chip-04.png" alt="" /></div> <div class="grid-item-yellow">
<img src="@/assets/img/home/chip/yellow-chip-02.png" alt="" />
</div>
<div class="grid-item-yellow">
<img src="@/assets/img/home/chip/yellow-chip-03.png" alt="" />
</div>
<div class="grid-item-yellow">
<img src="@/assets/img/home/chip/yellow-chip-04.png" alt="" />
</div>
</div> </div>
<div class="grid"> <div class="grid">
<div class="grid-item-blue"> <img src="@/assets/img/home/chip/blue-chip-01.png" alt="" /></div> <div class="grid-item-blue">
<div class="grid-item-blue"> <img src="@/assets/img/home/chip/blue-chip-02.png" alt="" /></div> <img src="@/assets/img/home/chip/blue-chip-01.png" alt="" />
<div class="grid-item-blue"> <img src="@/assets/img/home/chip/blue-chip-03.png" alt="" /></div> </div>
<div class="grid-item-blue"> <img src="@/assets/img/home/chip/blue-chip-04.png" alt="" /></div> <div class="grid-item-blue">
<img src="@/assets/img/home/chip/blue-chip-02.png" alt="" />
</div>
<div class="grid-item-blue">
<img src="@/assets/img/home/chip/blue-chip-03.png" alt="" />
</div>
<div class="grid-item-blue">
<img src="@/assets/img/home/chip/blue-chip-04.png" alt="" />
</div>
</div> </div>
</div> </div>
</div> </div>
@ -39,9 +63,7 @@
</div> </div>
</template> </template>
<script setup> <script setup></script>
</script>
<style lang="scss" scoped> <style lang="scss" scoped>
.chip-container { .chip-container {
@ -100,14 +122,20 @@
grid-row-gap: 40px; grid-row-gap: 40px;
width: 370px; width: 370px;
} }
.grid-item-red { .grid-item-red,
height: 200px; .grid-item-yellow,
}
.grid-item-yellow {
height: 200px;
}
.grid-item-blue { .grid-item-blue {
cursor: pointer;
height: 200px; height: 200px;
transition: transform 0.3s; //
position: relative; // 使 z-index
z-index: 1; // z-index
}
.grid-item-red:hover,
.grid-item-yellow:hover,
.grid-item-blue:hover {
transform: translateY(-12px) scale(1.05); // 10px
} }
} }
} }

View File

@ -22,7 +22,9 @@
</div> </div>
<div class="slogan"> <div class="slogan">
<div class="slogan-text"> <div class="slogan-text">
<ScrollAnimatedText>
Come to be COMMENDER! Enjoy 3D CEBG and fight against other players! Come to be COMMENDER! Enjoy 3D CEBG and fight against other players!
</ScrollAnimatedText>
</div> </div>
</div> </div>
@ -48,8 +50,10 @@
<img src="@/assets/img/home/gameplay-bottom-boder.png" alt="" /> <img src="@/assets/img/home/gameplay-bottom-boder.png" alt="" />
</div> </div>
<div class="sloagn"> <div class="sloagn">
<ScrollAnimatedText>
Undefinable pattern, incredible gaming experience and excited NFT in Undefinable pattern, incredible gaming experience and excited NFT in
CEBG! CEBG!
</ScrollAnimatedText>
</div> </div>
<DameplaySwiperCard></DameplaySwiperCard> <DameplaySwiperCard></DameplaySwiperCard>
</div> </div>
@ -63,6 +67,7 @@
<script setup> <script setup>
import { ref, computed, reactive, onMounted } from "vue"; import { ref, computed, reactive, onMounted } from "vue";
import DameplaySwiperCard from "./DameplaySwiperCard.vue"; import DameplaySwiperCard from "./DameplaySwiperCard.vue";
import ScrollAnimatedText from "../global/ScrollAnimatedText.vue";
import { Swiper, SwiperSlide } from "swiper/vue"; import { Swiper, SwiperSlide } from "swiper/vue";
import GalleryBanner from "./GalleryBanner.vue"; import GalleryBanner from "./GalleryBanner.vue";
// swiper // swiper

View File

@ -70,19 +70,20 @@
</div> </div>
<div class="pve-content"> <div class="pve-content">
<div class="slogan"> <div class="slogan">
<span class="title"> <FadeInText class="slogan-title" font-size="24px">
Each battle contains 40 players by matching </span Each battle contains 40 players by matching
><br /> </FadeInText>
<span v-if="!isPveTab" <br />
>A player should expect to face the majority or entirety of <FadeInText v-if="!isPveTab" font-size="16px">
A player should expect to face the majority or entirety of
their opponents in the form of computer-controlled their opponents in the form of computer-controlled
opponents. opponents.
</span> </FadeInText>
<span v-else <FadeInText v-else font-size="16px">
>Stands for Player versus Player. Its a game mode that Stands for Player versus Player. Its a game mode that
revolves around layer-against-player combat - combat between revolves around layer-against-player combat - combat between
actual human players. actual human players.
</span> </FadeInText>
</div> </div>
</div> </div>
</div> </div>
@ -109,6 +110,8 @@
<script setup> <script setup>
import { ref, onMounted, onBeforeUnmount } from "vue"; import { ref, onMounted, onBeforeUnmount } from "vue";
import ScrollAnimatedText from "../global/ScrollAnimatedText.vue";
import FadeInText from "../global/FadeInText.vue";
import Text from "./Text.vue"; import Text from "./Text.vue";
import Moster from "./Moster.vue"; import Moster from "./Moster.vue";
import { gsap } from "gsap"; import { gsap } from "gsap";
@ -147,17 +150,15 @@ function handleScroll() {
positionY1.value = Y1.value - scrollTop * ratio.value; //-* positionY1.value = Y1.value - scrollTop * ratio.value; //-*
} }
onMounted(() => { onMounted(() => {
window.addEventListener('scroll', onScroll); window.addEventListener("scroll", onScroll);
window.addEventListener("scroll", handleScroll); //handleScroll window.addEventListener("scroll", handleScroll); //handleScroll
let bgTest = document.getElementById("bgTest"); let bgTest = document.getElementById("bgTest");
Y1.value = bgTest.offsetTop * ratio.value; Y1.value = bgTest.offsetTop * ratio.value;
}); });
onBeforeUnmount(() => { onBeforeUnmount(() => {
window.removeEventListener('scroll', onScroll); window.removeEventListener("scroll", onScroll);
}); });
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@ -256,7 +257,7 @@ onBeforeUnmount(() => {
// left: -190px; // left: -190px;
// opacity: 1; // opacity: 1;
// } // }
.content-right { .content-right {
z-index: 2; z-index: 2;
width: 792px; width: 792px;
@ -280,7 +281,7 @@ onBeforeUnmount(() => {
text-align: center; text-align: center;
font-size: 16px; font-size: 16px;
letter-spacing: 2px; letter-spacing: 2px;
font-family: 'Poppins'; font-family: "Poppins";
font-weight: bold; font-weight: bold;
color: #ffffff; color: #ffffff;
} }

View File

@ -882,7 +882,7 @@
"@vue/reactivity" "3.2.47" "@vue/reactivity" "3.2.47"
"@vue/shared" "3.2.47" "@vue/shared" "3.2.47"
"@vue/runtime-dom@3.2.47": "@vue/runtime-dom@^3.2.47", "@vue/runtime-dom@3.2.47":
"integrity" "sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==" "integrity" "sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA=="
"resolved" "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.47.tgz" "resolved" "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.47.tgz"
"version" "3.2.47" "version" "3.2.47"
@ -5302,11 +5302,6 @@
dependencies: dependencies:
"compute-scroll-into-view" "^1.0.20" "compute-scroll-into-view" "^1.0.20"
"scrollama@^3.2.0":
"integrity" "sha512-PIPwB1kYBnbw/ezvPBJa5dCN5qEwokfpAkI3BmpZWAwcVID4nDf1qH6WV16A2fQaJmsKx0un5S/zhxN+PQeKDQ=="
"resolved" "https://registry.npmmirror.com/scrollama/-/scrollama-3.2.0.tgz"
"version" "3.2.0"
"scrypt-js@^3.0.0", "scrypt-js@^3.0.1": "scrypt-js@^3.0.0", "scrypt-js@^3.0.1":
"integrity" "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" "integrity" "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA=="
"resolved" "https://registry.npmmirror.com/scrypt-js/-/scrypt-js-3.0.1.tgz" "resolved" "https://registry.npmmirror.com/scrypt-js/-/scrypt-js-3.0.1.tgz"
@ -6114,7 +6109,7 @@
"three" "^0.143.0" "three" "^0.143.0"
"vue" "^3.2.25" "vue" "^3.2.25"
"vue-demi@*", "vue-demi@^0.13.11": "vue-demi@*":
"integrity" "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==" "integrity" "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A=="
"resolved" "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.13.11.tgz" "resolved" "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.13.11.tgz"
"version" "0.13.11" "version" "0.13.11"