์ด๊ธฐํ๋ฉด
์ด๊ธฐ์ฝ๋
<!DOCTYPE html>
<html lang="ko">
<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>Click and Drag</title>
<link rel="stylesheet" href="style_JuneHyung.css">
</head>
<body>
<div class="items">
<div class="item item1">01</div>
<div class="item item2">02</div>
<div class="item item3">03</div>
<div class="item item4">04</div>
<div class="item item5">05</div>
<div class="item item6">06</div>
<div class="item item7">07</div>
<div class="item item8">08</div>
<div class="item item9">09</div>
<div class="item item10">10</div>
<div class="item item11">11</div>
<div class="item item12">12</div>
<div class="item item13">13</div>
<div class="item item14">14</div>
<div class="item item15">15</div>
<div class="item item16">16</div>
<div class="item item17">17</div>
<div class="item item18">18</div>
<div class="item item19">19</div>
<div class="item item20">20</div>
<div class="item item21">21</div>
<div class="item item22">22</div>
<div class="item item23">23</div>
<div class="item item24">24</div>
<div class="item item25">25</div>
</div>
<script>
</script>
</body>
</html>
๋ณต์ต
event.preventDefault
์ด๋ฒคํธ๋ฅผ ์ทจ์ํ ์ ์๋ ๊ฒฝ์ฐ, ์ด๋ฒคํธ์ ์ ํ๋ฅผ ๋ง์ง ์๊ณ , ๊ทธ ์ด๋ฒคํธ๋ฅผ ์ทจ์ํฉ๋๋ค.
const slider = document.querySelector('.items');
let isDown = false;
let startX;
let scrollLeft;
slider.addEventListener('mousedown', ()=>{
});
slider.addEventListener('mouseleave', ()=>{
});
slider.addEventListener('mouseup', ()=>{
});
slider.addEventListener('mousemove', ()=>{
});
slider.addEventListener('mousedown', (e)=>{
isDown = true;
slider.classList.add('active');
});
slider.addEventListener('mouseleave', ()=>{
isDown = false;
slider.classList.remove('active');
});
slider.addEventListener('mouseup', ()=>{
isDown = false;
slider.classList.remove('active');
});
slider.addEventListener('mousemove', (e)=>{
if(!isDown) return; // stop the fn from running
console.log(isDown);
});
mousedown()์ ํ์ ๋ active class๋ฅผ ์ถ๊ฐํ์ฌ ๋๋๊ทธ ํ ๋ ์ค ํจ๊ณผ๋ฅผ ์ค๋๋ค.
mouse์ด๋์ isDown์ด false๋ฉด ์๋ฌด๊ฒ๋ ๋ฆฌํดํ์ง์๊ณ , isDown์ธ๊ฒฝ์ฐ ์ด๋์ํฌ ์์ .
slider.addEventListener('mousedown', (e)=>{
isDown = true;
slider.classList.add('active');
startX = e.pageX - slider.offsetLeft;
scrollLeft = slider.scrollLeft;
});
slider.addEventListener('mouseleave', ()=>{
isDown = false;
slider.classList.remove('active');
});
slider.addEventListener('mouseup', ()=>{
isDown = false;
slider.classList.remove('active');
});
slider.addEventListener('mousemove', (e)=>{
if(!isDown) return; // stop the fn from running
if(!isDown) return; // stop the fn from running
e.preventDefault();
const x = e.pageX - slider.offsetLeft;
// const walk = (x - startX)*5;
const walk = (x - startX);
// cnosole.log(walk);
slider.scrollLeft = walk;
});
๋ง์ฐ์ค์ ์ด๋ ์ ์์น๋ฅผ ๋ค์ ์กฐ์ ํ๋ค.
์์ง์ด๊ธฐ๋ ํ๋ ์ ์์ ์ผ๋ก ์์ง์ด์ง ์์.
slider.addEventListener('mousedown', (e)=>{
isDown = true;
slider.classList.add('active');
startX = e.pageX - slider.offsetLeft;
scrollLeft = slider.scrollLeft;
});
slider.addEventListener('mousemove', (e)=>{
if(!isDown) return; // stop the fn from running
e.preventDefault();
const x = e.pageX - slider.offsetLeft;
// const walk = (x - startX)*5;
const walk = (x - startX);
// cnosole.log(walk);
slider.scrollLeft = scrollLeft - walk;
});
๊ธฐ์กด scrollLeft์ walk๊ฐ์ ๋บ๊ฐ์ ์ ์ฅ.
์ข ๋ ๋น ๋ฅด๊ฒ ์ด๋์ ์ํ๋ค๋ฉด walk๊ฐ์ *๋ฅผ ํด์ฃผ๋ฉด ๋ ๋นจ๋ฆฌ ์์ง์.
Github์์ ๊ฒฐ๊ณผํ๋ฉด์ ํ์ธํด์ฃผ์ธ์!
https://github.com/JuneHyung/JavaScript30/tree/master/27%20-%20Click%20and%20Drag