์บ๋ฌ์
๋ง๋ค๊ธฐ
์์ํ๋ฉด ๋ง๋ค๊ธฐ

<div style="overflow: hidden">
<div class="slide-container">
<div class="slide-box">
<img src="car1.png">
</div>
<div class="slide-box">
<img src="car2.png">
</div>
<div class="slide-box">
<img src="car3.png">
</div>
</div>
</div>
.slide-container {
width: 300vw;
transition: all 1s;
}
.slide-box {
width: 100vw;
float: left;
}
.slide-box img {
width: 100%;
}
- vw ๋จ์๋ ๋ธ๋ผ์ฐ์ ํญ์ ๋น๋กํ ๋จ์์
๋๋ค. 100vw๋ ๋ธ๋ผ์ฐ์ ํญ์ 100%์
๋๋ค.
- ์ด๋ ๊ฒ ์ฝ๋๋ฅผ ์งฐ๋๋ ์ด๋ฏธ์ง 3๊ฐ๊ฐ ๊ฐ๋ก๋ก ๋ฐฐ์น๋ฉ๋๋ค.
์ต์ข
ํ๋ฉด ๋ง๋ค๊ธฐ
- 2๋ฒ๋ฒํผ ๋๋ฅด๋ฉด 2๋ฒ์ฌ์ง์ด ์ฌ๋ผ์ด๋๋์ด์ ๋ณด์ด๋ ๊ฒ๊ณผ ๊ฐ์ ๊ฒ์ด ์ต์ข
ํ๋ฉด์.
- ์ด๋ค html ์์๋ฅผ ์ผ์ชฝ์ผ๋ก ์ด๋์ํค๋๊ฑด
margin-left ๋๋ transform์์ฑ์ ์ฌ์ฉํ๋ฉด ๋จ.
.slide-container {
width: 300vw;
transition: all 1s;
transform: translateX(-100vw);
}
- ์๊น ๋ง๋ cssํ์ผ ์ค ๊ฐ๋ก๋ก ๊ธด ๋ฐ์ค์
transform: translateX(-100vw) ์ถ๊ฐ
- ๊ทธ๋ฐ๋ฐ ์ฌ๊ธฐ์
-200vw๋ฅผ ์ฃผ๋ฉด 3๋ฒ์งธ ์ฌ์ง์ผ๋ก ๋์ด๊ฐ
- ์ด๊ฑธ ํ์ฉํด์ 3๋ฒ์ฌ์ง๊น์ง์ ์บ๋ฌ์
์ ๋ง๋ค ์ ์์ผ๋ ์ฐธ๊ณ .
์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋ ๋ง๋ค๊ธฐ
๋ค์๋ฒํผ, ์ด์ ๋ฒํผ์ ํด๋ฆญํ์์ ๋ฐ๋ฅธ ์กฐ๊ฑด๋ฌธ์ ํ์ฉํด์ ๋ง๋ค ์ ์์.
์บ๋ฌ์
์ ์ค์์ดํ ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ!!
-
๊ธฐ๋ฅ1. ๋ด๊ฐ ๋๋๊ทธํ ๊ฑฐ๋ฆฌ๋งํผ ๋ฐ์ค๋ ์ผ์ชฝ์ผ๋ก ์์ง์.
- ์ด๋๊ฑฐ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ๊ตฌํ ๊น??
- ๋ง์ฐ์ค ๋๋ฅผ ๋์ X์ขํ์์ ๋ง์ฐ์ค ์์ง์ผ ๋์ X์ขํ๋ฅผ ๋นผ๋ฉด ๋์ค์ง ์์๊น?
<div>์บ๋ฌ์
์๋๊ณณ</div>
<script>
$('.slide-box').eq(0).on('mousedown', function(e){
e.clientX โ ์ด๊ฑฐ๋
});
$('.slide-box').eq(0).on('mousemove', function(e){
e.clientX โ ์ด๊ฑฐ๋ฅผ ๋นผ์ผํ ๋ฏ
});
</script>
- ์ฌ๊ธฐ์ ์ฒซ๋ฒ์งธ e.clientX์ ๋๋ฒ์งธ e.clientX๋ฅผ ๋นผ๋ฉด ์ด๋๊ฑฐ๋ฆฌ์ธ๋ฐ
- ๊ทธ๋ฌ๋ ํจ์ ์์ ๋ณ์๋ ๋ฒ์๊ฐ ์์ด์ ํจ์ ๋ฐ๊นฅ์์ ์ธ ์ ์์..
- ๊ทธ๋์ ํจ์ ๋ฐ๊นฅ์์ ๋ณ์๋ฅผ ๋ง๋ค์ด ๋๊ณ ํจ์๋ผ๋ฆฌ ๋ณ์ ๊ณต์ ๊ฐ ๊ฐ๋ฅํ๊ฒ ํ๋ฉด ํด๊ฒฐ.
<script>
var ์์์ขํ = 0;
$('.slide-box').eq(0).on('mousedown', function(e){
์์์ขํ = e.clientX;
});
$('.slide-box').eq(0).on('mousemove', function(e){
console.log(e.clientX - ์์์ขํ)
});
</script>
์์์ขํ ๋ผ๋ ๋ณ์๋ฅผ ๋ง๋ค์ด์ ์ด๊ธฐ๊ฐ์ 0์ผ๋ก ์ฃผ๊ณ ๋ง์ฐ์ค ํด๋ฆญ ์ ํ์ฌ ์ขํ๋ฅผ ์์์ขํ์ ์ ์ฅํด๋ .
mousemove๋ผ๋ ์ด๋ฒคํธ ๋ฐ์ ์ ์์์ขํ ๋ ํ์ฌ์ขํ์ธ e.clientX๋ฅผ ๋นผ๋ฉด ๋๋๊ทธ ์ด๋๊ฑฐ๋ฆฌ๊ฐ ๋์ด.
-
๊ธฐ๋ฅ2. ์ ๋์ผ๋ฉด ๋๋ฒ์งธ ์ฌ์ง ๋ณด์(๋๋๊ทธ ์์ ๋ฐ๋ผ)
- ๊ทธ๋ฌ๋ฉด ์ด์ ์ด๋๊ฑฐ๋ฆฌ๋งํผ ๋ฐ์ค๋ ์ด๋ํ๋๋ก ์ฝ๋ ์์ฑ.
<script>
var ์์์ขํ = 0;
$('.slide-box').eq(0).on('mousedown', function(e){
์์์ขํ = e.clientX;
});
$('.slide-box').eq(0).on('mousemove', function(e){
console.log(e.clientX - ์์์ขํ)
$('.slide-container').css('transform', `translateX( ${e.clientX - ์์์ขํ}px )`)
});
</script>
translateX์ ์กฐ์ ํ๋ฉด ๋ฐ์ค๊ฐ ์ผ์ชฝ์ผ๋ก ์ด๋ํ์์.
- ๊ทธ๋ฐ๋ฐ ์ฌ๊ธฐ๊น์ง ํ๊ณ ๋๋ฉด ๋ง์ฐ์ค ํด๋ฆญ๋ ์ํ๋๋ฐ ๋ฐ์ค๊ฐ ์์ง์ด๊ณ ์์ํ
๋ฐ
- ํด๋ฆญํ๊ณ ๋์๋ง ๋ฐ์ค๋ฅผ ์ด๋ํด๋ฌ๋ผ๊ณ ์ฝ๋๋ฅผ ์์ฑํ์ง ์์๊ธฐ ๋๋ฌธ.
<script>
let ์์์ขํ = 0;
let ๋๋ ๋ = false;
$('.slide-box').eq(0).on('mousedown', function(e){
์์์ขํ = e.clientX;
๋๋ ๋ = true;
});
$('.slide-box').eq(0).on('mousemove', function(e){
if (๋๋ ๋ === true) {
$('.slide-container').css('transform', `translateX( ${e.clientX - ์์์ขํ}px )`)
}
});
</script>
๋๋ ๋๋ผ๋ ์ ์ญ๋ณ์๋ฅผ ์๋ก ๋ง๋ค์ด์ฃผ๊ณ ๋ง์ฐ์ค๋ฅผ ํด๋ฆญํ์ ๋ ๊ทธ ๊ฐ์ true๊ฐ ๋๋ฉฐ,
- ๋ง์ฐ์ค๋ฅผ ์์ง์์ ๋ ๋ง์ฝ
๋๋ฟ๋๋ผ๋ ๋ณ์์ ๊ฐ์ด true๋ฉด ์ฆ, ํด๋ฆญ์ด ๋ฌ๋ค๋ฉด
- ๋ฐ์ค๋ฅผ ์ด๋์์ผ๋ผ ๋ผ๋ ์๋ฏธ์ ์ฝ๋ ์์ฑ.
๐ฅ ์ฐธ๊ณ ์ฌํญ!
onmouse์ด๋ฒคํธ ๊ด๋ จ ํด๋น ์ด๋ฒคํธ๋ค ์์์ e.clientX๋ผ๋ ๊ฒ์ ํ์ฌ ๋ง์ฐ์ค ์์น์ X์ขํ๋ฅผ ๋ํ๋.
- ๊ทธ๋ผ
e.clientY๋ ํ์ฌ ๋ง์ฐ์ค ์์น์ Y์ขํ๋ฅผ ๋ปํจ.
์์)
$('.slide-box').eq(0).on('mousemove',function(e){
console.log(e.clientX)
})
์ง๊ธ๊น์ง๋ ๋ง์ฐ์ค ์ด๋๊ฑฐ๋ฆฌ๋งํผ ๋ฐ์ค ์ด๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋๋ฐ ๋ฐ๋๋ก ๋ง์ฐ์ค๋ฅผ ๋ ์๋ ์ด๋๊ฑฐ๋ฆฌ๊ฐ 100 ์ด์์ด๋ฉด 2๋ฒ ์ฌ์ง์, 100 ๋ฏธ๋ง์ด๋ฉด 1๋ฒ ์ฌ์ง์ผ๋ก ๋์์ค๋๋ก ๊ธฐ๋ฅ ๊ตฌํ์ ํด๋ณด๋ ค๊ณ ํจ.
<script>
(์๋ต)
$('.slide-box').eq(0).on('mouseup', function(e){
๋๋ ๋ = false;
if (e.clientX - ์์์ขํ < -100) {
$('.slide-container').css('transform', 'translateX(-100vw)');
} else {
$('.slide-container').css('transform', 'translateX(0vw)');
}
});
</script>
์คํฌ๋กค๋ฐ ๋ง๋ค๊ธฐ!
-
- ์ฌ๊ธฐ์
scroll์ด๋ผ๋ ์ด๋ฒคํธ๋ ์ผ์ชฝ์ ์๋ ์ ๊ฐ ์คํฌ๋กค ๋ ๋๋ง๋ค ์ฝ๋ฐฑํจ์๋ฅผ ์คํํด์ค๋ค๋ ์๋ฏธ.
window๋ document๋ณด๋ค ํฐ ์๋ฏธ๋ฅผ ๊ฐ์. ๊ทธ๋ฆฌ๊ณ scroll์ ์ฃผ๋ก window์ ์ฌ์ฉ๋จ.
window.scrollY : ์ ์ ๊ฐ ์ผ๋ง๋ ์คํฌ๋กค๋ฐ๋ฅผ ๋ด๋ ธ๋์ง px๋จ์๋ก ์๋ ค์ค.
window.scrollX : ๊ฐ๋ก๋ก ์ผ๋ง๋ ์คํฌ๋กคํ๋์ง ์๋ ค์ค๋๋ค. (๊ฐ๋ก ์คํฌ๋กค๋ฐ๊ฐ ์์ผ๋ฉด)
window.scrollTo(x, y) : ๊ฐ์ ๋ก ์คํฌ๋กค๋ฐ๋ฅผ ์์ง์ผ ์ ์์ต๋๋ค.
- ์์)
window.scrollTo(0, 100) : ์์์๋ถํฐ 100px ์์น๋ก ์คํฌ๋กค
window.scrollBy(x, y) : ํ์ฌ ์์น์์๋ถํฐ ์คํฌ๋กค
- ์์)
window.scrollBy(0, 100) : ํ์ฌ ์์น์์๋ถํฐ +100px ๋งํผ ์คํฌ๋กค
-
jQuery ๋ฒ์ ์ ๋ ๊ฐํธํจ..
$(window).scrollTop() : ํ์ฌ ํ์ด์ง ์คํฌ๋กค ์์ ์๋ ค์ค.
$(window).scrollTop(100) : ํ์ด์ง ๊ฐ์ ์ด๋๋ ํด์ค
๐ฅ์ฐธ๊ณ ์ฌํญ!!
overflow: scroll : ๋ด์ฉ๋ฌผ์ด ๋์น๋ฉด ์คํฌ๋กค๋ฐ๋ฅผ ์์ฑํด์ค.
document.querySelector('.lorem').scrollTop : lorem์ด๋ผ๋ ํด๋์ค๋ช
์ ๊ฐ์ง div๋ฐ์ค ์คํฌ๋กค ์
ํ์ฌ ํ์ด์ง ์คํฌ๋กค์ scrollY๋ฅผ ์ฐ์ง๋ง ์ผ๋ฐ div๋ฐ์ค ๊ฐ์๊ฑฐ์๋ scrollTop๋ฅผ ์ฌ์ฉ.
์
๋ ํฐ.scrollHeight : div์ ์คํฌ๋กค ๊ฐ๋ฅํ ์ค์ ๋์ด
์
๋ ํฐ.clientHeitght : ๋์ ๋ณด์ด๋ div ๋์ด
์คํฌ๋กค ์์ div์ ๋์ด์๋ ์ฐจ์ด๊ฐ ์๋๋ฐ ์ด์ ๋ ๋์ ๋ณด์ด๋ div๋ฐ์ค ๋์ด๋งํผ์ ์คํฌ๋กค ํ์ง ์์๊ธฐ ๋๋ฌธ.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ div์ ์คํฌ๋กค๋ฐ ๋ด๋ฆฐ ์ + ๋์ ๋ณด์ด๋ div๋ฐ์ค ๋์ด == div์ ์ค์ ๋์ด
์์) ์คํฌ๋กค๋ฐ๋ฅผ 100px์ด์ ๋ด๋ฆฌ๋ฉด ๋ก๊ณ ํฐํธ์ฌ์ด์ฆ ์ค์ด๊ณ 100px ๋ฏธ๋ง์ด๋ฉด ๋ค์ ๋๋ฆฌ๊ธฐ
window.addEventListener('scroll',function(){
if(window.scrollY>=100){
document.querySelector('.navbar-brand').style.fontSize = '20px'
}else if(window.scrollY<100){
document.querySelector('.navbar-brand').style.fontSize = '30px'
}
})
- ์คํฌ๋กค ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋ ๋ง์ฝ ํ์ฌ ์คํฌ๋กค๋ฐ ๋์ด๊ฐ 100px์ด์์ด๋ผ๋ฉด ํฐํธ ์ฌ์ด์ฆ๋ฅผ 20px๋ก ํ๊ณ ๊ทธ๋ ์ง ์๊ณ ๋ง์ฝ ํ์ฌ ์คํฌ๋กค๋ฐ ๋์ด๊ฐ 100px ๋ฏธ๋ง์ด๋ผ๋ฉด ํฐํธ์ฌ์ด์ฆ๋ฅผ 30px๋ก ๋๋ฆฐ๋ค.
ํ์์ฝ๊ด(div์์)์ ๋ค ์ฝ์ผ๋ฉด alert์ฐฝ์ด ๋์ค๊ฒ๋.
document.querySelector('.lorem').addEventListener('scroll',function(){
const scroll์ = document.querySelector('.lorem').scrollTop
const ์ค์ ๋์ด = document.querySelector('.lorem').scrollHeight
const div๋์ด = document.querySelector('.lorem').clientHeight
if(scroll์+div๋์ด==์ค์ ๋์ด){
alert('ํ์์ฝ๊ด ํ์ธ ์๋ฃ')
}
})
- lorem์ด๋ผ๋ ํด๋์ค ๋ช
์ ๊ฐ์ง
<div>์ ์คํฌ๋กค ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋,
- ํ์ฌ ์คํฌ๋กค์๊ณผ ๋์ ๋ณด์ด๋ ๋ฐ์ค์ ๋์ด๊ฐ ์ค์ ์คํฌ๋กค ๊ฐ๋ฅํ ๋์ด์ ๊ฐ๋ค๋ฉด
alert ๋์์ค.
- scroll ์ด๋ฒคํธ๋ฆฌ์ค๋ ์์ ์ฝ๋๋ 1์ด์ 60๋ฒ ์ด์ ์คํ๋จ.
- ๋ฐ๋ฅ ์ฒดํฌ๋ ์ฌ๋ฌ๋ฒ ์ค๋ณต์ผ๋ก ํด์ค ๋๊ฐ ์์.. ๊ทธ๋์ ์์ฃผ ์ฌ์ฉํ๋ฉด ์๋จ.