Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 게임제작
- 1인 게임
- 프로그래머스 #최소힙 #우선순위 큐
- 유니티3d
- 1인 게임 제작
- 합격
- Unity #Unity2D #Portal
- portal
- unity3d
- 게임 제작
- 1인 개발
- 유니티
- 1인 게임 개발
- Pong
- Unity
- Vampire Survivors
- 정보처리기사
- 3회차
- 게임 개발
- 게임
- 자바스크립트
- Unity2D
- 퐁
- 정처기 필기
- FPS
- 필기
- 정처기
- 자바스크립트 게임
- 유니티 3D
- 토이 프로젝트
Archives
- Today
- Total
Coding Feature.
JS) 영화 평점 시스템 #2 grid, js 파일 여러 개 사용 본문
Programming Language/JavaScript
JS) 영화 평점 시스템 #2 grid, js 파일 여러 개 사용
codingfeature 2023. 1. 12. 21:15grid 사용으로 영화 리스트와 별점을 매기는 공간을 나누고,
거기에 맞춰 js 파일을 두 개로 나누었다.
그리고 각자 submit, save 버튼 그리고 텍스트 상자를 추가하였다.
또한 새로운 배열 구조를 추가하여(arrAllMovieRatings)
리스트 내의 여러 영화 평점을 저장할 수 있도록 하였다.
script.js
const movieNameText = document.createElement('h1');
const movieName = document.createElement('h2');
const averageRatingText = document.createElement('h1');
const averageRating = document.createElement('h2');
const movieRatingSelections = ['작품성', '연기', '오락성','스토리'];
const ratingValues = [1, 2, 3, 4, 5];
const ratingStars = ['★', '★★', '★★★', '★★★★', '★★★★★']
const SaveRatingsBtn = document.createElement('input');
SaveRatingsBtn.setAttribute('type', 'button');
SaveRatingsBtn.setAttribute('value', 'save');
SaveRatingsBtn.setAttribute('onclick', 'onClickSaveBtn()');
const ratingPage = document.getElementById("rating");
const arrAllMovieRatings = [];
// 각 원소는 [작품성, 연기, 오락성, 스토리, 평균 점수] 값을 가진다.
function onClickSaveBtn(){
let tempArrMovieRatings = [];
for(movieRates in movieRatingSelections){
let tempRating = document.getElementById(movieRatingSelections[movieRates]);
tempArrMovieRatings.push(Number(tempRating.options[tempRating.selectedIndex].value));
}
tempArrMovieRatings.push(CalculateAverageRating());
arrAllMovieRatings.push(tempArrMovieRatings);
}
function ShowRatingOptions(){
for (select in movieRatingSelections){
let ratingText = document.createElement('h1');
let movieRatingSelection = document.createElement('select');
let movieRatingDiv = document.createElement('div');
movieRatingDiv.setAttribute("class", "movie-rating-div");
movieRatingSelection.setAttribute("id", movieRatingSelections[select]);
movieRatingSelection.setAttribute("onchange", "onChangeRating()");
ratingText.textContent = movieRatingSelections[select];
let i = 0;
for (ratevalue in ratingValues){
let movieRatingOption = document.createElement('option');
movieRatingOption.setAttribute('value', ratingValues[ratevalue]);
movieRatingOption.textContent = ratingStars[i];
movieRatingSelection.appendChild(movieRatingOption);
i++;
}
movieRatingDiv.appendChild(ratingText);
movieRatingDiv.appendChild(movieRatingSelection);
ratingPage.appendChild(movieRatingDiv);
}
}
function onChangeRating(){
averageRating.textContent = CalculateAverageRating() + '/' + ratingStars.length;
}
function CalculateAverageRating(){
let averageRateScore = 0;
for(movieRates in movieRatingSelections){
let tempRating = document.getElementById(movieRatingSelections[movieRates]);
averageRateScore += Number(tempRating.options[tempRating.selectedIndex].value);
}
return averageRateScore / movieRatingSelections.length;
}
function ShowAverageRating(){
averageRatingText.textContent = "평균 점수?";
ratingPage.appendChild(averageRatingText);
ratingPage.appendChild(averageRating);
}
function ShowMovieName(){
movieNameText.textContent = "영화 제목";
movieName.textContent = "아바타 2 : 물의 길";
ratingPage.appendChild(movieNameText);
ratingPage.appendChild(movieName);
}
ShowMovieName();
ShowRatingOptions();
ShowAverageRating();
ratingPage.appendChild(SaveRatingsBtn);
menu.js
const movieList = document.createElement("ol");
const menu = document.getElementById("menu");
const movieTitleNameTextBox = document.createElement("input");
const movieTitleNameSubmitButton = document.createElement("input");
movieTitleNameTextBox.setAttribute("type", "text");
movieTitleNameSubmitButton.setAttribute("type", "button");
movieTitleNameSubmitButton.setAttribute("value", "subnit");
let i = 0;
function onClickAddMovieTitleToList(){
let movieTitle = document.createElement("li");
movieTitle.textContent = movieTitleNameTextBox.value;
movieTitle.setAttribute('id', i+'-title-id');
movieList.appendChild(movieTitle);
movieTitleNameTextBox.value = '';
i++;
}
movieTitleNameSubmitButton.addEventListener("click", onClickAddMovieTitleToList);
menu.appendChild(movieList);
menu.appendChild(movieTitleNameTextBox);
menu.appendChild(movieTitleNameSubmitButton);
style.css
*{
margin:0px;
padding:0;
box-sizing: border-box;
font-family: 'Sofia Sans', sans-serif;
}
#menu{
text-align: center;
border-right: black solid 5px;
padding-right: 10px;
}
#rating{
justify-self: center;
text-align: center;
}
.container{
display:grid;
grid-template-columns: 1fr 6fr;
grid-template-rows: minmax(900px, auto);
}
.movie-rating-div{
margin: 20px;
}
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="container">
<div id="menu" class="item"></div>
<div id="rating" class="item"></div>
</div>
<script src="menu.js" type="text/javascript" class="item"></script>
<script src="script.js" type="text/javascript" class="item"></script>
</body>
</html>
이 다음으로는
영화 제목을 등록하고 별점을 등록하면,
리스트에 저장이 되도록하고,
사용자가 리스트에 있는 제목을 클릭할 때
다시 이전에 매겼던 별점을 불러올 수 있는 기능을 구현해야 한다.
위 내용이 구현되었다면,
각 별점 항목에 대해서 추가 코멘트를 작성할 수 있도록 하는 기능과
코멘트를 저장하는 자료 구조를 만들어야 한다.
'Programming Language > JavaScript' 카테고리의 다른 글
JS) 별점 시스템 만들기 #1 (0) | 2023.01.17 |
---|---|
JS) 코딩하다가 알게 된 사실. (다른 javascript 파일의 함수 사용) (0) | 2023.01.13 |
JS) 영화 평점 시스템 (select, option의 활용) (0) | 2023.01.12 |
JS) 바닐라 자바스크립트로 CRUD 구현. 맨 땅에 헤딩하기. (0) | 2023.01.11 |
JS) 리스트에 입력한 값 추가하는 웹 (0) | 2023.01.11 |