๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป ํ”„๋กœ์ ํŠธ/๐Ÿฐํ† ๋ผ์™€ ๊ฑฐ๋ถ์ด ๊ฒฝ์ฃผ๊ฒŒ์ž„๐Ÿข

[Vue.js] animation๊ณผ @keyframs๋กœ ํ† ๋ผ์™€ ๊ฑฐ๋ถ์ด ๊ฒฝ์ฃผ๊ฒŒ์ž„ ๋งŒ๋“ค๊ธฐ.

by ._.sori 2025. 8. 12.

 

 

 

์ฐธ๊ณ ๋กœ Vue.js์— ๋Œ€ํ•ด์„œ ์ž˜ ๋ชจ๋ฆ…๋‹ˆ๋‹ค.

์•„๋ฌด๊ฑฐ๋‚˜ ๋ง‰ ํ•ด๋ณด๋Š” ์ค‘์ด๊ณ  ์˜ณ์€ ์ •๋ณด์ธ์ง€ ์ €๋„ ๋ชจ๋ฆ…๋‹ˆ๋‹ค!

 

 

 

 

 

[ ํ† ๋ผ์™€ ๊ฑฐ๋ถ์ด ๊ฒฝ์ฃผ๊ฒŒ์ž„ ]

 

[Vue.js] Vue.js๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•œ ํ† ๋ผ์™€ ๊ฑฐ๋ถ์ด ๊ฒฝ์ฃผ๊ฒŒ์ž„ ๋งŒ๋“ค๊ธฐ.

ํ† ๋ผ์™€ ๊ฑฐ๋ถ์ด๊ฒฝ์ฃผ๊ฒŒ์ž„์„๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“ค์–ด๋ณด์ž. 1. ํ™˜๊ฒฝโ–ก WebStrom: HTML ํŽธ์ง‘๊ธฐ๊ฐ€ ํฌํ•จ๋œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ IDE(Intergrated Development Environment)๋กœ IntelliJ IDEA ํ”Œ๋žซํผ ์œ„์— ๊ตฌ์ถ•๋˜์—ˆ๊ณ  ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค๋‚˜ ์ด

post-this.tistory.com

 

 


 

 

 

 

 

1. ๋™์ž‘๊ณผ์ •๊ตฌ์„ฑ

ํ† ๋ผ๋Š” ์กฐ๊ฑด์„ ๊ฐ€์ง„๋‹ค. ์ง์ˆ˜๊ฐ€ ๋‚˜์˜ค๋ฉด ํ† ๋ผ์˜ ํ–‰๋™ ์‹œ๊ฐ„์ด ์งง์•„์ง€๊ณ , ํ™€์ˆ˜๊ฐ€ ๋‚˜์˜ค๋ฉด ํ† ๋ผ์˜ ํ–‰๋™ ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง„๋‹ค. ๊ฑฐ๋ถ์ด๋Š” ์กฐ๊ฑด ์—†์ด ํ•ญ์ƒ ๊ฐ™์€ ์†๋„๋กœ ๋‹ฌ๋ฆฐ๋‹ค.

 

 

 

 

 

 

 

 


 

 

 

 

 

2. animation๊ณผ transition

animation๊ณผ transition ๋‘˜ ๋‹ค ๋™์ž‘,ํšจ๊ณผ ๋“ฑ ์›€์ง์ž„์„ ๋‚˜ํƒ€๋‚ผ ๋•Œ ์“ด๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ ํ† ๋ผ์™€ ๊ฑฐ๋ถ์ด์˜ ์›€์ง์ž„์€ transition์ด ์•„๋‹Œ animation์œผ๋กœ ๋‚˜ํƒ€๋ƒˆ๋‹ค. 

 

animation์€ ์ข€ ๋” ๋ณต์žกํ•œ ์›€์ง์ž„์„ ๋‚˜ํƒ€๋‚ผ ๋•Œ ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹๋‹ค. ๋ฐ˜๋Œ€๋กœ transition์€ ๋‹จ์ˆœํ•œ ์›€์ง์ผ ๋•Œ ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹๋‹ค.

.game-start{
  position: absolute;
  top: 45%;
  left: 80%;
  width: 9%;
  height: 14%;
  transform: rotate(24deg);
  background: rgba(192, 240, 248, 0.75);
  border:  5px solid white;
  border-radius:  100px;
  font-size: 1.2rem;
  font-weight: bold;
  font-family: Danjo-bold-Regular;
  text-align: center;
  z-index: 15;
  cursor: pointer;
  transition: width 2s ease, height 2s ease, background 2s ease, transform 2s ease;
}
.game-start:hover{
  width: 10%;
  height: 15%;
  background: rgba(244, 234, 110, 0.63);
  transform: rotate(30deg);
}

 

 

๋งˆ์šฐ์Šค๋ฅผ ๋ฒ„ํŠผ ์œ„์— ๋Œ€๋ฉด ์ƒ‰์ƒ์ด ๋ณ€ํ•˜๋„๋ก ํ•˜๋Š” ๋ถ€๋ถ„์€ transition์„ ์ด์šฉํ–ˆ๋‹ค. ๋ณดํ†ต transition์€ ์‹œ์ž‘ ์ƒํƒœ์™€ ๋ ์ƒํƒœ๋งŒ ์ •์˜ํ•˜๊ธฐ์— ๋‹จ์ˆœํ•œ ๋ณ€ํ™”์— ๋” ์šฉ์ดํ•˜๋‹ค.

 

@keyframes rabbit-run {
  0% {
    left: -10%;
  }
  40% {
    left: 50%;
  }
  60% {
    left: 50%;
  }
  100% {
    left: 90%;
  }
}

.running-rabbit.run{
  animation: rabbit-run 5s linear forwards;
}

 

ํ•˜์ง€๋งŒ ๋‹จ๊ณ„๋ณ„๋กœ ์›€์ง์ž„์„ ์„ค์ •ํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ, @keyframs๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” animation์ด ๋” ํšจ์œจ์ ์ธ ๋“ฏ ํ•˜๋‹ค. animation์€ ์ฝ”๋“œ์— forwards๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋งˆ์ง€๋ง‰ ๋™์ž‘์„ ์œ ์ง€์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. transition๋„ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‚˜ JS๋ฅผ ์ด์šฉํ•˜์—ฌ ๋งˆ์ง€๋ง‰ ๋™์ž‘์ด ์œ ์ง€๋˜๋„๋ก ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ธด ํ•˜์ง€๋งŒ animation๋ณด๋‹ค ์ข€ ๋” ๋ณต์žกํ•œ ๊ฑธ ๋А๋‚„ ์ˆ˜ ์žˆ๋‹ค. 

 

 

 

 

 


 

 

 

 

 

3. animation๊ณผ @keyframs

 

animation

: ์š”์†Œ์˜ ์Šคํƒ€์ผ์„ ์‹œ๊ฐ„์— ๋”ฐ๋ผ ๋ณ€ํ™”์‹œํ‚ค๋Š” ๊ธฐ๋Šฅ์œผ๋กœ, ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ค‘๊ฐ„ ๋‹จ๊ณ„๋ฅผ ์„ค์ •ํ•˜์—ฌ ์ง€์ •ํ•œ ์‹œ๊ฐ„ ๋™์•ˆ ์ž๋™์œผ๋กœ ์žฌ์ƒ๋œ๋‹ค.

 

@keyframs

: ์• ๋‹ˆ๋ฉ”์ด์…˜์˜ ๋‹จ๊ณ„๋ณ„ ์Šคํƒ€์ผ ๋ณ€ํ™”๋ฅผ ์ •์˜ํ•˜๋Š” CSS ๊ทœ์น™์œผ๋กœ 0%์—์„œ 100%๊นŒ์ง€์˜ ๋น„์œจ๋กœ ์ƒํƒœ๋ฅผ ์ง€์ •ํ•œ๋‹ค.

 

 

<style> ์ฝ”๋“œ

@keyframes rabbit-run {
  0% {
    left: -10%;
  }
  40% {
    left: 50%;
  }
  60% {
    left: 50%;
  }
  100% {
    left: 90%;
  }
}
<style> ์ฝ”๋“œ 
ํ† ๋ผ ์ด๋ฏธ์ง€

.running-rabbit{
  position: absolute;
  top: 17%;
  left: -10px;
  width:20%;
  z-index: 10;
}
running-rabbit์€ ํ† ๋ผ ์ด๋ฏธ์ง€๋กœ ์‹œ์ž‘ ์ง€์ ์ด -10px๊ฐ€ ๋œ๋‹ค. @keyframs์—์„œ ์ง„ํ–‰๋ฅ  0%์ผ ๋•Œ ์ฒ˜์Œ ํ† ๋ผ ์ด๋ฏธ์ง€๋ฅผ ๋ฐฐ์น˜ํ•œ ์‹œ์ ์ด ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ง„ํ–‰๋ฅ ์ด 40%๊ฐ€ ๋˜๋ฉด ์™ผ์ชฝ 50% ์ง€์ ๊นŒ์ง€ ๊ฐ€๊ฒŒ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ง„ํ–‰๋ฅ  60%์ผ ๋•, ์—ฌ์ „ํžˆ 50% ์ง€์ ์œผ๋กœ ํ† ๋ผ๊ฐ€ ์‰ฌ๋Š” ๊ตฌ๊ฐ„์ด ๋œ๋‹ค. ๋งˆ์นจ๋‚ด ์ง„ํ–‰๋ฅ ์ด 100%๊ฐ€ ๋˜๋ฉด ํ† ๋ผ๊ฐ€ ๊ฒฐ์Šน์„ ์— ๋„์ฐฉํ•œ๋‹ค.

๊ทธ๋Ÿผ ์ด ์ง„ํ–‰๋ฅ ์˜ ๋น ๋ฅด๊ธฐ๋Š” ํ›„์— ์„ค์ •ํ•œ ์‹œ๊ฐ„์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง„๋‹ค. 

 

 

<style> ์ฝ”๋“œ

.running-rabbit.run{
  animation: rabbit-run 5s linear forwards;
}
.running-rabbit.stop {
  animation: rabbit-run 7s linear forwards;
}
<template> ์ฝ”๋“œ

<img src="../assets/runrabbit.png" alt="๋‹ฌ๋ฆฌ๋Š”ํ† ๋ผ" class="running-rabbit"
             :class="{run: rabbitRunning, stop: rabbitStopping}"/>
run์ด๋ฉด ํ† ๋ผ๊ฐ€ ์Šน๋ฆฌํ•˜๊ณ , stop์ด๋ฉด ํ† ๋ผ๊ฐ€ ์ง„๋‹ค. ๊ทธ๋ž˜์„œ run์€ @keyframs๊ฐ€ 5์ดˆ ๋™์•ˆ ์ง„ํ–‰๋˜๊ณ , stop์€ @keyframs๊ฐ€ 7์ดˆ ๋™์•ˆ ์ง„ํ–‰๋œ๋‹ค. ํ† ๋ผ๊ฐ€ ๋ฉˆ์ถฐ์„œ ๋จธ๋ฌด๋ฅด๋Š” ๊ตฌ๊ฐ„์€ ๋˜‘๊ฐ™์ด ์กด์žฌํ•˜์ง€๋งŒ, @keyframs๊ฐ€ ์ง„ํ–‰๋˜๋Š” ์‹œ๊ฐ„ ์ž์ฒด๊ฐ€ ๋‹ค๋ฅด๋‹ˆ stop์ผ ๋•Œ ์ฒœ์ฒœํžˆ ๋‹ฌ๋ฆฌ๊ณ  ์ข€ ๋” ์‰ฌ๋‹ค๊ฐ€ ๊ฒฐ์Šน์„ ์— ๋„์ฐฉํ•˜๊ฒŒ ๋œ๋‹ค.

 

 

<script> ์ฝ”๋“œ

import {ref} from "vue";

const currentSeconds = ref(new Date().getSeconds());
ref๋Š” Vue3์—์„œ ๋ฐ˜์‘์„ฑ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. ์—ฌ๊ธฐ์„œ ๋ฐ˜์‘์„ฑ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ด๊ฐ€ ์ดํ•ดํ•œ๋งŒํผ ์ ์–ด๋ณด๋ คํ•œ๋‹ค. (์ œ๋Œ€๋กœ ์ดํ•ดํ–ˆ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค) ์‹œ์ž‘ํ•˜๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๊ทธ๋•Œ์˜ ๊ฐ’์— ๋งž์ถฐ ์–ด๋–ค ํ™”๋ฉด์„ ๊ทธ๋ฆด ๊ฒƒ์ด๋‹ค. (์˜ˆ๋กœ ์ง์ˆ˜์˜ ๊ฐ’์„ ๋ฐ›์•„ ํ† ๋ผ๊ฐ€ ์ด๊ธฐ๋Š” ํ™”๋ฉด) ๊ทธ๋Ÿฐ๋ฐ ์ƒˆ๋กœ์šด ๊ฐ’์ด ๋“ค์–ด์˜ค๋ฉด ๊ทธ๊ฑฐ์— ๋งž์ถฐ ์ƒˆ๋กœ์šด ํ™”๋ฉด์„ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ(์ด๋ฒˆ์—๋Š” ๊ฑฐ๋ถ์ด๊ฐ€ ์ด๊ธฐ๋Š” ํ™”๋ฉด)์ฒ˜๋Ÿผ ์–ด๋–ค ์ƒํ™ฉ์— ๋”ฐ๋ผ ํ™”๋ฉด์„ ๋‹ค์‹œ ๊ทธ๋ฆฌ๋Š”๊ฒŒ ๋ฐ˜์‘์„ฑ ๋ฐ์ดํ„ฐ์ธ ๋“ฏ ํ•˜๋‹ค. ์•„๋ž˜ ๊ณต์‹๋ฌธ์„œ ์„ค๋ช…์„ ์ ์–ด๋‘๊ฒ ๋‹ค.

ref( )๋Š” Vue๊ฐ€ ๋‚ด๋ถ€์—์„œ Proxy๋กœ ๊ฐ์‹ธ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋ฉด ํ™”๋ฉด์ด ์ž๋™์œผ๋กœ ๋ Œ๋”๋ง๋˜๋„๋ก ํ•ด์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  const๋ฅผ ๋„ฃ์€ ์ด์œ ๋Š” currentSeconds์˜ ๊ฐ’์ด ์žฌํ• ๋‹น๋˜๋Š” ๊ฑธ ๋ง‰๊ธฐ ์œ„ํ•จ์ด๋‹ค. ํ•˜์ง€๋งŒ ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ๋ผ์„œ let์„ ์จ๋„ ์ƒ๊ด€์€ ์—†์„ ๋“ฏ ํ•˜๋‹ค.

์‹œ์ž‘ํ•˜๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด Date( ).getSeconds๋กœ ์ดˆ๋ฅผ ๊ฐ€์ ธ์™€ currendSeconds์— ์ €์žฅํ•œ๋‹ค. ์ด๋•Œ Date( ) ํฌ๋ฉง์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์ง€์›ํ•˜๋Š” ๋ฌธ๋ฒ•์ด๋‹ค. const์™€ let๋„ ๊ทธ๋ ‡๋‹ค. 

ํ•œ๊ฐ€์ง€ ๊ถ๊ธˆํ•œ ์ ์€, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๋“ค๊ณ  ์˜จ getSeconds๋ฅผ Vue ํ™”๋ฉด์— ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด ref๋ฅผ ์‚ฌ์šฉํ•œ ์ด์œ ๋„ ์žˆ๋Š”์ง€์ด๋‹ค. ์ฒ˜์Œ์—”vue๋กœ ๋งŒ๋“œ๋Š” ๋ถ€๋ถ„์„ ์ฐพ์•„๋ดค๋Š”๋ฐ ref๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ฝ”๋“œ๋“ค์ด ์žˆ์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋Ÿฐ ๊ถ๊ธˆ์ฆ์ด ์ƒ๊ฒผ๋‹ค.  - ์ฐพ์•„๋„ ์•ˆ๋‚˜์˜ค๊ธธ๋ž˜ GPT์—๊ฒŒ ๋ฌผ์—ˆ๋”๋‹ˆ, ๋ณ€ํ˜•๋œ ๊ฐ’์„ ํ™”๋ฉด์— ๋ณด์—ฌ์ค„๋•Œ ref๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฑฐ๋ผ๊ณ  ํ–ˆ๋‹ค.

์ถœ์ฒ˜: https://vueuse.org/shared/useDateFormat/#usedateformat

 

 

<script> ์ฝ”๋“œ

export default {
  name: 'MainView',
  data() {
    return {
      rabbitRunning: false,
      rabbitStopping: false,
      turtleRunning: false,
    }
  },
<template> ์ฝ”๋“œ

<img src="../assets/runrabbit.png" alt="๋‹ฌ๋ฆฌ๋Š”ํ† ๋ผ" class="running-rabbit"
             :class="{run: rabbitRunning, stop: rabbitStopping}"/>
rabbitRunning์€ 5์ดˆ ๋™์•ˆ ์ง„ํ–‰๋˜์–ด ํ† ๋ผ๊ฐ€ ๊ฒฐ์Šน์„ ์— ๋จผ์ € ๋„์ฐฉํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ๋˜๊ณ , rabbitStopping์€ 7์ดˆ ๋™์•ˆ ์ง„ํ–‰๋˜์–ด ๊ฑฐ๋ถ์ด๊ฐ€ ๋จผ์ € ๋„์ฐฉํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ๋œ๋‹ค. ์ด ๋ฐ์ดํ„ฐ๋“ค์€ ๋ชจ๋‘ ์ดˆ๊ธฐ๊ฐ’์ด false๋กœ ์„ค์ •ํ–ˆ๋‹ค.

 

 

<script> ์ฝ”๋“œ

methods: {
    gameStart() {
      const currentSeconds = ref(new Date().getSeconds());
      if(currentSeconds.value % 2 === 0) {
        this.rabbitRunning = true;
      } else  {
        this.rabbitStopping = true;
      }
      this.turtleRunning = true;
    },
    reload() {
      window.location.reload();
    }
  }
<template> ์ฝ”๋“œ

<button class="game-start" @click="gameStart"> ์‹œ์ž‘ </button>
gameStart ๋ฉ”์„œ๋“œ๋Š” ์‹œ์ž‘ ๋ฒ„ํŠผ์ด ๋ˆŒ๋ฆฌ๋ฉด ์ง„ํ–‰๋œ๋‹ค. ํ˜„์žฌ ์ดˆ๋ฅผ ๋ฐ›์•„์™€ 2๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€ ๊ฐ’์ด 0์ด ๋˜๋ฉด ํ† ๋ผ์˜ ๋‹ฌ๋ฆฌ๊ธฐ๊ฐ€ rabbitRunning์ด true๊ฐ€ ๋˜์–ด ํ† ๋ผ๋Š” 5์ดˆ ๋™์•ˆ ์›€์ง์ผ ๊ฒƒ์ด๋‹ค. ๊ทธ ์™ธ ๋‚˜๋จธ์ง€ ๊ฐ’์€ rabbitStopping์ด true๊ฐ€ ๋˜์–ด ํ† ๋ผ์˜ ์›€์ง์ž„์ด 7์ดˆ ๋™์•ˆ ์›€์ง์ผ ๊ฒƒ์ด๋‹ค. 

๊ฑฐ๋ถ์ด๋Š” ์‹œ์ž‘ ๋ฒ„ํŠผ์ด ๋ˆŒ๋ฆฌ๋ฉด turtleRunning์ด true๊ฐ€ ๋œ๋‹ค.

 

 

<style> ์ฝ”๋“œ

@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;
}
๊ฑฐ๋ถ์ด ์ฝ”๋“œ๋Š” ์•„์ฃผ ๊ฐ„๋‹จํ•˜๋‹ค. ์‹œ์ž‘ ๋ฒ„ํŠผ์ด ๋ˆŒ๋ฆฌ๋ฉด ์ผ์ •ํ•œ ์†๋„๋กœ 6์ดˆ ๋™์•ˆ -10%๋ถ€ํ„ฐ 90%๊นŒ์ง€ ์—ด์‹ฌํžˆ ๋‹ฌ๋ ค๊ฐ€๋ฉด ๋œ๋‹ค.

 

 

 


 

 

์•„๋ž˜์— ์ถœ์ฒ˜๋ฅผ ๋‚จ๊ฒจ๋‘๊ฒ ์Šต๋‹ˆ๋‹ค.
๋ธ”๋กœ๊ทธ์—” ์ œ๊ฐ€ ์ตœ๋Œ€ํ•œ ์ดํ•ดํ•œ ๋‚ด์šฉ๊นŒ์ง€๋งŒ ์ ๋Š”๊ฑฐ๋ผ
์ถœ์ฒ˜์— ๋“ค์–ด๊ฐ€์‹œ๋ฉด ๋” ๋งŽ์€ ๋‚ด์šฉ์ด ์žˆ์–ด ๊ณต๋ถ€ํ•˜์‹œ๋Š”๋ฐ ๋„์›€๋˜์‹ค๊ฒ๋‹ˆ๋‹ค.

 

๐Ÿชฝ

ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€๋กœ ์•Œ๋ ค์ฃผ์„ธ์š”

 

 


 

 

- ref

 

Vue.js

Vue.js - ํ”„๋กœ๊ทธ๋ž˜์‹œ๋ธŒ ์ž๋ฐ”์ŠคํŠธ๋ฆฝํŠธ ํ”„๋ ˆ์ž„์›Œํฌ

ko.vuejs.org

 

 

- ref

 

Vue3 ref, reactive ์‚ฌ์šฉ๋ฒ•

ref Vue.js 3์—์„œ ref๋Š” ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์–ด ์ด์ „ ๋ฒ„์ „์˜ ref์™€๋Š” ์กฐ๊ธˆ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. Vue.js 3์—์„œ ref๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. 1. ๊ฐ„ํŽธํ•œ ๋ณ€์ˆ˜ ์„ ์–ธ Vue.js 3์—์„œ ref๋Š” ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ๋ฐ

shan0325.tistory.com

 

 

- date

 

[Vue.js] dayJs ๋กœ ๋‚ ์งœ ๋ฐ์ดํ„ฐ ์กฐ์ž‘ ๋ฐ Vue.js ๊ฐ„๋‹จ ์˜ˆ์ œ

dayJs ๋‚ ์งœ ๋ฐ์ดํ„ฐ ์กฐ์ž‘, Vue.JS ๊ฐ„๋‹จ ์˜ˆ์ œ dayJs ๋ž€? JavaScript ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‚ ์งœ, ์‹œ๊ฐ„ ์กฐ์ž‘์— ๊ด€๋ จ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ด๋‹ค. Momment.js ์™€ ๋น„์Šทํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๋ณด๋‹ค ์„ฑ๋Šฅ์ด ์šฐ์ˆ˜ํ•˜๊ณ , ํŒŒ

lucas-owner.tistory.com

 

 

- clock

 

Animated Digital Clock with Vue 3 | Matt Fletcher - Full Stack Developer Based in Hampshire, UK

Back to blog Note: This tutorial is part of my instagram series. See instagram post. In this tutorial you will learn how to create an animated digital clock widget with Vue 3. We will be using the setup script, TypeScript and Tailwind CSS. This component i

mattfletcher.dev

 

 

- date

 

[Vue.js] Datepicker๋ฅผ ์ด์šฉํ•œ ์บ˜๋ฆฐ๋” ๋งŒ๋“ค๊ธฐ - ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ ๋ฐ ์˜ค๋Š˜ ๋‚ ์งœ๋กœ ์„ค์ •ํ•˜๊ธฐ

๋จผ์ € datepicker๋ฅผ ๋‹ค์šด๋ฐ›์•„์•ผ ํ•˜๋Š”๋ฐ์š” npm install vue3-datepicker ๋ฅผ ํ•ด์„œ ํŒจํ‚ค์ง€๋ฅผ ๋ฐ›์•„์ค๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ๋ณธ๋ก ์ธ ์ฝ”๋“œ๋กœ ๋„˜์–ด๊ฐ€๊ฒ ์Šต๋‹ˆ๋‹ค. ์ž…์‚ฌ์ผ์ž ... ์ด๋ ‡๊ฒŒ ๋ฅผ ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค. - ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋ณ€ํ˜•์€ ์ž

jaey0ng.tistory.com

 

 

- ref

 

Vue.js

Vue.js - The Progressive JavaScript Framework

vuejs.org

 

 

https://sweets1327.tistory.com/63

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Date()์™€ ํฌ๋งท ๋ณ€ํ™˜(yyyy-mm-dd)

์ฝ๊ธฐ ์ „ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ๋‚˜ ์ž˜๋ชป ์ž‘์„ฑ๋œ ๋‚ด์šฉ์— ๋Œ€ํ•œ ์ง€์ ์€ ์–ธ์ œ๋‚˜ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ณต๋ถ€ํ•˜๋ฉด์„œ ๋ฐฐ์šด ์ ์„ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ๊ด€๋ จ ๋‚ด์šฉ๋“ค์„ ํŒŒ์ผ๋กœ ์ •๋ฆฌํ•ด๋ดค์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•˜์‹  ๋ถ„๋“ค์€ ๋‹ค์šด๋กœ๋“œํ•˜์‹œ๋ฉด

sweets1327.tistory.com