728x90
๋ฐ์ํ
๐ก ์ค์ต ํฌ์ธํธ!
- ์ด๋ฒ์๋ Vue ์์ ์ ๊ณตํ๋ transition ์ ์ด์ฉํ ์ ๋๋ฉ์ด์ ํจ๊ณผ์ฃผ๋ ๋ฐฉ๋ฒ์ ํฌํจํ์ฌ ์ด 2๊ฐ์ง ์ ๋๋ฉ์ด์ ํจ๊ณผ๋ฅผ ์ฃผ๋ ๋ฐฉ๋ฒ์ ๊ณต๋ถํด๋ณด์๋ค.
- ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ์ ๋๋ฉ์ด์ ํจ๊ณผ๋ฅผ ์ค ๋๋ ํฌ๋ช ๋๋ง 0์์ 1๋ก ๋ฐ๋๋๋ก ์ ๋๋ฉ์ด์ ํจ๊ณผ๋ฅผ ์ค๋ณด์๊ณ , transition ์ ์ฌ์ฉํ ๋๋ ๋ชจ๋ฌ์ฐฝ์ด ์์์ ๋ด๋ ค์ค๊ณ , ๋ซ์ ๋์๋ ์๋๋ก ์ฌ๋ผ์ง๋๋ก ์ ๋๋ฉ์ด์ ํจ๊ณผ๋ฅผ ์ค๋ณด์๋ค.
- ๋๋ ๋ถ๋ช ํ transition ์ ์ด์ฉํด ์ ๋๋ฉ์ด์ ํจ๊ณผ๋ฅผ ์ถ๊ฐํ ๊ฒ๋ฟ์ธ๋ฐ, ๊ธฐ์กด์ ์ ์๋ํ๋ ๋ซ๊ธฐ ๋ฒํผ์ด ์๋ํ์ง ์๊ณ ์๋ฌ๊ฐ ๋ฐ์ํด์.. ๊ตฌ๊ธ๋งํ๊ณ ์๋ฌ๋ฅผ ์์ ํ๋๋ผ ํ์ฐธ ๊ฑธ๋ ธ๋ค.
- ๊ทธ๋์ ๋ชจ๋ ์์ ์ ๋ง์น ํ์ ์ฌ๊ธฐ์ ๊ธฐ ๋๋ฌ๋ณด๋ฉด์ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๋์ง ํ์ธ๊น์ง ํ ํ์์ผ ๋ง์์ ๋์ ์ ์์๋ค.
๐ ๋ค์ด๊ฐ๊ธฐ ์ ์
- UI ๊ฐ ๋ฑ์ฅ ํน์ ํด์ฅํ ๋ ์ ๋๋ฉ์ด์ ํจ๊ณผ๋ฅผ ์ฃผ๊ณ ์ถ์ ๋๊ฐ ์๋ค.
- ์ด ๋, ์ ๋๋ฉ์ด์
ํจ๊ณผ๋ฅผ ์ฃผ๋ ๋ฐ์๋ ๋ค์๊ณผ ๊ฐ์ด ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
- JavaScript ์์๋ ์์ฃผ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ผ๋ก, ํด๋์ค์ CSS ๋ก ์ ๋๋ฉ์ด์
ํจ๊ณผ๋ฅผ ๋ง๋ ํ์ ํด๋น class ๋ฅผ ์ ๋๋ฉ์ด์
ํจ๊ณผ๊ฐ ํ์ํ UI ์ ๋ผ์๋ค ๋ถ์๋ค ํ๋ ๋ฐฉ์์ผ๋ก CSS ์ ๋๋ฉ์ด์
์ฃผ๋ ๋ฐฉ๋ฒ
(๋ฌผ๋ก ๊ณผ์ ์ ๋์ผํ๋ ์ฌ์ฉํ๋ ๋ฐฉ์์ด ์ฝ๊ฐ ๋ค๋ฅด๊ธด ํ๋ค.) - Vue ๊ฐ ์ ๊ณตํ๋ <transition> ์ name ์์ฑ์ ์ถ๊ฐํ์ฌ ํด๋น name ์ ๊ฐ์ง๊ณ CSS ๋ก ์ ๋๋ฉ์ด์ ํจ๊ณผ๋ฅผ ๋ง๋ค๊ณ , ์ ๋๋ฉ์ด์ ํจ๊ณผ๊ฐ ํ์ํ UI ๋ฅผ <transition></transition> ์ผ๋ก ๊ฐ์ธ๋ ๋ฐฉ๋ฒ
- JavaScript ์์๋ ์์ฃผ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ผ๋ก, ํด๋์ค์ CSS ๋ก ์ ๋๋ฉ์ด์
ํจ๊ณผ๋ฅผ ๋ง๋ ํ์ ํด๋น class ๋ฅผ ์ ๋๋ฉ์ด์
ํจ๊ณผ๊ฐ ํ์ํ UI ์ ๋ผ์๋ค ๋ถ์๋ค ํ๋ ๋ฐฉ์์ผ๋ก CSS ์ ๋๋ฉ์ด์
์ฃผ๋ ๋ฐฉ๋ฒ
๐ ์ ๋๋ฉ์ด์ ํจ๊ณผ๋ฅผ ์ฃผ๋ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ ์ฌ์ฉํ๊ธฐ
<div class="start" :class="{ end : openModal }">
<Modal @closeModal="openModal = close($event)" :openModal="openModal" :clickedRoom="clickedRoom" :rooms="rooms"/>
</div>
- ๋จผ์ , ๊ธฐ์กด์ Modal Component ์ ์ ๋๋ฉ์ด์ ํจ๊ณผ๋ฅผ ์ฃผ๊ธฐ ์ํด start ๋ผ๋ class ๋ฅผ ๊ฐ์ง div ํ๊ทธ๋ก ๊ฐ์ธ์ฃผ์๋ค.
- ์ ๋๋ฉ์ด์ ์์ ์ /ํ๋ก ์ค์ ํ class ๋ช ์ ์ด ๋ ๋ฏธ๋ฆฌ ์๊ฐํด์ฃผ๋ ๊ฒ ์ข๋ค.
.start {
opacity: 0;
transition: all 1s;
}
.end {
opacity: 1;
}
- ๊ทธ๋ฆฌ๊ณ start ๋ผ๋ ํ๊ทธ์ css ๋ก ์์ ์ ์ ๋๋ฉ์ด์ ์ ๋์์ธํ๊ณ , end ๋ผ๋ ํ๊ทธ์ css ๋ก ๋์ ํ class ๋ฅผ ๋์์ธ์ ํด์ฃผ์๋ค.
- ์ด๋ฒ์๋ ๋จ์ํ ํฌ๋ช ๋๋ง 0์์ 1๋ก ๋ฐ๊พธ์ด ๋ชจ๋ฌ์ฐฝ์ด ๋ํ๋๊ฒ ํ๋ ์ ๋๋ฉ์ด์ ํจ๊ณผ๋ฅผ ์ค๋ณด์๋ค.
<div class="start" :class="{ end : openModal }"></div>
- ์ด์ ์ํ๋ ์์ ์ end ๋ผ๋ class ๋ฅผ start ๋ผ๋ class ๋ฅผ ๊ฐ์ง div ํ๊ทธ์ ์ถ๊ฐํด์ฃผ๋ฉด ์ ๋๋ฉ์ด์ ํจ๊ณผ๋ฅผ ๋ผ ์ ์๋ค.
- JavaScript ์์๋ ์ผํญ์ฐ์ฐ์๋ฅผ ์ด์ฉํ์ฌ ์กฐ๊ฑด์ ์์ฑํด์ฃผ์๋๋ฐ, ์ฌ๊ธฐ์๋ ์กฐ๊ฑด๋ถ๋ก class ๋ฅผ ๋ถ์ฐฉํ๊ณ ์ถ์ ๋ ์์ ๊ฐ์ด :class="{ ํด๋์ค๋ช : true }" ์ ๊ฐ์ ํ์์ผ๋ก ์์ฑํด์ฃผ๋ฉด ๋๋ค.
- ๋ฌผ๋ก true / false ๋ฅผ ์ง์ ๋ฌธ์์ด๋ก ์ ๋ ฅํด์ฃผ์ด๋ ๋๊ณ , data ๋ณด๊ดํจ์ ์ ์ฅ๋ ๋ฐ์ดํฐ ์ด๋ฆ๋ ๋ฃ์ ์ ์๋ค.
- ๋์ ๊ฒฝ์ฐ, ๋ชจ๋ฌ์ฐฝ UI ๊ฐ ์ด๋ ธ์ ๋ ์ ๋๋ฉ์ด์ ํจ๊ณผ๊ฐ ๋ถ์ฐฉ๋์ด์ผ ํ๋ฏ๋ก ๋ชจ๋ฌ์ฐฝ์ ์ด๊ณ ๋ซํ ์ํ์ ๋ฐ๋ผ true / false ๊ฐ์ด ์ ์ฅ๋๋ openModal ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด์ฃผ์๋ค.
๐ Vue ๊ฐ ์ ๊ณตํ๋ transition ์ผ๋ก ์ ๋๋ฉ์ด์ ํจ๊ณผ ์ฃผ๋ ๋ฐฉ๋ฒ ์ฌ์ฉํ๊ธฐ
<transition name="fade">
<Modal @closeModal="openModal = close($event)" :openModal="openModal" :clickedRoom="clickedRoom" :rooms="rooms"/>
</transition>
- ๋จผ์ , ์ ๋๋ฉ์ด์ ํจ๊ณผ๋ฅผ ์ฃผ๊ณ ์ถ์ UI ๋ฅผ <transition></transition> ์ผ๋ก ๊ฐ์ธ์ค๋ค.
- ์ด ๋, <transition> ์ name ์์ฑ์ ์ถ๊ฐํ์ฌ css ๋ฅผ ๋ง๋ค ๋ class ๋ช ์ฒ๋ผ ์ฌ์ฉํ ์ด๋ฆ์ ํ๋ ์ง์ด์ค๋ค.
/* transition ์ ํ์ฉํ ์คํ์ผ๋ง ๋ฐฉ๋ฒ */
.์๋ช
-enter-from { ์ ๋๋ฉ์ด์
๋์ ์ ์ํ }
.์๋ช
-enter-active { ์ ๋๋ฉ์ด์
๋์ ์ค ์ํ, ๋๋ถ๋ถ transition ์ด๋ฐ๊ฑฐ }
.์๋ช
-enter-to { ์ ๋๋ฉ์ด์
๋์ ํ ์ํ }
.fade-enter-from {
opacity: 0;
transform: translateY(-100vh);
}
.fade-enter-active {
transition: all 0.5s;
}
.fade-enter-to {
transform: translateY(0vh);
opacity: 1;
}
.fade-leave-from {
transform: translateY(0vh);
opacity: 1;
}
.fade-leave-active {
transition: all 0.5s;
}
.fade-leave-to {
transform: translateY(100vh);
opacity: 0;
}
- ์ด์ ๋งจ ์์ transition ์คํ์ผ๋ง ๋ฐฉ๋ฒ์ ์ฐธ๊ณ ํ์ฌ css ์์ ์ํ๋ ๋๋ก ์คํ์ผ๋ง์ ํด์ฃผ๋ฉด ๋๋ค.
- ํด์ฅ ์์๋ ์ ๋๋ฉ์ด์ ํจ๊ณผ๋ฅผ ์ฃผ๊ณ ์ถ๋ค๋ฉด enter ๋์ ์ leave ๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
- ์ด๋ฒ์๋ ํ๋ฉด ์๋จ์์ ๋ชจ๋ฌ์ฐฝ์ด ๋ด๋ ค์๋ค๊ฐ, ๋ซ๊ธฐ ๋ฒํผ์ด๋ ๊ฒ์ ๋ฐฐ๊ฒฝ์ ๋๋ฅด๋ฉด ๋ชจ๋ฌ์ฐฝ์ด ํ๋ฉด ํ๋จ ๋ฐฉํฅ์ผ๋ก ์ฌ๋ผ์ง๋๋ก ์ ๋๋ฉ์ด์ ํจ๊ณผ๋ฅผ ์ค๋ณด์๋ค.
728x90
๋ฐ์ํ
'[๊ฐ๋ฐ] Practice > Vue.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Vue.js] Vue ์ ๋ผ์ดํ์ฌ์ดํด ํ์ฉํ๊ธฐ (0) | 2022.04.04 |
---|---|
[Vue.js] ๋ฐ์ดํฐ ์๋ณธ ๋ณด์กด์ ํ์์ฑ ์ดํดํ๊ธฐ ๋ฐ ์ํ ์ ๋ ฌ ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ (0) | 2022.04.04 |
[Vue.js] watcher ๋ก ๋ฐ์ดํฐ ๊ฐ์ํ๊ธฐ (0) | 2022.04.03 |
[Vue.js] ์ฌ์ฉ์์ input ๋ฐ์์ค๊ธฐ (0) | 2022.04.03 |
[Vue.js] Component ๋ง๋ค๊ธฐ (0) | 2022.04.02 |