
ํํํ ๋ค์ด๊ฐ๋ ์ ํ ๊ณต์ ํํ์ด์ง์์ iPhone 14 ํ์ด์ง์ ๋ชจ์
๋ค์ด ํฅ๋ฏธ๋ก์ ํ ๋ถ๋ถ์ ํด๋ก ์ฝ๋ฉ ํด๋ณด์๋ค!
์ด์ ๋ชจ์
๋ค์ ์คํฌ๋กค ๋ชจ์
์ ์ค์ ์ ๋์ด gsap ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง์ด ํ์ฉํ๋๋ฐ ์ด๋ฒ ๋ชจ์
์ ํด๋ฆญ ์ด๋ฒคํธ๋ค์ด๋ผ jQuery, JavaScript๋ฅผ ์ด์ฉํด ๊ตฌํํ๋ค.

โฌ๏ธ HTML
<section class="sc-main">
<div class="group-title">
<h2 class="title">๋๋ผ์ ํ๊ฐ๋.</h2>
</div>
<div class="grouo-color">
<div class="color-txt">
<span class="txt">๋ฏธ๋๋์ดํธ</span>
<span class="txt">์คํ๋ผ์ดํธ</span>
<span class="txt">๋ ๋</span>
<span class="txt">๋ธ๋ฃจ</span>
<span class="txt">ํผํ</span>
<span class="txt">์๋ก</span>
</div>
<ul class="color-list">
<li class="color-item"><a href="" class="color-link midnight-btn"></a></li>
<li class="color-item"><a href="" class="color-link starlight-btn"></a></li>
<li class="color-item"><a href="" class="color-link red-btn"></a></li>
<li class="color-item"><a href="" class="color-link blue-btn on"></a></li>
<li class="color-item"><a href="" class="color-link purple-btn"></a></li>
<li class="color-item"><a href="" class="color-link yellow-btn"></a></li>
</ul>
</div>
<div class="group-phone">
<div class="inner">
<figure class="ph midnight"></figure>
<figure class="ph starlight"></figure>
<figure class="ph red"></figure>
<figure class="ph blue on"></figure>
<figure class="ph purple"></figure>
<figure class="ph yellow"></figure>
</div>
</div>
</section>
โฌ๏ธ CSS
.group-phone .inner {
position: relative;
top: 110px;
left: 50%;
transform: translateX(-50%);
width: 1144px;
height: 574px;
margin: auto 0;
transform-origin: 50% 50%;
transform: matrix(1.60574, 0.269279, -0.269279, 1.60574, -510.662, 196.845);
transition: transform 1s cubic-bezier(0.645,0.045,0.355,1);
}
.group-phone .inner.on {
transform: matrix(1.04327, -0.464493, 0.464493, 1.04327, -768.586, 130.872);
}
.group-phone .ph {
transform-origin: 0 0;
transition: transform 1s cubic-bezier(0.645,0.045,0.355,1);
}
.group-phone .midnight {
position: absolute;
transform: scale(0.51);
top: 233px;
left: 8px;
width: 532px;
height: 562px;
background-image: url(../img/midnight.jpg);
background-size: 532px 562px;
background-repeat: no-repeat;
mask-image: url(../img/mask_midnight.png);
-webkit-mask-image: url(../img/mask_midnight.png);
mask-repeat: no-repeat;
-webkit-mask-repeat: no-repeat;
mask-size: 532px 562px;
-webkit-mask-size: 532px 562px;
}
.group-phone .starlight {
position: absolute;
transform: scale(0.52);
top: 118px;
left: 111px;
width: 518px;
height: 582px;
background-image: url(../img/starlight.jpg);
background-size: 518px 582px;
background-repeat: no-repeat;
mask-image: url(../img/mask_midnight.png);
-webkit-mask-image: url(../img/mask_starlight.png);
mask-repeat: no-repeat;
-webkit-mask-repeat: no-repeat;
mask-size: 518px 582px;
-webkit-mask-size: 518px 582px;
}
/*...์๋ต*/
๋งํฌ์ ์ ํฌ๊ฒ ์์ดํฐ ์ปฌ๋ฌ ๋ฒํผ์ ๋๋ฌ์ค ์์ญ๊ณผ ์์ดํฐ ์ด๋ฏธ์ง๊ฐ ๋์ฌ ์์ญ์ผ๋ก ๋๋์๊ณ ์ปฌ๋ฌ ๋ฒํผ์ ๋๋ฌ์ค ์์ญ์ ํ ์คํธ, ์ปฌ๋ฌ ๋ฆฌ์คํธ๋ก ๋ค์ ํ๋ฒ ๋๋์ด ์ฃผ์๋ค.(ํ ์คํธ ์์น๊ฐ์ ๋ฐ๋ก ์ก๊ธฐ ์ํด ๋ถ๋ฆฌ)
ใ ค
css์์ ์์ดํฐ ์ด๋ฏธ์ง์ mask๋ฅผ ์์ด์ค ํ size์ repeat๊น์ง ์ค์ ํด์ฃผ์๋ค.transform-origin,transform์์ฑ์ ์ด์ฉํด ์ด๊ธฐ ์์น๋ฅผ ์ก์์ฃผ์๊ณ (์ด๋ matrix๊ฐ์ ์ ํ ์ฌ์ดํธ์ ์ ๋๊ฐ์ ์ด์ฉํ๋ค.)


โฌ๏ธ JS
const colorLink = document.querySelectorAll('.color-link');
colorLink.forEach(function(event) {
event.addEventListener('click', function() {
colorLink.forEach(function(e) {
e.classList.remove('on')
});
event.classList.add('on')
});
});
โฌ๏ธ CSS
.grouo-color .color-link {
display: block;
position: relative;
width: 20px;
height: 20px;
border-radius: 50%;
background: #f5f5f7 50%;
}
.grouo-color .color-link.on::after {
content: '';
display: block;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
width: 28px;
height: 28px;
border: 2px solid #0071e3;
border-radius: 50%;
box-sizing: border-box;
}
.color-link.midnight-btn {
background-color: #31353a;
}
.color-link.starlight-btn {
background-color: #f0ece8;
}
.color-link.red-btn {
background-color: #e11c2a;
}
.color-link.blue-btn {
background-color: #c0cfec;
}
.color-link.purple-btn {
background-color: #e7d7e9;
}
.color-link.yellow-btn {
background-color: #f5e488;
}
์ปฌ๋ฌ ๋งํฌ์ ํ๋์ border๊ฐ ์๊ธด๋ onํด๋์ค๋ฅผ ๋ฏธ๋ฆฌ ๋ง๋ค์ด ์ค ํ, ์๋ฐ์คํฌ๋ฆฝ์์
classListํจ์๋ฅผ ์ด์ฉํด onํด๋์ค๋ฅผ ๊ฐ์ ธ์์ฃผ๋๋ฐ ์ด๋foreach๋ฌธ์ ์ฌ์ฉํ๋ค. ์ํ๋ ์ปฌ๋ฌ๋ฅผ ๋๋ฃจ๋ฉด ํด๋น ์ปฌ๋ฌ์ border๊ฐ ์๊ธฐ๊ณ ๋๋จธ์ง ์ปฌ๋ฌ ๋ฒํผ์ border๊ฐ ์ฌ๋ผ์ง๋ ๊ฒ์ ๋ฐ๋ณต์์ผฐ๋ค.
const colorLink = document.querySelectorAll('.color-link'); ใ ค colorLink.forEach(function(event) { ใ ค event.classList.add('on') });์ฒ์ js์ฝ๋์ด๋ค. ๋จ์ํ ๋ฐ๋ณต๋ฌธ ์์ ํด๋์ค๋ง ๋ฃ์ด์ฃผ๋ฉด ๋ ๊ฑฐ๋ผ ์๊ฐํ๋ค๊ฐ ๊ตฌํ๋์ง ์์ ๊ตฌ๊ธ๋ง์ ํ๋ฉฐ ๋ฐ๋ณต๋ฌธ ์ฌ์ฉํด ๋ํ ์ดํด๋ฅผ ๋์ฌ ๋ค์ ์ฝ๋๋ฅผ ์ง ๊ฒฐ๊ณผ๋ฌผ์ ๋ง๋ค์๋ค.
$('.midnight-btn').click(function(){
$('.group-phone .inner').css("transform","matrix(1.24651, 1.43395, -1.43395, 1.24651, -109.06, 498.232)");
$('.midnight').addClass('on').siblings().removeClass('on');
})
$('.starlight-btn').click(function(){
$('.group-phone .inner').css("transform","matrix(1.50347, 1.10184, -1.10184, 1.50347, -224.817, 414.932)")
$('.starlight').addClass('on').siblings().removeClass('on');
})
$('.red-btn').click(function(){
$('.group-phone .inner').css("transform","matrix(1.64561, 0.755092, -0.755092, 1.64561, -364.436, 307.051)")
$('.red').addClass('on').siblings().removeClass('on');
})
$('.blue-btn').click(function(){
$('.group-phone .inner').css("transform","matrix(1.60574, 0.269279, -0.269279, 1.60574, -510.662, 196.845)")
$('.blue').addClass('on').siblings().removeClass('on');
})
$('.purple-btn').click(function(){
$('.group-phone .inner').css("transform","matrix(1.3532, -0.192071, 0.192071, 1.3532, -649.839, 140.245)")
$('.purple').addClass('on').siblings().removeClass('on');
})
$('.yellow-btn').click(function(){
$('.group-phone .inner').css("transform","matrix(1.04327, -0.464493, 0.464493, 1.04327, -768.586, 130.872)")
$('.yellow').addClass('on').siblings().removeClass('on');
})
์ ์ด์ฟผ๋ฆฌ๋ก click์ด๋ฒคํธ์์
css์์ฑ ๋ณํ์addclass()ํ์ ์ ํ์siblings()๋ฑ์ ์ฌ์ฉํ๋ค. ์ปฌ๋ฌ ๋ฒํผ์ ๋๋ฃจ๋ฉด ํด๋น ์ปฌ๋ฌ ์ด๋ฏธ์ง์ transform์ด ๋ณ๊ฒฝ๋๊ณ , ํจ๊ป ์ปฌ๋ฌ์ ํ ์คํธ์ ์ ์ฝ๋์์ ์ค์ ํด ์ฃผ์๋ ํ๋์ border๊ฐ ์ ํ์ง๋๋ก ํ๋ค.
ํด๋น ์ปฌ๋ฌ ์ธ์ ๋ค๋ฅธ ๋ฒํผ์ onํด๋์ค๋ฅผ ์ญ์ ํด์ฃผ๊ธฐ ์ํดremoveclass๋ฅผ ์ถ๊ฐํด์ฃผ์๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ก๋ง ๋์ ์ผ๋ก ๋ฒํผ๊ณผ ์ด๋ฏธ์ง๋ค์ด ํจ๊ป ์์ง์ผ ์ ์๋๋ก ๊ตฌํํ๊ณ ์ถ์์ง๋ง ๋งํ๋ ๋ถ๋ถ๋ค์ด ์์ด ์์ฌ์ ๋ค. ์์ ๋ง๋ค ์ฌ์ ๊ฐ ์๋ค๋ฉด ์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก๋ง ๊ตฌํํ๋ ค๊ณ ๊ณ์ ๊ณต๋ถํ๊ณ ์์ผ๋ฉฐ, ๋ค์๋ฒ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ด๋ฐ ๋ชจ์ ์ ๊ตฌํํด ๋ณผ์ ์๋๋ก ํด์ผ๊ฒ ๋ค.๐ธ