-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmovie.js
109 lines (92 loc) · 3.72 KB
/
movie.js
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
document.addEventListener('DOMContentLoaded', function () {
const options = {
method: 'GET',
headers: {
accept: 'application/json',
Authorization: 'Bearer eyJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJmMmZiNGNjMDVlY2UzYmVlYzA5YzFlZWE0MTA1YjY1ZSIsInN1YiI6IjY2MjY0MWM5NjNlNmZiMDE3ZWZjZDU5ZCIsInNjb3BlcyI6WyJhcGlfcmVhZCJdLCJ2ZXJzaW9uIjoxfQ.iV4EB4KeKrhxS9-JgkN2hfI9gkbQb5GmenzTWvEdv8A'
}
};
// 영화 정보 불러오기
fetch('https://api.themoviedb.org/3/movie/top_rated?language=en-US&page=1', options)
.then(response => response.json())
.then(data => displayMovies(data.results))
.catch(err => console.error(err));
// 14번줄까지 tdmb 세팅 코드.
//html 요소 가져오기
const searchInput = document.getElementById('searchInput');
const searchButton = document.getElementById('searchButton');
const movieContainer = document.getElementById('movieContainer');
// 검색 입력란에 포커스
searchInput.focus();
// 검색 버튼 눌렀을 때 이벤트 처리
searchButton.addEventListener('click', () => {
const query = searchInput.value.trim().toLowerCase();
if (query !== '') {
searchMovies(query);
}
});
// 검색 함수
function searchMovies(query) {
const apiKey = 'eyJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJmMmZiNGNjMDVlY2UzYmVlYzA5YzFlZWE0MTA1YjY1ZSIsInN1YiI6IjY2MjY0MWM5NjNlNmZiMDE3ZWZjZDU5ZCIsInNjb3BlcyI6WyJhcGlfcmVhZCJdLCJ2ZXJzaW9uIjoxfQ.iV4EB4KeKrhxS9-JgkN2hfI9gkbQb5GmenzTWvEdv8A';
const apiUrl = `https://api.themoviedb.org/3/search/movie?api_key=${apiKey}&language=en-US&query=${query}&page=1&include_adult=false`;
fetch(apiUrl, options)
.then(response => response.json())
.then(data => {
displayMovies(data.results);
})
.catch(error => console.log('Error:', error));
}
// 영화 정보를 화면에 표시하는 함수
function displayMovies(movies) {
// documentFragment를 생성.
movieContainer.innerHTML = '';
const fragment = document.createDocumentFragment();
movies.forEach(movie => {
const {
id,
title,
overview,
poster_path,
vote_average
} = movie;
const imageUrl = poster_path ? `https://image.tmdb.org/t/p/w500${poster_path}` : 'https://via.placeholder.com/150';
const movieCard = document.createElement('div');
movieCard.classList.add('movie-card');
movieCard.innerHTML = `
<img src="${imageUrl}" alt="${title}">
<h3>${title}</h3>
<p>${overview}</p>
<p>평점: ${vote_average}</p>
`;
movieCard.addEventListener('click', () => {
movies.map(movie => {
if (movie.id === id) {
alert(`선택한 영화 ID: ${movie.id}`);
}
});
});
// fragment에 movieCard를 추가.
fragment.appendChild(movieCard); //fragment 사용 (피드백 반영 수정 부분)
});
// movieContainer에 한 번에 fragment를 추가.
movieContainer.appendChild(fragment);
};
// Enter 키로 검색 실행
searchInput.addEventListener('keypress', function (e) {
if (e.key === 'Enter') {
searchButton.click();
}
});
// TypeIt 효과 적용
new TypeIt("#multipleStrings", {
strings: ["내일 배움 캠프", "영화 검색 사이트"],
speed: 50,
waitUntilVisible: true,
}).go();
});
// let, const 만을 사용하여 변수 선언 O
// 화살표 함수 사용 O
// 배열 메소드 예시 중 2개 이상 사용 O (forEach, map)
// DOM 제어 - 예시 목록 중 2개 이상 사용 O (document.addEventListener, document.createElement)
/*대소문자 관계 없이 검색 가능하도록 하기 O*/
/*키보드 엔터키를 입력해도 검색버튼 클릭한 것과 동일하게 검색 실행 O*/