β header
β νμ ν
β Swiper
β μμ½λμΈ
β fetch() ν¨μλ₯Ό νμ© jsonλ°μ΄ν°λ₯Ό νΈμΆ
π κΈ°μ‘΄ λͺ¨λ°μΌ cgvλ ν¬κΈ°μ λ§μΆ° μ€μ΄λ€μ΄λ λ°λ©΄, overflow: auto
λ₯Ό μ¬μ©νμ¬, νλ©΄ λ°μΌλ‘ λκ°κ² λλ©΄ μ€ν¬λ‘€μ ν μ μλ μμμΌλ‘ λ§λ€μλ€
.nav {
overflow: auto;
background: linear-gradient(to left,#ef642f,#fb4357);
}
π΄ κΈ°μ‘΄ λͺ¨λ°μΌ CGV
π μμ
ν CGV
무λΉμ°¨νΈ, μμμμ μ λλ₯΄λ©΄ λ°μ μ½ν
μ΄λκ° μ ννλ κ²μ νκ³ μΆμλ€. μν μ± λΏλ§μλλΌ, λ€μν ννμ΄μ§μμ μ¬μ©νκΈ° λλ¬Έμ,
μμ²λκ² μ€μνλ€κ³ μκ°νλ€.
κΌ μμλμ!!!
.container-chart{
display: none;
/*μ΄νμλ΅*/
&.active{
display: block;
}
}
.container-soon{
display: none;
/*μ΄νμλ΅*/
&.active{
display: block;
}
}
// .title-wrap ν΄λμ€ μμ μλ .name ν΄λμ€λ₯Ό κ°μ§ μμκ° ν΄λ¦λμμ λ μ€νλλ ν¨μ
$('.title-wrap .name').click(function(){
// ν΄λ¦λ μμμ data-container μμ± κ°μ κ°μ Έμ containerName λ³μμ ν λΉ
containerName = $(this).data('container')
// ν΄λ¦λ μμμ 'active' ν΄λμ€λ₯Ό μΆκ°νκ³ , νμ μμλ€μ 'active' ν΄λμ€λ₯Ό μ κ±°νμ¬ μ ν μμλ§ νμ±ν
$(this).addClass('active').siblings().removeClass('active')
// containerNameμ ν΄λΉνλ μμμ 'active' ν΄λμ€λ₯Ό μΆκ°νκ³ , νμ μμλ€μ 'active' ν΄λμ€λ₯Ό μ κ±°νμ¬ ν΄λΉ 컨ν
μ΄λλ§ νμ±ν
$(containerName).addClass('active').siblings().removeClass('active');
})
$(this).addClass('active').siblings().removeClass('active')
λ ν΄λ¦λ νμ 'active' ν΄λμ€λ₯Ό μΆκ°νμ¬ ν΄λΉ νμ νμ±ννκ³ , λ€λ₯Έ νμ λΉνμ±ν μ΄ λΆλΆμ ν λ©λ΄μμ νμ¬ μ νλ νμ κ°μ‘°νκ³ , λ€λ₯Έ νλ€μ λΉνμ±ννλ μν μ νλ€.
$(containerName).addClass('active').siblings().removeClass('active');
μ μ€μ νκ³Ό μ°κ²°λ 컨ν μΈ λ₯Ό νμ±ννκ³ , λ€λ₯Έ 컨ν μΈ λ λΉνμ±νν©λλ€. μ΄ λΆλΆμ νμ ν΄λΉνλ 컨ν μΈ λ₯Ό νλ©΄μ λνλ΄κ±°λ μ¬λΌμ§κ² νμ¬ μ¬μ©μμκ² μ νλ νμ λ΄μ©μ 보μ¬μ£Όλ μν
μ¦, λ μ€μ΄ ν¨κ» λμνμ¬ ν κ° μ ν ν¨κ³Όλ₯Ό λ§λ λ€. νλλ§ μμΌλ©΄ νμ μ ν μνλ λ³κ²½λμ§λ§, μ€μ 컨ν μΈ μ μ νμ μ΄λ£¨μ΄μ§μ§ μμ μ μλ€.
μ맀차νΈ, νμ¬μμμ, ICECON λ±λ λ§μ°¬κ°μ§λ‘ κ°μ λ°©μμΌλ‘ νμλ€.
$('.hash-item').click(function(e){
e.preventDefault();
// ν΄λ¦λ μμμ data-list μμ± κ°μ κ°μ Έμ tabName λ³μμ ν λΉ
tabName = $(this).data('list');
// ν΄λ¦λ μμμ 'active' ν΄λμ€λ₯Ό μΆκ°νκ³ , νμ μμλ€μ 'active' ν΄λμ€λ₯Ό μ κ±°νμ¬ μ ν μμλ§ νμ±ν
$(this).addClass('active').siblings().removeClass('active');
// tabNameμ ν΄λΉνλ μμμ 'active' ν΄λμ€λ₯Ό μΆκ°νκ³ , νμ μμλ€μ 'active' ν΄λμ€λ₯Ό μ κ±°νμ¬ ν΄λΉ ν λ΄μ©λ§ νμ±ν
$(tabName).addClass('active').siblings().removeClass('active');
})
cgv λͺ¨λ°μΌμ Swiperκ° λ§μ΄ μ¬μ©λμλ€.
πμ¬μ΄νΈ - https://swiperjs.com/
β slidesPerView
Swiperμ΅μ μ€μ νλμΈ slidesPerViewλ λ μ΄μμμ λ·°μ κ°μλ₯Ό μ€μ νλ€
β spaceBetweenβ
Swiperμ CSSμ μ§μ μ μΌλ‘ paddingμ΄λ marginμ μ£Όλ κ²μ μ μ’μνλ€
κ·Έλμ μ¬μ©νλ κ²μ΄ Swiperμ΅μ spaceBetweenμΌλ‘ μ¬λ°±μ μ£Όλ©΄ λλ€.
const contentSlide = new Swiper('.swiper.content-group',{
slidesPerView:"auto",
spaceBetween:10,
});
π μ μ© μ
λ§μ½μ, slidesPerViewλ₯Ό μ€μ νμ§ μμΌλ©΄,
μ¬λ°±μ΄ λ§μ΄ λ¨μΌλ©°, μ¬λΌμ΄λκ° λκΉμ§ κ°λ©΄, μ¬λΌμ΄λκ° μλλ νμμ΄ λ°μνλ€. λν spaceBetweenλ μ μ©μ΄ μλμλ€.
κ·Έλ¦¬κ³ μ€μμ΄νΌλ₯Ό μ¬μ©νλ©΄, CSSμ μ§μ μ μΌλ‘ paddingμ΄λ marginμ μ£Όμ§ μλλ‘ μ£Όμνμ!!
μμ½λμΈμ μμ½λμΈμ²λΌ μμλλ‘ μμ§μ΄λ μ λλ©μ΄μ
λλ¬Έμ λΆμ¬μ§ μ΄λ¦κ°λ€.(λνΌμ
)
μμ½λμΈμ μ°λ©΄ μ λ§ λ©μ§ μ λλ©μ΄μ
μ μλμ§λ§ μ λ§ μ μ©νκ² μ°μΌλ§ν μ λλ©μ΄μ
κ°λ€. μμλλ©΄ μ’μλ―!!
λ¨Όμ μμ½λμΈμ μ μ΄λ μν
$('.cinema-title').click(function(e){
e.preventDefault();
// ν΄λ¦λ μμκ° 'active' ν΄λμ€λ₯Ό κ°μ§κ³ μλμ§ νμΈ
if ($(this).hasClass('active')) {
// λ§μ½ ν΄λ¦λ μμκ° 'active' ν΄λμ€λ₯Ό κ°μ§κ³ μλ€λ©΄,
// 'cinema-title' ν΄λμ€λ₯Ό κ°μ§ λͺ¨λ μμμ 'active' ν΄λμ€λ₯Ό μ κ±°νκ³ ,
// 'cinema-imgbox' ν΄λμ€λ₯Ό κ°μ§ νμ μμλ€μ μλ‘ μ¨κΉ(slides up)
$('.cinema-title').removeClass('active').siblings('.cinema-imgbox').slideUp();
} else {
// ν΄λ¦λ μμκ° 'active' ν΄λμ€λ₯Ό κ°μ§κ³ μμ§ μλ€λ©΄,
// 'cinema-title' ν΄λμ€λ₯Ό κ°μ§ λͺ¨λ μμμ 'active' ν΄λμ€λ₯Ό μ κ±°νκ³ ,
// 'cinema-imgbox' ν΄λμ€λ₯Ό κ°μ§ νμ μμλ€μ μλ‘ μ¨κΉ(slides up)
$('.cinema-title').removeClass('active').siblings('.cinema-imgbox').slideUp();
// νμ¬ ν΄λ¦λ μμμ 'active' ν΄λμ€λ₯Ό μΆκ°νκ³ ,
// 'cinema-imgbox' ν΄λμ€λ₯Ό κ°μ§ νμ μμλ€μ μλλ‘ λνλ(slides down)
$(this).addClass('active').siblings('.cinema-imgbox').slideDown();
}
})
π .cinema-title
λ₯Ό ν΄λ¦ νμ λ, .active
κ° μλμ§ μ¬λΆλ₯Ό λ³΄κ³ νμ μμμΈ .cinema-imgbox
λ₯Ό μλ‘ μ¨κΈ°κ±°λ(slides up) μλλ‘ λνλ(slides down)
ββββ λ§μ½ elseλΈλ‘
μ μλ $('.cinema-title').removeClass('active').siblings('.cinema-imgbox').slideUp();
κ° μμΌλ©΄
λ€λ₯Έ .cinema-title
λ₯Ό ν΄λ¦ν΄λ κ³μ μ΄λ¦°μνλ‘ μ μ§λλ κΌ μΆκ°ν΄μ£Όμ~
π μ μ©
μ맀차νΈ, νμ¬μμμ ~ CGV Only λ²νΌμ λλ₯΄λ©΄ λΆλ₯λ λ°μ΄ν°λ₯Ό λΆλ¬μ¬ μ μλλ‘ νμλ€.
μΉ΄ν κ³ λ¦¬λ³λ‘ λΆλ₯νκΈ° μν΄ chartList,currentList,onlyListλ‘ λλμ΄ νμΌμ λ§λ€μλ€.
{
"chartList": [
{
"id": 0,
"age": "All",
"cgvOnly": false,
"rank": 1,
"thumbNail": "https://img.cgv.co.kr/Movie/Thumbnail/Poster/000087/87433/87433_320.jpg",
"type": {
"iMax": true,
"4DX": false,
"screenX": false
},
"title": "κ·Έλλ€μ μ΄λ»κ² μ΄ κ²μΈκ°",
"rate": {
"adv": "26.9%",
"egg": "99%"
},
"view": null,
"dDay": "D-7"
},
/*μ΄νμλ΅*/
],
"currentList":[
{
"id":0,
"age":"All",
"cgvOnly":true,
"rank":1,
"thumbNail":"https://img.cgv.co.kr/Movie/Thumbnail/Poster/000087/87422/87422_320.jpg",
"type":{
"iMax":false,
"4DX":false,
"screenX":true
},
"title":"λ°λ λ°λΌ λ§λ리 : κΉνΈμ€μ κ³μ ",
"rate":{
"adv":"13.1%",
"egg":"92%"
},
"view":170,
"dDay":null
},
/*μ΄νμλ΅*/
],
"iceconList":[
/*μλ΅*/
],
"artList":[
/*μλ΅*/
],
"onlyList":[
{
"id":0,
"age":"All",
"cgvOnly":true,
"rank":1,
"thumbNail":"https://img.cgv.co.kr/Movie/Thumbnail/Poster/000087/87500/87500_320.jpg",
"type":{
"iMax":false,
"4DX":false,
"screenX":false
},
"title":"ν λ²νΌμ ν¬λ¦¬μ€λ§μ€ μ
λͺ½",
"rate":{
"adv":"3.2%",
"egg":"?"
},
"view":"5.4λ§",
"dDay":null
},
/*μ΄ν μλ΅*/
]
}
fetch('./assets/data/movie.json')
.then(res=>res.json())
.then(json=>{
// λ€μν μΉ΄ν
κ³ λ¦¬μ ν΄λΉνλ λ°μ΄ν°λ€μ λ³μμ μ μ₯
const booking = json.chartList; // μλ§€μ°¨νΈ λ°μ΄ν°
const current = json.currentList; // νμ¬ μμμ λ°μ΄ν°
const iceCon = json.iceconList; // μΌμκ΄ λ°μ΄ν°
const artHouse = json.artList; // μνΈνμ°μ€ λ°μ΄ν°
const cgvOnly = json.onlyList; // CGV Only λ°μ΄ν°
/* μλ§€μ°¨νΈ */
let bookingHtml = ``; // μ맀차νΈμ λν HTMLμ μ μ₯ν λ³μ
// μλ§€μ°¨νΈ λ°μ΄ν°λ₯Ό μννλ©΄μ HTMLμ μμ±
booking.forEach(() => {
// μ¬κΈ°μ μλ§€μ°¨νΈ λ°μ΄ν°λ₯Ό μ΄μ©νμ¬ HTML μμ±νλ μ½λκ° λ€μ΄κ°λ€.
bookingHtml +=
`<li class="swiper-slide content-item">
<div class="movie-poster">
<a class="detail-link" href="#"></a>
<div class="asdf">
<div class="onlyage-wrap">
${only}
<div class="screen-type">
<img src="${screenTypeImage}" alt="" style="${displayStyle}">
</div>
<i class="age age${element.age}">
<span class="blind">
12μΈκ΄λκ°
</span>
</i>
</div>
<img src="${element.thumbNail}" alt="">
<span class="ranking">
<span class="rank-img">
<img src="./assets/images/ranknum${element.rank}.png" alt="">
</span>
<span class="per">${element.rate.adv}</span>
</span>
</div>
</div>
/* μ΄νμλ΅ */
`
});
/* νμ¬μμμ */
let currentHtml = ``; // νμ¬μμμμ λν HTMLμ μ μ₯ν λ³μ
// νμ¬μμμ λ°μ΄ν°λ₯Ό μννλ©΄μ HTMLμ μμ±
current.forEach(() => {
// νμ¬μμμ λ°μ΄ν°λ₯Ό μ΄μ©νμ¬ HTML μμ±νλ μ½λκ° λ€μ΄κ°λ€.
currentHtml += `μμ λ°©μκ³Ό λΉμ·ν¨`
});
.
. /* μλ΅ */
.
/* cgv only */
let cgvOnlyHtml = ``; // CGV μ μ©μ λν HTMLμ μ μ₯ν λ³μ
// CGV Only λ°μ΄ν°λ₯Ό μννλ©΄μ HTMLμ μμ±
cgvOnly.forEach(() => {
// CGV Only λ°μ΄ν°λ₯Ό μ΄μ©νμ¬ HTML μμ±νλ μ½λκ° λ€μ΄κ°λ€.
cgvOnlyHtml += `μμ λ°©μκ³Ό λΉμ·ν¨`
});
}
${only}
λ λ°μ΄ν°νμΌμμ cgvOnlyκ° true
, false
μ λ°λΌμ λμ€κΈ° λλ¬Έμ 쑰건μμ μ¬μ©νλ€.
onlyEl = `
<div class="only-box">
<img src="https://img.cgv.co.kr/Movie/Thumbnail/PosterIcon/16231991733190.png" alt="" style="">
</div>
`;
// `element.cgvOnly`κ° μ‘΄μ¬νλμ§ νμΈν νμ 쑰건μ λ°λΌ `only` λ³μμ ν λΉ
// `element.cgvOnly`κ° μ‘΄μ¬νλ©΄ `onlyEl` λ³μμ κ°μ ν λΉνκ³ , κ·Έλ μ§ μμΌλ©΄ λΉ λ¬Έμμ΄μ ν λΉν©λλ€.
let only = element.cgvOnly ? onlyEl : "";
${screenTypeImage}
λ μ€ν¬λ¦°μ΄ iMax, 4DX, screenXμ λ°λΌμ λμ€λ μ΄λ―Έμ§κ° λ€λ₯΄κΈ° λλ¬Έμ 쑰건μ λ°λΌ μ΄λ―Έμ§ URLμ ν λΉνκ±°λ null
κ°μ ν λΉν μ μκ² μ‘°κ±΄μμ μ¬μ©νλ€.
// κ° μ‘°κ±΄μ νΉμ μ’
λ₯μ μν μ€ν¬λ¦° νμ
μ λ°λΌ λ€λ₯Έ μ΄λ―Έμ§λ₯Ό μ¬μ©
let screenTypeImage =
element.type && element.type.iMax
? "https://img.cgv.co.kr/WebApp/images/main/@3x/ico_screenType0.png"
: element.type && element.type["4DX"]
? "https://img.cgv.co.kr/WebApp/images/main/@3x/ico_screenType1.png"
: element.type && element.type.screenX
? "https://img.cgv.co.kr/WebApp/images/main/@3x/ico_screenType2.png"
: null;
// `screenTypeImage` λ³μμ μ΄λ―Έμ§ URLμ΄ μ‘΄μ¬νλμ§ νμΈνμ¬ `displayStyle` λ³μμ CSS μ€νμΌμ μ€μ
// μ΄λ―Έμ§ URLμ΄ μ‘΄μ¬νλ©΄ λΉ λ¬Έμμ΄μ, κ·Έλ μ§ μμΌλ©΄ 'display: none;' μ€νμΌμ ν λΉ
let displayStyle = screenTypeImage ? '' : 'display: none;';
μ΄λ°μμΌλ‘ λͺ¨λ μΉ΄ν κ³ λ¦¬μ 쑰건μμ΄ νμν λΆλΆμ μ μ©ν΄μ λ°μ΄ν°λ₯Ό λΆλ λ€.