[JS] Day10 - Hold Shit and Checkboxes

5157 ワード


demo:


https://danji-ya.github.io/JS_javascript30/10-HoldShitandCheckboxes/

Day10 - Hold Shit and Checkboxes


🎯 機能要件

  • Gmailのチェック機能と同様に、クリック後にshift+をクリックすると、中間の要素も一緒にチェックされます.
  • 🚀 学識


    Shiftキーの使用時にチェックボックスを繰り返します

    const checkboxes = document.querySelectorAll("input[type=checkbox]");
    
        let lastCheckedItem = undefined;
        
        [...checkboxes].map(checkbox => checkbox.addEventListener("click", e => {
            let isStart = false;
    
            if(e.shiftKey && e.target.checked) {
                
                if(!lastCheckedItem) return;
            
                [...checkboxes].map(checkbox => {
                    if(checkbox === lastCheckedItem || checkbox === e.target) {
                        isStart = !isStart;
                    }
    
                    if(isStart) checkbox.checked = true;
                });
            }
    
            lastCheckedItem = e.target;
        }));
    lastCheckedItemでは、最後にチェックしたアイテムを覚え、各イベントリスナーに値を共有できます.isStartは、クリックするたびに初期化され、通常チェックとshiftを押すチェックの間の値を判断することができる.+が無限大カード(スライダ)を実現する場合、
    1つ目の方法:
    左右に1回移動するごとに、最後の要素がその方向の最後にinsertAdjacentElementで貼り付けられて起動する.ただしdotを使用する場合、スキップした部分を一緒に貼る必要があるため、異なる方法を使用しています.
    2つ目の方法:
    基本sliderの左、右の先端にクローンelementを貼り付け、先端から反対側に移動すると、横にコピーした要素に移動し、transitionをnoneに変換して、その間に反対側に移動します.このようにdot移動を用いる場合,indexを簡単に用いるだけで移動できる.
    また、トップから反対側に使用する場合のみ、重複クリックを防止し、自然な移動を実現できます.

    https://danji-ya.github.io/JS_javascript30/00-infiniteCarousel/