์ฐธ๊ณ ๋ก Vue.js์ ๋ํด์ ์ ๋ชจ๋ฆ ๋๋ค.
์๋ฌด๊ฑฐ๋ ๋ง ํด๋ณด๋ ์ค์ด๊ณ ์ณ์ ์ ๋ณด์ธ์ง ์ ๋ ๋ชจ๋ฆ ๋๋ค!
ํ ๋ผ์ ๊ฑฐ๋ถ์ด
๊ฒฝ์ฃผ๊ฒ์์
๊ฐ๋จํ๊ฒ ๋ง๋ค์ด๋ณด์.
1. ํ๊ฒฝ
โก WebStrom
: HTML ํธ์ง๊ธฐ๊ฐ ํฌํจ๋ ์๋ฐ์คํฌ๋ฆฝํธ IDE(Intergrated Development Environment)๋ก IntelliJ IDEA ํ๋ซํผ ์์ ๊ตฌ์ถ๋์๊ณ ๋น์ฃผ์ผ ์คํ๋์ค๋ ์ดํด๋ฆฝ์ค์ ๊ฐ์ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ์ต์ ํ๋ ํตํฉ๊ฐ๋ฐํ๊ฒฝ์ ์ ๊ณตํ๋ค.
WebStorm: The JavaScript and TypeScript IDE, by JetBrains
Make development more productive and enjoyable with WebStorm, the IDE for JavaScript and related technologies.
www.jetbrains.com
โก Vue.js
: ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ๋ฐํ๊ธฐ ์ํ JavaScript ํ๋ก ํธ์๋ ํ๋ ์์ํฌ๋ก Evan You๊ฐ ๊ฐ๋ฐํ Vue.js๋ ์ต์ ์น ๊ฐ๋ฐ ํธ๋ ๋์ ๋ง์ถฐ ๊ฒฝ๋ํ๋ ๊ตฌ์กฐ์ ๊ฐ์ ๋(Virtual DOM) ๊ธฐ๋ฐ์ ์ฑ๋ฅ ํฅ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
Vue.js
Vue.js - The Progressive JavaScript Framework
vuejs.org
โก Vite
: ๋น ๋ฅด๊ณ ๊ฐ๊ฒฐํ ๋ชจ๋ ์น ํ๋ก์ ํธ ๊ฐ๋ฐ ๊ฒฝํ์ ์ด์ ์ ๋ง์ถฐ ํ์ํ ๋น๋ ํด์ด๋ค. Vite๋ ํฉ๋ฆฌ์ ์ธ ๊ธฐ๋ณธ ์ค์ ์ ์ ๊ณตํ๋ค. ํ๋ ์์ํฌ ์ง์์ด๋ ๋ค๋ฅธ ๋๊ตฌ์์ ํตํฉ์ ํ๋ฌ๊ทธ์ธ์ ํตํด ๊ฐ๋ฅํฉ๋๋ค.
Vite
Vite, ํ๋ฐํธ์๋ ๊ฐ๋ฐ์ ์๋ก์ด ๊ธฐ์ค
ko.vite.dev
2. ์ด๋ป๊ฒ ๋ง๋ค๊น?
โก ํ๋ฉด ๊ตฌ์ฑ
ํ๋ฉด์ ํํ๋ฉด๊ณผ ๊ฒ์์ ์งํํ๋ ๊ฒ์ํ๋ฉด์ผ๋ก ๊ตฌ์ฑํ๋ค. ์์ ๋ฒํผ์ ๋๋ฅด๋ฉด ๊ฒ์ ํ๋ฉด์ผ๋ก ๋ค์ด๊ฐ์ง๋ฉด์ ๋ฐ๋ก ๊ฒฝ์ฃผ ๊ฒ์์ด ์์๋๋๋ก ๊ตฌ์ํ๋ค.
โก ๋์ ๊ณผ์ ๊ตฌ์ฑ
์ด๊ธฐ ๊ตฌ์์์๋ ์ด(second)๊ฐ ์๋๋ผ ๋ถ(minute)์ ๋ฐ์์ค๋ คํ๋ค. ๋ง์ ๊ตฌํํ๋ ๋ด๊ธฐ ํ์์ ๊ฒ์์ธ๋ฐ 1๋ถ ๋ด๋ด ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋ ๊ฒ ๋ชฉ์ ๊ณผ ๋ถ์ ํฉํ๋ค๊ณ ๋๊ผ๋ค. ๊ทธ๋์ ์ด๋ก ๋ฐ๊ฟ ๋๋ค์ฒ๋ผ ๊ฒฐ๊ณผ๊ฐ ๋ฐ๋๋๋ก ํ๋ค.
์๋ ํ ๋ผ๊ฐ ์น๋ฆฌํ๋ ๋ฒ์ ์ ํ ๋ผ๊ฐ ์ฌ์ง ์๊ณ ๋ฌ๋ ค๊ฐ๋ ๊ฒ์ด์๋ค. ๊ฑฐ๋ถ์ด๋ณด๋ค ํ ๋ผ๊ฐ ์๋ ฅ์ด ๋น ๋ฅด๋ค๋ณด๋, ์ค๊ฐ์ ์ฌ์ง ์๊ณ ๋ฌ๋ฆฌ๋ฉด ๋๊ฐ ์น๋ฆฌํ ์ง ์ฝ๊ฒ ์ ์ ์๋ ๊ฒ ๊ฐ์ ๊ธด์ฅ๊ฐ์ด ๋๋ฌด ์์ด๋ณด์๋ค. ๊ทธ๋์ ํ ๊ธฐ๊ฐ ์น๋ฆฌํ๋ ๋ฒ์ ์๋ ์ฌ๋ ๊ตฌ๊ฐ์ ์ถ๊ฐํ์ฌ ์ด๋ค ๋๋ฌผ์ด ์น๋ฆฌํ ์ง ๋ง์ง๋ง๊น์ง ๊ฐ์ผ ์ ์ ์๋๋ก ์กฐ์ ํ๋ค.
3. ์ค์ ๋์ ์ฅ๋ฉด
4. ๊นํ๋ธ
5. ์์ฑ ์ฝ๋ ๋ณด๊ธฐ_ ํํ๋ฉด_ HomeView.vue
<template>
<div class="home-view">
<img src="@/assets/winnerturtle.png" alt="์ด๊ธด๊ฑฐ๋ถ์ด" class="winner-turtle"/>
<img src="@/assets/winnerrabbit.png" alt="์ด๊ธดํ ๋ผ" class="winner-rabbit"/>
<div class="rabbit-container">
<img src="../assets/speech1.png" alt="๋งํ์ 1" class="speech-bubble1"/>
<p class="rabbit-text"> ์ ๊ฐ ๋ ์ํด์ฅ! </p>
</div>
<div class="turtle-container">
<img src="../assets/speech2.png" alt="๋งํ์ 2" class="speech-bubble2"/>
<p class="turtle-text"> ๋๋ฅผ ๋ฝ์์ค์~ </p>
</div>
<div class="banner">
<div class="banner1">
<p class="banner-text1"> ํ ๋ผ์ ๊ฑฐ๋ถ์ด </p>
</div>
<div class="banner2">
<img src="../assets/red.png" alt="๋ฆฌ๋ณธ" class="ribbon1"/>
<p class="banner-text2"> ํ ๋ผ์ ๊ฑฐ๋ถ์ด ๊ตญ์ ๋ํ์ ์ค์ ๊ฑธ ํ์ํฉ๋๋ค.</p>
<p class="banner-text3"> ์ด๋ฒ ๋ํ์์ ํ ๋ผ์ ๊ฑฐ๋ถ์ด ์ค ๋๊ฐ ์ด๊ธธ์ง</p>
<p class="banner-text4"> ์น๊ตฌ๋ค๊ณผ ๋ด๊ธฐํด๋ณด์ธ์.</p>
</div>
</div>
<div class="btn-container">
<button class="main-button" @click="$router.push({ path:'/game' })"> ๋ณด๋ฌ๊ฐ๊ธฐ </button>
</div>
</div>
</template>
ํน๋ณํ ์ฝ๋๋ ์๋ค. ์ด๋ฏธ์ง ๋ฐฐ์น๋ง ํ๊ณ , ๋ฒํผ๋ง ๋ง๋ ํ๋ฉด์ด๋ผ ์ด๋ ค์ด ๊ฒ๋ ์์๋ค. ์ฒ์์ ์์๋ค์ <div ></div>๋ก ์๊ฐ์ธ๊ณ , ๊ฐ์ฅ ์์ ํด๋์ค์ธ <div class="home-view></div>์ ๋ชจ๋ ์์๋ค์ ๋ฐฐ์นํ๋ค. ๊ทธ๋ฌ๋ ์๊ธฐ๋ ๋ฌธ์ ๊ฐ, ํ๋ฉด์ ๋น์จ์ด ๋ฌ๋ผ์ง ๋๋ง๋ค ๋ฐฐ์นํด ๋ ์์น๊ฐ ๊ดด์ํ๊ฒ ๋ณ๊ฒฝ๋๋ค๋ ๊ฒ์ด๋ค.
๋ฌธ์ ์ ์ ์ฐพ๋๋ผ, ํ๋ฃจ์ข ์ผ ์๋นํ๋ค. ํด๋ต์ ์ฐพ์ง ๋ชปํ๊ณ ๊ทธ๋์ ํ๋ ํ๋ก์ ํธ๋ฅผ ์ด์๋ค. ๋ค๋ฅธ ํ๋ก์ ํธ ๋ด์์๋ ์ด๋ค ํ๋ฉด์ ํ๋ฉด ๋น์จ์ด ๋ฌ๋ผ์ ธ๋ ๋ฐฐ์น๊ฐ ํฌ๊ฒ ๋ฐ๋์ง ์์์ง๋ง, ์ด๋ค ํ๋ฉด์ ๋ฐฐ์น๊ฐ ์ด์ํ๊ฒ ๋ณํ๋ค. ๋ ์ฝ๋๋ฅผ ๋๊ณ ์ฐจ์ด๋ฅผ ์ฐพ์๋๋, ๊ทธ์ ์ผ ๋ฌธ์ ์ ์ด ๋ณด์ด๊ธฐ ์์ํ๋ค.
๋น์ทํ ์์น์ ์์๋ค ํน์ ๋๋จ์ด์ ธ ์๋ ์์๋ค์ <div class></div>๋ก ๋ฌถ์ด์ค์ผ ์์น๊ฐ ๋ค๋ฅธ ๊ณณ์ผ๋ก ๊ฐ๋ ๊ฑธ ๋ง์ ์ ์์๋ค. ๋, ๋ด๊ฐ ํ๋ ์๋ชป๋ ์ ์ ๊ณผํ๊ฒ position์ ์ฌ์ฉํ๋ค๋ ๊ฒ์ด๋ค. ๊ทธ๋์ ๋น์ทํ ์์น์ ์๋ ์์๋ค์ ์์ ํด๋์ค๋ก ๋ฌถ์ด ์์ ํด๋์ค์๋ง position์ "absolute"๋ฅผ ์ ์ฉํ๋ค. ๊ทธ๋ ๊ฒ ์ฝ๋๋ฅผ ๋ฐ๊พธ๋ ํ๋ฉด ๋น์จ์ ๋ฐ๋ผ ์์น๊ฐ ์์ ํ ๋ค๋ฅธ ๊ณณ์ผ๋ก ๋ฐ๋๋ ๊ฒ์ ๋ง์ ์ ์์๋ค.
<style> ์ฝ๋
.winner-rabbit {
position: absolute;
width: 28%;
height: 60%;
top: -5%;
left: -2%;
z-index: 10;
transform: rotate(20deg);
transition: transform 0.75s ease;
}
.winner-rabbit:hover {
transform: rotate(10deg);
}
.winner-turtle {
position: absolute;
width: 55%;
height: 80%;
top: 18%;
left: 60%;
z-index: 10;
transform: rotate(5deg);
transition: transform 0.75s ease-in-out;
}
.winner-turtle:hover {
transform: rotate(13deg);
}
ํ ๋ผ์ ๊ฑฐ๋ถ์ด ๊ทธ๋ฆผ์ ํฌ๊ฒ ๋ฐฐ์นํ๋ค. :hover๋ก ์ปค์๋ฅผ ๋๋ฉด ๊ฐ๋๊ฐ ๋ณ๊ฒฝ๋๋ ๊ท์ฌ์ด ๋ชจ์ ๋ ์ถ๊ฐํ๋ค.
์ฌ์ค ๋์ถฉ ๋ง๋ค ์๊ฐ์ด์๋๋ฐ, ํ๋ค ๋ณด๋ ์์ฌ์ด... ์๊ฒผ๋ค. 3์ฃผ ์ ์ ๋ณธ ๊ฐ์์์ด ์๊ฐ๋์ ์์๋ ๋น์ทํ ๊ณ์ด๋ก ๋ฐฐ์นํ๊ณ , ์กฐ๊ธ์ ์๊ธฐ๊ณ ์ถ๊ธฐ๋ ํ๊ณ ์กฐ๊ธ์ ๊ท์ฌ์ ๋ณด์ด๊ณ ์ถ์ด์ ๋๋ฆ ๋์์ธ์ ์ ๊ฒฝ์ ์ผ๋ค.(์๋ฌด๋ ์ ๋๋์ง๋)
์ด๋ฒ ํ๋ก์ ํธ๋ฅผ ํ๋ฉด์ ๋ ํ๋ ๊นจ๋ฌ์ ์ฌ์ค์ transition์ ์์น์ด๋ค. ๋๋ ๊ทธ๋์ :hover๊ฐ ๋ถ์ ํด๋์ค ๋ด์ transition์ ๋ฐฐ์นํ๋ค. ์ปค์๋ฅผ ๋๋ฉด ์์ง์์ด ์๊ธฐ๊ธธ ์ํ๋, ๋น์ฐํ ๊ทธ๋ ๊ฒ ๋ง๋ค์ด์ผ ํ๋ ์ค ์์๋ค.
์ด๋ ๊ฒ ๋ง๋ค๋ฉด ์ปค์๋ฅผ ๋์ ๋๋ง ์๋๊ฐ ์กฐ์ ๋์ด ์์ง์์ด ๋ฐ์ํ๊ณ , ๋ผ๋ ์๊ฐ transition์ :hover ์์ ์์ผ๋ ์๋๊ฐ ์กฐ์ ๋์ง ์๊ณ ์๋์ ๋ชจ์ต์ผ๋ก ๋์๊ฐ๋ค. ์๋ฐฉํฅ์ผ๋ก ์๋ ์กฐ์ ๊ณผ ์์ง์์ด ๋ฐ์๋๊ธธ ์ํ๋ฉด, :hover๊ฐ ๋ถ์ ํด๋์ค๊ฐ ์๋ ์๋์ ํด๋์ค์ transition์ ๋ฐฐ์นํด์ผ ํ๋ค.
์ง์ ํ๋ํ๋ ์ฐพ์์ ๋๋ฌ์ ํ๋ค ๋ณด๋, ์ด๋ ๊ฒ ๋๊ฒจ์ง๋ ๋ถ๋ถ์ด ์๊ธด ๊ฒ ๊ฐ๋ค. ์ด๋ฐ ๋ถ๋ถ์ ๋ฐ์ฑํด์ผ๊ฒ ๋ค. ์ข ์ ๋๋ก ์ฐพ์๋ณด๊ธฐ๋ก.
<style> ์ฝ๋
.btn-container{
position: absolute;
width: 100%;
height: 20%;
top: 90%;
left: 50%;
transform: translate(-50%, -50%);
text-align: center;
}
.main-button {
width: 20%;
height: 38%;
font-size: 1.7rem;
font-weight: bold;
font-family: Danjo-bold-Regular;
border: white solid 4px;
border-radius: 40px;
color: #b1791c;
background: #89f8b4;
cursor: pointer;
transition: background 0.4s ease, border 0.4s ease, color 0.4s ease;
}
.main-button:hover {
background: #b1791c;
color: #89f8b4;
border: white solid 7px;
}
.btn-container๋ก ๋ฒํผ์ ๊ฐ์ผ ๋ค, ๋ฒํผ์ ๋ง๋ค์๋ค. ํ๋ฉด ๋น์จ์ด ๋ฌ๋ผ์ง๋ฉด ๋ฒํผ์ด ์๋ก ํ์ด๋ฒ๋ฆฌ๋ ํ์์ด ๋ฐ์ํ๋๋ฐ, ์ด๋ ๊ฒ ๋ง๋๋ ์ ์ด๋ ๋ง๋ ์๋๋ ๊ณณ์ ๋ฒํผ์ด ์์ง ์๊ฒ ๋๋ค.
5. ์์ฑ ์ฝ๋ ๋ณด๊ธฐ_ ํํ๋ฉด_ MainView.vue
<template>
<div class="main-view">
<button class="game-return" @click="reload"> ๋ค์ํ๊ธฐ </button>
<button class="main-return" @click="$router.push('/home')"> ๋ฉ์ธํ๋ฉด </button>
<button class="game-start" @click="gameStart"> ์์ </button>
<div class="rabbit-ground">
<div class="rabbit-content">
<img src="../assets/runrabbit.png" alt="๋ฌ๋ฆฌ๋ํ ๋ผ" class="running-rabbit"
:class="{run: rabbitRunning, stop: rabbitStopping}"/>
<div class="rabbit-goalline"/>
<img src="../assets/biggreen.png" alt="ํ๋ฐญ" class="rabbit-green01" />
<img src="../assets/biggreen.png" alt="ํ๋ฐญ" class="rabbit-green02" />
<img src="../assets/biggreen.png" alt="ํ๋ฐญ" class="rabbit-green03" />
</div>
</div>
<div class="turtle-ground">
<div class="turtle-content">
<img src="../assets/runturtle.png" alt="๋ฌ๋ฆฌ๋ ๊ฑฐ๋ถ์ด" class="running-turtle" :class="{run: turtleRunning}"/>
<div class="turtle-goalline"/>
<img src="../assets/sea.png" alt="ํ๋" class="turtle-sea01"/>
<img src="../assets/sea.png" alt="ํ๋" class="turtle-sea02"/>
<img src="../assets/sea.png" alt="ํ๋" class="turtle-sea03"/>
</div>
</div>
</div>
</template>
์ฝ๋๋ฅผ ์ ๋ฐ์ ์ผ๋ก ์ค๋ช ํ, ๋ก์ง์ด ์ด๋ป๊ฒ ์งํ๋๋์ง ๋ ์์ธํ ์ค๋ช ์ ๋ค์ ๋ธ๋ก๊ทธ์ ์ ์ด๋ณด๊ฒ ๋ค.
spring์์๋ ๋ฒํผ์ ํ์ฌ ํ์ด์ง ๊ฒฝ๋ก๋ก ์ฐ๊ฒฐํ๋ฉด ์๋ก๊ณ ์นจ์ด ๋๋ค. ๋น์ฐํ Vue์์๋ ๊ทธ๋ ๊ฒ ๋ ์ค ์๊ณ ์ฒ์์ ๋ค์ํ๊ธฐ ๋ฒํผ์ @click="$router.push('/game')์ ๋ฃ์๋ค. ๊ทธ๋ฐ๋ฐ ๊ทธ๋ฅ ๋ฒํผ ๋ง๋ค๊ณ ๋๋ฅธ ์ฌ๋ ๋๋ค. ์๋ก๊ณ ์นจ์ด ์๋๋ ๊ฑธ ์ฒ์ ์์๋ค. ๊ทธ๋์ reload๋ฅผ ํด์คฌ๋ค. methods์ window.location.reload();๋ฅผ ํด์ฃผ๋ฉด ๋๋ค.
rabbit-content๋ฅผ ๋ณด๋ฉด img๊ฐ ์๊ณ runnig-rabbit ํด๋์ค๊ฐ ์๋ค. ์ด ํ ๋ผ ๊ทธ๋ฆผ์ด ์ด์ฌํ ์์ง์ฌ์ ๊ฒฐ์น์ ๊น์ง ๊ฐ ๊ฒ์ด๋ค. ์ด ํ ๋ผ์๊ฒ ๋๊ฐ์ง ์กฐ๊ฑด์ด ์ฃผ์์ง๋ค. ํ์ฌ ์๊ฐ์ ๋ฐ์์์, ์ง์์ด๋ฉด ํ ๋ผ๊ฐ ๊ฒฐ์น์ ์ ๋จผ์ ๋์ฐฉํ๋ค. ๋ง์ฝ ํ์์ด๋ฉด ํ ๋ผ๊ฐ ๋๋ฌด ์๋์ ๋๋ฌด ์ค๋ ์ฌ์ด ๊ฒฐ์น์ ์ ๋ฆ๊ฒ ๋์ฐฉํ๊ฒ ๋๋ค.
๊ทธ๋์ run์ ๋ ์ฌ๋ ๋ก์ง์ด ๋ค์ด๊ฐ๊ณ , stop์ ์ค๋ ์ฌ๋ ๋ก์ง์ด ๋ค์ด๊ฐ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฒ์ ์คํํธ ๋ฒํผ์ด ๋๋ฆฌ๋ฉด ํ์ฌ ์๊ฐ์ ๋ฐ์ ์ง์๋ฉด runningRabbit์ด true๊ฐ ๋๊ณ , ํ์๋ฉด stoppingRabbit์ด true๊ฐ ๋๋ค.
๊ฑฐ๋ถ์ด๋ ์ธ์ ๋ ๊ฐ์ ์๋๋ก ์ด์ฌํ ๊ฑธ์ด๊ฐ๋ค. ๐ข๐ข๐ข
<style> ์ฝ๋
@keyframes rabbit-run {
0% {
left: -10%;
}
40% {
left: 50%;
}
60% {
left: 50%;
}
100% {
left: 90%;
}
}
.running-rabbit{
position: fixed;
top: 9%;
left: -10px;
width:20%;
z-index: 7;
}
.running-rabbit.run{
animation: rabbit-run 5s linear forwards;
}
.running-rabbit.stop {
animation: rabbit-run 7s ease-in-out forwards;
}
@keyframes turtle-run {
0% {
left: -10%;
}
100% {
left: 90%;
}
}
.running-turtle{
position: absolute;
bottom: 3.5%;
left: -10px;
width:20%;
z-index: 7;
}
.running-turtle.run {
animation: turtle-run 6s linear forwards;
}
animation
: ํธ๋์ง์ ๋ณด๋ค ํจ์ฌ ๋ ๊ท๋ชจ๊ฐ ํฌ๊ณ ๋ณต์กํ๋ฉฐ ๋ค์ํ ๋ฅ๋ ฅ์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ ์ ๋ฐํ ํจ๊ณผ๋ฅผ ๊ตฌํ ๊ฐ๋ฅํ๋ค.
@keyframs
: animation์ ์์ฑ๊ณผ ์ค๊ฐ ์ํ๋ฅผ ์ ์ํ ์ ์๋ค.
์ฒ์์๋ transition์ผ๋ก ๊ตฌ์ํ ์๊ฐ์ด์๋ค. ์ฒ์๋ถํฐ transition ๊ณต๋ถํ๋ค ๋ง๋ค์ด๋ณด๊ณ ์ถ์ด์ง ํ๋ก์ ํธ์๋ค. ๊ทธ๋ฐ๋ฐ transition์ ์ฌ์ฉํ๋, ์์ง์์ด ๋๋๋ฉด ๋ค์ ์๋ ์๋ฆฌ๋ก ๋์๊ฐ๋ค. ์ ์ vue ๊ณต์ ๋ฌธ์์ animation์ ๋ดค๋๊ฒ ๊ธฐ์ต๋ animation์ ์ด์ฉํ์ฌ ์ฝ๋๋ฅผ ์์ฑํ๋ค.
@keyframs๋ก rabbit์ด ์์ง์ผ ๊ฑฐ๋ฆฌ๋ฅผ ์ค์ ํ๋ค. ํ ๋ผ๊ฐ ๊ฒฐ์น์ ์ ๋จผ์ ๊ณจ์ธํ๋ ์๊ฐ์ 5์ด๋ก ์ก์๊ณ , ๊ณจ์ธํ์ง ๋ชปํ๋ ์๊ฐ์ 7์ด๋ก ์ก์๋ค. @keyframs์ ์งํ๋ฅ ์ ์ค์ ํ ์๊ฐ์ ๋น์จ๋ก ๋ง์ถฐ์ง๋ ๋ฏ ํ๋ค. ์ ๋๋ฉ์ด์ ์์น๊ฐ ๋ง์ง๋ง ์์น์ ์ ์ง๋๋๋ก forwards๋ฅผ ๋ถ์๋ค.
<script>
import {ref} from "vue";
const currentSeconds = ref(new Date().getSeconds());
export default {
name: 'MainView',
data() {
return {
rabbitRunning: false,
rabbitStopping: false,
turtleRunning: false,
}
},
methods: {
gameStart() {
if(currentSeconds.value % 2 === 0) {
this.rabbitRunning = true;
} else {
this.rabbitStopping = true;
}
this.turtleRunning = true;
},
reload() {
window.location.reload();
}
}
}
</script>
์ด๋ฅผ ๊ฐ์ ธ์จ ํ methods์์ ํด๋น ์ด๊ฐ ์ง์์ด๋ฉด rabbitRunning์ด true๊ฐ ๋๋๋ก ํ๋ค. ๊ทธ๋ฆฌ๊ณ 0์ผ๋ก ๋จ์ด์ง์ง ์์ ๋๋จธ์ง ๊ฐ์ rabbitStopping์ด true๊ฐ ๋๋๋ก ํ๋ค. ๊ฑฐ๋ถ์ด๋ ์ธ์ ๋ gameStrat๊ฐ ๋๋ฆฌ๋ฉด ๋ฌ๋ฆฌ๋๋ก ํ๋ค.
'๐ป ํ๋ก์ ํธ > ๐ฐํ ๋ผ์ ๊ฑฐ๋ถ์ด ๊ฒฝ์ฃผ๊ฒ์๐ข' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Vue.js] ์๋ก๊ณ ์นจ ์ฝ๊ฒ ํ๋ ๋ฐฉ๋ฒ, window.location.reload( ) (5) | 2025.08.13 |
---|---|
[Vue.js] animation๊ณผ @keyframs๋ก ํ ๋ผ์ ๊ฑฐ๋ถ์ด ๊ฒฝ์ฃผ๊ฒ์ ๋ง๋ค๊ธฐ. (8) | 2025.08.12 |