[JavaScript30] ๐Ÿ–ฑ 27. Click and Drag

์กฐ์ค€ํ˜•ยท2021๋…„ 8์›” 18์ผ
0

JavaScript30

๋ชฉ๋ก ๋ณด๊ธฐ
27/30

๐Ÿ–ฑ 27. Click and Drag

์ดˆ๊ธฐํ™”๋ฉด

์ดˆ๊ธฐ์ฝ”๋“œ

<!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

์ด๋ฒคํŠธ๋ฅผ ์ทจ์†Œํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ, ์ด๋ฒคํŠธ์˜ ์ „ํŒŒ๋ฅผ ๋ง‰์ง€ ์•Š๊ณ , ๊ทธ ์ด๋ฒคํŠธ๋ฅผ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค.

๐ŸŒ ๊ณผ์ •

๐Ÿ‘‰ 0. ๋ณ€์ˆ˜ ๋ฐ ์ƒ์ˆ˜ ์„ ์–ธ

const slider = document.querySelector('.items');
let isDown = false;
let startX;
let scrollLeft;

๐Ÿ‘‰ 1.mouseevent์ถ”๊ฐ€

slider.addEventListener('mousedown', ()=>{
       
    });
    slider.addEventListener('mouseleave', ()=>{
        
    });
    slider.addEventListener('mouseup', ()=>{
        
    });
    slider.addEventListener('mousemove', ()=>{
       
    });

๐Ÿ‘‰ 2.active์ถ”๊ฐ€

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์ธ๊ฒฝ์šฐ ์ด๋™์‹œํ‚ฌ ์˜ˆ์ •.

๐Ÿ‘‰ 3.startX์ˆ˜์ •

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;
});

๋งˆ์šฐ์Šค์˜ ์ด๋™ ์‹œ ์œ„์น˜๋ฅผ ๋‹ค์‹œ ์กฐ์ •ํ•œ๋‹ค.

์›€์ง์ด๊ธฐ๋Š” ํ•˜๋‚˜ ์ •์ƒ์ ์œผ๋กœ ์›€์ง์ด์ง„ ์•Š์Œ.

๐Ÿ‘‰ 4. ์ขŒํ‘œ์กฐ์ •

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์—์„œ ๊ฒฐ๊ณผํ™”๋ฉด์„ ํ™•์ธํ•ด์ฃผ์„ธ์š”!

๐ŸŒ Git

https://github.com/JuneHyung/JavaScript30/tree/master/27%20-%20Click%20and%20Drag

profile
๊นƒํ—ˆ๋ธŒ : github.com/JuneHyung

0๊ฐœ์˜ ๋Œ“๊ธ€