Jieunny์ ๋ธ๋ก๊ทธ
Unit 11. [์ค์ต] ๋๋ง์ ์๊ณ ๋ผ ์คํ ์ด์ธ ๋ง๋ค๊ธฐ ๋ณธ๋ฌธ
Unit 11. [์ค์ต] ๋๋ง์ ์๊ณ ๋ผ ์คํ ์ด์ธ ๋ง๋ค๊ธฐ
Jieunny 2023. 1. 10. 17:00๐ฃ ๋๋ง์ ์๊ณ ๋ผ ์คํ ์ด์ธ ๋ง๋ค๊ธฐ
1๏ธโฃ Bare Minimum Requirment
โ๏ธ ๋์ค์ปค์ ๋์ด ๊ธฐ๋ฅ
// agoraStatesDiscussions ๋ฐฐ์ด์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ํ๋ฉด์ ๋ ๋๋งํ๋ ํจ์์
๋๋ค.
const render = (element) => {
for (let i = 0; i < agoraStatesDiscussions.length; i += 1) {
element.append(convertToDiscussion(agoraStatesDiscussions[i]));
}
return;
};
// ul ์์์ agoraStatesDiscussions ๋ฐฐ์ด์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ํ๋ฉด์ ๋ ๋๋งํฉ๋๋ค.
const ul = document.querySelector("ul.discussions__container");
render(ul);
โฐ ์๋๋ render() ์ฌ์ฉํด์ ul์ ๋์ค์ปค์
ํ๋ํ๋ li๋ก ์ถ๊ฐํด์คฌ๋ค.
โ๏ธ ๋์ค์ปค์
์ถ๊ฐ ๊ธฐ๋ฅ
โฐ ๋น ๊ฐ์ฒด๋ฅผ ์์ฑํด์ ์ถ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด์ฃผ๊ณ , ๊ทธ ๊ฐ์ฒด๋ฅผ agoraStatesDiscussions ๋ฐฐ์ด์ ์ถ๊ฐํด์คฌ๋ค.
โ๏ธ CSS
โ๏ธ Github ๋ฐฐํฌ
https://jieuny0314.github.io/fe-sprint-my-agora-states/
2๏ธโฃ Advanced Challenge
๐ Advanced ํ๋ฉด์ ๋์ค์ปค์ ๋์ด, ์ถ๊ฐ ๊ธฐ๋ฅ ์์
โ๏ธ ํ์ง ์๊ฐ ์ ์ฉ
โฐ new Date().toLocaleString() ์ฌ์ฉ
//convertToDiscussion(obj, itemLi) ํจ์
let localeDate = new Date(obj.createdAt).toLocaleString();
//๋ฒํผ ๋๋ ์ ๋ ๋์ค์ปค์
์ถ๊ฐ ๋ถ๋ถ
let currentTime = new Date();
// currenTime์ด convertToDiscussion() ์์์ toLocaleSting()์ด ์ ์ฉ๋๋ฏ๋ก ๋ฏธ๋ฆฌ ์ ์ฉ์ํค๋ฉด ์๋๋ค.
โ๏ธ ํ์ด์ง๋ค์ด์ ๊ธฐ๋ฅ
โฐ displayLIst() : ํ๋ฉด์ ๋์ค์ปค์ ํ๋ํ๋ ๋ ๋๋ง ํด์ฃผ๋ ํจ์
const listElement = document.querySelector('.discussions__container'); // ๋์ค์ปค์
๋ด์ ul ๊ฐ์ ธ์ค๊ธฐ
const pageList = document.querySelector('.page_list'); // ํ์ด์ง ๋ชฉ๋ก ๋ฃ์ ๊ณณ ๊ฐ์ ธ์ค๊ธฐ
let discussionsCount = document.querySelector('.discussions__count');
let currentPage = 1; //์ด๊ธฐํํ๋ฉด ์์ ํ์ด์ง
let rows = 10; //ํ ๋ชฉ๋ก์ ๋ณด์ฌ์ค ์์ดํ
let firstPage = 1; // ์ฒ์ ํฒ์ด์ง
function displayList(items, wrapper, rows_per_page, page){ // ํ๋ฉด์ ๋ ๋๋ง ํจ์(๋ ๋๋ง ํ ์์, ์ด๋์ append ํ ๊ฑด์ง, ํ ํ์ด์ง์ ํ์ํ ๋์ค์ปค์
๊ฐ์, ํ์ฌ ํ์ด์ง)
wrapper.innerHTML = '';
page--; // ๋ฐฐ์ด 0๋ถํฐ ๋์์ผ๋๋๊น -- ํด์ฃผ๊ธฐ
let start = rows_per_page * page; // ํ์ฌ ํ์ด์ง์ ๋ณด์ฌ์ค ์ฒซ๋ฒ์งธ ์์ดํ
๋ช๋ฒ์งธ ์ธ์ง
let end = start + rows_per_page; // ํ์ฌ ํ์ด์ง์ ๋ณด์ฌ์ค ๋ง์ง๋ง ์์ดํ
๋ช๋ฒ์งธ์ธ์ง
let paginatedItems = items.slice(start, end); // ๋ฐฐ์ด์์ ํ์ฌ ํ์ด์ง ์ฒซ๋ฒ์งธ ์์ดํ
๋ถํฐ ๋ง์ง๋ง ์์ดํ
๊น์ง ๊ฐ์ ธ์ค๊ธฐ
for(let i = 0; i < paginatedItems.length; i++){ // ํ์ฌ ํ์ด์ง์ ์์ดํ
๋ถ๋ฌ์ค๊ธฐ
let item = paginatedItems[i]; // ํ์ฌ ํ์ด์ง์ ๋ค์ด๊ฐ ์์ดํ
๋ฃ์ด์ฃผ๊ธฐ
let itemElement = document.createElement('li'); // ํ ๋์ค์ปค์
์ด ํ๋์ li์ด๋ฏ๋ก li ์์ฑ
itemElement.className = "discussion__container";
wrapper.append(itemElement); // ul์ li ๋ฃ์ด์ฃผ๊ณ
convertToDiscussion(item, itemElement); // ๋ง๋ li์ ๊ฐ ๊ฐ์ฒด ์์ ๋ฃ์ด์ฃผ๊ธฐ
}
}
โฐ setupPagination(): ํ์ด์ง ์ด๋ ์ ์ดํจ์ (pagenationButton์ ํ์ด์ง ์๋งํผ ํธ์ถ)
// ํ์ด์ง ์ด๋ ์ ์ด ํจ์
function setupPagination(items, wrapper, rows_per_page) {
wrapper.innerHTML = '';
let page_count = Math.ceil(items.length / rows_per_page); // ์ด ํ์ํ ํ์ด์ง ์ ๊ตฌํ๊ธฐ
for(let i = 1; i < page_count + 1 ; i++){ // ์ฌ๊ธฐ์ i๋ ํ์ด์ง ๋ฒํธ๋ฅผ ์๋ฏธํ๋ค.
let btn = paginationButton(i, items);
pageList.append(btn);
}
}
โฐ paginationButton() : ํ์ด์ง ๋ฒํผ ์์ฑ + ํด๋ฆญํ๋ฉด ํ์ด์ง ์ด๋ํด์ฃผ๋ ํจ์
// ํ์ด์ง ๋ฒํผ ์์ฑ + ๋ฒํผ ๋๋ฅด๋ฉด ํ์ด์ง ์ด๋ํด์ฃผ๋ ํจ์
function paginationButton(page, items) {
let paginationBtn = document.createElement('button'); // ํ์ด์ง ๋ฒํผ ์์ฑ
paginationBtn.innerText = page; // ํ์ฌ ์์ฑํ ํ์ด์ง๊ฐ ๋ช๋ฒ์งธ ํ์ด์ง์ธ์ง
if(currentPage === page) { // ํ์ฌ ํ์ด์ง๊ฐ ๋ด๊ฐ ๋๋ฅธ ํ์ด์ง๋ฉด
paginationBtn.classList.add('active'); // ๊ทธ ํ์ด์ง ๋ฒํผ์ active ์ฃผ๊ธฐ (์ ๋ค๋ฅธ CSS์ถ๊ฐ)
}
paginationBtn.addEventListener('click', function() {
currentPage = page; // ํ์ฌ ํ์ด์ง๋ฅผ ์ง๊ธ ๋๋ฅธ ํ์ด์ง๋ก ๋ฐ๊ฟ์ค๋ค.
displayList(items, listElement, rows, currentPage); // ํ์ฌ ํ์ด์ง์ ๋์ค์ปค์
์ ๋ ๋๋ง ํด์ฃผ๊ธฐ ์ํด ํธ์ถ
let currentBtn = document.querySelector('.page_list .active'); // ํ์ฌ active ๋์ด์๋ ๋ฒํผ ๊ฐ์ ธ์์
currentBtn.classList.remove('active'); // active ์ง์์ฃผ๊ณ
paginationBtn.classList.add('active'); // ์ง๊ธ ๋๋ฅธ ๋ฒํผ์ active ํด์ฃผ๊ธฐ
})
return paginationBtn; // ํ์ฌ ๋ง๋ ๋ฒํผ์ ๋ฐํ
}
โฐ ํ์ด์ง๋ค์ด์
'<' '>' ๋๋ฅด๋ฉด ์ด์ ํ์ด์ง, ๋ค์ํ์ด์ง๋ก ์ด๋
๐จ items์ด ์ ์ธ๋ ํจ์ ์์์ ๊ตฌํํ๊ฒ ์๋๋ผ์ items ๋ฅผ ๋ฐ์์ฌ ์ ์๋ค.
๊ทธ๋์ ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ displayList()์ ๋๊ฒจ์ค์ ๋์ค์ปค์
์ ๋ ๋๋งํด์๋ค.
leftBtn.addEventListener('click', function(clickedPage) {
if(currentPage > firstPage){ // 1ํ์ด์ง์ผ ๊ฒฝ์ฐ ์ ํ์ด์ง๋ก ์๊ฐ๋ค.
let currentBtn = document.querySelector('.page_list .active');
currentBtn.classList.remove('active'); // ์ง๊ธ ํ์ฑํ ๋์ด์๋ ๋ฒํผ ๋๊ณ
let prevBtn = currentBtn.previousSibling; // ์ง๊ธ ํ์ฑํ ๋์ด์๋ ๋ฒํผ์ ์ด์ ํ์ ๋ฅผ ๊ฐ์ ธ์จ๋ค.
prevBtn.classList.add('active');
currentPage = currentPage - 1; // ํ์ฌ ํ์ด์ง๋ฅผ ์ง๊ธ ํ์ด์ง - 1 ํด์ฃผ๊ธฐ
displayList(JSON.parse(localStorage.getItem('Discussions')), listElement, rows, currentPage); // items๋ฅผ ์ ๋ฌ๋ฐ์ง ๋ชปํด์ ํ์ฌ ๋ฐ์ดํฐ๋ก ๋ ๋๋ง ํด์ฃผ๊ธฐ
}
else{
alert('์ฒซ๋ฒ์งธ ํ์ด์ง์
๋๋ค.');
}
});
rightBtn.addEventListener('click', function() {
let lastPage = Math.ceil(JSON.parse(localStorage.getItem('Discussions')).length / rows); // ๋ง์ง๋ง ํ์ด์ง
if(currentPage < lastPage) { // ๋ง์ง๋ง ํ์ด์ง์ผ ๊ฒฝ์ฐ ๋ค์ ํ์ด์ง๋ก ์๊ฐ๋ค.
let currentBtn = document.querySelector('.page_list .active');
currentBtn.classList.remove('active');
let nextBtn = currentBtn.nextSibling;
nextBtn.classList.add('active');
currentPage = currentPage + 1;
displayList(JSON.parse(localStorage.getItem('Discussions')), listElement, rows, currentPage);
}
else{
alert('๋ง์ง๋ง ํ์ด์ง์
๋๋ค.');
}
});
๐ ์ฐธ๊ณ : Pagination in JavaScript
โ๏ธ ๋์ค์ปค์ ์ ์ง ๊ธฐ๋ฅ
โฐ 'localStorage๊ฐ ๋น ๊ฒฝ์ฐ' ์ '๋ด๊ฐ ์ถ๊ฐํ ๋ฐ์ดํฐ๊ฐ ์์ด์ ์ฐจ์๋ ๊ฒฝ์ฐ' ๋ฅผ ๋๋ ์ ๊ตฌํ
// ๊ฒฝ์ฐ์ ์ ๋๊ฐ ๋๋์ง ์์ผ๋ฉด discussions์ด ๊ณ์ ์ด๊ธฐํ ๋์ ์ถ๊ฐํ ๋ฐ์ดํฐ๊ฐ ๋ ์๊ฐ.
if(localStorage.length === 0){ // ์ ์ฅ๋ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด (๋ด๊ฐ ์ถ๊ฐํ ๊ฑฐ ์์ ๋)
localStorage.setItem('Discussions', JSON.stringify(agoraStatesDiscussions)); // ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ์ด๋ฏธ ์ฃผ์ด์ง agoraStatesDiscussion ๋ฐ์ดํฐ ์ ์ฅ
discussions = JSON.parse(localStorage.getItem('Discussions')); // ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ์ ์ฅํ ๋ฐ์ดํฐ ๋ด์์ฃผ๊ธฐ
displayList(discussions, listElement, rows, currentPage); // ํ๋ฉด์ ๋ด์์จ ๋ฐ์ดํฐ ๊ทธ๋ ค์ฃผ๊ธฐ
setupPagination(discussions, pageList, rows); // ํ์ด์ง๋ค์ด์
๊ทธ๋ ค์ฃผ๊ธฐ
}
else{ // ์ถ๊ฐ ํ ๊ฒ ์์ ๋
discussions = JSON.parse(localStorage.getItem('Discussions')); // ์ถ๊ฐํ๊ฒ ์์ ๊ฒฝ์ฐ์๋ ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ์ด๋ฏธ ์ ์ฅ๋์ด ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์จ๋ค.(๋ด๊ฐ ์ถ๊ฐํ ๋ฐ์ดํฐ๊น์ง ํฌํจ๋์ด์์)
displayList(discussions, listElement, rows, currentPage);
setupPagination(discussions, pageList, rows);
}
// js ์ ์ฒด์ ๊ตฌํํด์ค๋ค. -> ์๋ก๊ณ ์นจํ๊ฑฐ๋ ํ์ด์ง ์ด๋ํ์ ๋ ์๋ก์ด ํ๋ฉด์ ๋ณด์ฌ์ค์ผํ๋๊น
โฐ ๋ฒํผ ๋๋ฌ์ ๋์ค์ปค์
์ถ๊ฐํ์ ๊ฒฝ์ฐ ๊ทธ ๋์ค์ปค์
์ localStorage ์ ์ ์ฅํด์ค๋ค.
โฐ input์ ๋น์นธ์ด ์์ผ๋ฉด ์ถ๊ฐ ์๋๊ณ alert ๋์ด๋ค.
// submit ๋๋ฅด๋ฉด ๋์ค์ปค์
์ถ๊ฐํ๋ ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ
const submitBtn = document.querySelector('.form__submit');
let discussions= []; // ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ์๋ ๋ฐ์ดํฐ ๋ด์ ๋ฐฐ์ด ์ ์ธ
submitBtn.addEventListener('click', function(e) {
e.preventDefault();
let nameValue = document.querySelector('#name').value;
let titleValue = document.querySelector('#title').value;
let storyValue = document.querySelector('#story').value;
let form = document.querySelector('.form');
let currentTime = new Date();
const newDiscussion = {
id: 'random id',
createdAt: currentTime,
author: nameValue,
title: titleValue,
body: storyValue,
url: "https://github.com/codestates-seb/agora-states-fe/discussions/45",
avatarUrl: "./images/๊ณํผ_.png",
answer: null // ์ ๋ฃ์ด์ฃผ๋ฉด answer null ์๋๊ฑฐ if๋ฌธ์ ๊ฑธ๋ ค์ ์ค๋ฅ๋๋ค.
};
if(nameValue !== '' && titleValue !== '' && storyValue !== '' ){ // ๋น์นธ ์์ผ๋ฉด
agoraStatesDiscussions.unshift(newDiscussion); // ๋ฐ์ดํฐ ๋ฐฐ์ด์ ์๋ก๋ง๋ ๊ฐ์ฒด ์ถ๊ฐ
discussions.unshift(newDiscussion); // ์๋ discussions ๋ฐฐ์ด์ ์ถ๊ฐํ ๋ฐ์ดํฐ ๊ฐ์ฒด ์ถ๊ฐํด์ฃผ๊ณ
localStorage.setItem('Discussions', JSON.stringify(discussions)); // ์ถ๊ฐํ ๋ฐ์ดํฐ๊ฐ ๋ํด์ง discussions๋ฅผ ๋ค์ ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ๋ฐ์ดํฐ๋ก ๋ฃ์ด์ค๋ค.
discussionsCount.innerText = '( ' + discussions.length + ' )'; // ๋์ค์ปค์
๊ฐ์ ์
๋ฐ์ดํธ
displayList(JSON.parse(localStorage.getItem('Discussions')), listElement, rows, currentPage); // ์๋ก์ด ๋ฐ์ดํฐ ์ถ๊ฐํ์ ๋๋ ํ๋ฉด์ ๊ทธ๋ ค์ค์ผ ํ๋ฏ๋ก ํธ์ถ
setupPagination(JSON.parse(localStorage.getItem('Discussions')), pageList, rows); // ๋ฐ์ดํฐ๊ฐ ๋์์ ๋ ํ์ด์ง ์๊ฐ ๋์ด๋ ์ ์์ผ๋ฏ๋ก ํธ์ถ
form.reset();
}
else { // ๋น์นธ ์์ผ๋ฉด alert
alert('๋ชจ๋ ์
๋ ฅํด์ฃผ์ธ์.');
}
});
๐ localStroage ์ค๋ช ์ ์ฌ๊ธฐ๋ก
โ๏ธ ๋ต๋ณ ์์ผ๋ฉด ๋ต๋ณ ๋ฐ์ค๋ ๋ ๋๋ง
if(obj.answer !== null){ // ๋ต๋ณ ์์ผ๋ฉด ์ด๋ชจ์ง ๋์ฐ๊ณ
answeredCheck.textContent = '๐ฌ';
}
discussionAnswered.append(answeredCheck);
if(obj.answer !== null) {
// ๋ต๋ณ ์ ์ฒด ๋ฐ์ค
const answeredContainer = document.createElement("div");
answeredContainer.className = "answered__container";
answeredContainer.classList.add('hide'); // ์ฒ์์ ์๋ณด์ด๊ฒ ํ๋ค๊ฐ
itemLi.append(answeredContainer);
answeredCheck.addEventListener('click', function() { // ์ด๋ชจ์ง ๋๋ฅด๋ฉด ๋ณด์ด๊ฒ
answeredContainer.classList.toggle('hide'); // ๋ณด์๋ค ์๋ณด์๋ค
});
โ๏ธ ๋ฐํํ๋ฉด์ ์์ง์ด๋ ์ด๋ฏธ์ง ๋ง๋ค๊ธฐ (ํ๋ฉด์ ๋ฟ์ผ๋ฉด ๊ณต์ฒ๋ผ ํ๊ฒจ๋์จ๋ค)
โฐ canvas ์ฌ์ฉ
โฐ init() : ์ด๊ธฐํ ํจ์
let canvas = document.createElement('canvas'); // ์๋ค์ด ์์ง์ผ ์บ๋ฒ์ค ์์ฑ
canvas.id = "canvas";
body.prepend(canvas);
let getCanvas = document.querySelector('#canvas'); // ์บ๋ฒ์ค ๊ฐ์ ธ์ค๊ธฐ
let ctx = getCanvas.getContext('2d');
getCanvas.setAttribute("width", window.innerWidth);
getCanvas.setAttribute("height", window.innerHeight);
let canvasWidth = getCanvas.width, canvasHeight = getCanvas.height; // ์บ๋ฒ์ค ํฌ๊ธฐ ๋ด๊ธฐ
let circle = [
{ x: 100, y: 100, radius: 80} // ๊ณต ์ขํ, ๋ฐ์ง๋ฆ
]
let dx = 4;
let dy = 4; // ๊ณต ์๋ ์กฐ์
let anim; // ์ ๋๋ฉ์ด์
๋ด์ ๋ณ์
function init() {
anim = window.requestAnimationFrame(draw); // ์ ์ ํ ํ์ด๋ฐ์ draw ํจ์๋ฅผ ๊ณ์ ํธ์ถํ๋ค.
}
โ requestAnimationFrame() ์ด๋?
โฐ ๋ถ๋๋ฌ์ด ์ ๋๋ฉ์ด์ ๊ตฌํ์ ์ํด ์ฌ์ฉํ๋ค.
โฐ ๋งค๊ฐ๋ณ์๋ก ์ฝ๋ฐฑํจ์๋ฅผ ๋ฐ๋๋ฐ, ๋ฆฌํ์ธํธ ์ด์ ์ ์คํํ ํจ์์ด๋ค.
โฐ draw() : ์ค์ ๋ํ, ์ด๋ฏธ์ง๋ฅผ ํ๋ฉด์ ๊ทธ๋ ค์ฃผ๋ ํจ์
function draw() {
clear();
for(let i = 0; i < circle.length; i++){
ball(circle[i].x, circle[i].y, circle[i].radius);
circle[i].x += dx; // x ์ขํ๊ฐ ๊ณ์ ๋์ด๋๊ฒ
circle[i].y += dy; // y ์ขํ๊ฐ ๊ณ์ ๋์ด๋๊ฒ
if(circle[i].x >= canvasWidth - circle[i].radius || circle[i].x <= 0 + circle[i].radius){
dx = -dx; // ์ผ์ชฝ์ด๋ ์ค๋ฅธ์ชฝ ๋ฒฝ์ ๋ฟ์ผ๋ฉด - ๊ฐ์ ๊ณฑํด์ค์ ๋ฐ๋ ๋ฐฉํฅ์ผ๋ก ๊ฐ๊ฒ๋
}
if( circle[i].y >= canvasHeight - circle[i].radius || circle[i].y <= 0 + circle[i].radius){
dy = -dy;
}
}
anim = window.requestAnimationFrame(draw);
}
โฐ clear() : ์บ๋ฒ์ค ์ด๊ธฐํ ํด์ฃผ๋ ํจ์
// canvas ์ด๊ธฐํํจ์
function clear() { // ๋งค ํธ์ถ ์ ์บ๋ฒ์ค๋ฅผ ๋น์์ค๋ค.
ctx.clearRect(0, 0, canvasWidth, canvasHeight);
}
โฐ ball() : ๊ณต ๊ทธ๋ ค์ฃผ๋ ํจ์
// ๊ณต ๊ทธ๋ ค์ฃผ๋ ํจ์
function ball(x, y, r) {
let img = new Image();
img.src = './images/cinnamon.png';
ctx.fillStyle = "white";
ctx.beginPath();
ctx.arc(x, y, r, 0, Math.PI * 2, true);
ctx.closePath();
ctx.fill();
ctx.drawImage(img, x-80, y-80, 160, 160);
}
โ๏ธ ์๋จ๋ฐ์ ๋ฉ๋ด ๋๋ฅด๋ฉด ๋ซ๊ธฐ, ํญ์ผ๋ก ๋ด๋ฆฌ๊ธฐ, ํ๋ & ์ถ์
โฐ ๋๋ฅด๋ฉด ์ฌ๋ผ์ง๊ฑฐ๋ ํฌ๊ธฐ ๋ณํ ํ ์์์ class ์ ๊ฑฐ, ์ถ๊ฐ ํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํ
/* ๋ฉ๋ด ๋ฒํผ ๋๋ฅด๋ฉด */
let exitBtn = document.querySelector('.exitBtn');
let downBtn = document.querySelector('.downBtn');
let smallBtn = document.querySelector('.smallBtn');
let agorastatesTab = document.querySelector('.agorastatesTab');
exitBtn.addEventListener('click', function() {
main.classList.add('exit');
});
downBtn.addEventListener('click', function() {
agorastatesTab.classList.remove('change__opacity__zero');
agorastatesTab.classList.add('change__opacity__one');
main.classList.add('down');
main.classList.remove('up');
});
agorastatesTab.addEventListener('click', function() {
agorastatesTab.classList.remove('change__opacity__one');
agorastatesTab.classList.add('change__opacity__zero');
main.classList.add('up');
main.classList.remove('down');
});
smallBtn.addEventListener('click', function() {
if(main.classList.contains('sizeBig')){
main.classList.remove('sizeBig');
main.classList.add('sizeSmall');
}
else {
main.classList.add('sizeBig');
main.classList.remove('sizeSmall');
}
});
โฐ ์์ฌ์ด์
๋ฐ์ํ ๋ ์ด์์์ผ๋ก ๊ตฌํํ์ง ์์ ๊ฒ
์ฝ๋ ๋ฆฌํฉํ ๋ง ํ์ง ์์ ๊ฒ
๐ฃ ๊ตฌํ ํ๋ฉด
'CodeStates > Training' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
S2) Unit2. [์ค์ต] Beesbeesbees (0) | 2023.01.16 |
---|---|
[์ฝํ๋ฆฟ] Daily Coding (0) | 2023.01.13 |
Unit 10. [์ค์ต] ํ์๊ฐ์ ํ์ด์ง ์ ํจ์ฑ ๊ฒ์ฌ (0) | 2023.01.10 |
Unit 9. [์ค์ต]JavaScript Koans ๋ฌธ์ ํด๊ฒฐ (0) | 2022.12.26 |
Unit6. [์ค์ต] ๊ณ์ฐ๊ธฐ ๊ตฌํํ๊ธฐ (0) | 2022.12.21 |