zoukankan      html  css  js  c++  java
  • JavaScipt30(第十个案例)(主要知识点:选中一个数组中间相连部分进行操作的一种思路)

    承接上文,第九个案例就不说了,是控制台的一些东西,一般用的很少,了解下就行了,想用的时候再翻api。这是第10个案例:

    需要实现的效果是:点击一个checkbox,然后按下shift点击另一个checkbox,将两个checkbox之间的checkbox全部选中。

    附上项目链接: https://github.com/wesbos/JavaScript30

    源码如下,我将觉得应该记录的点做了备注:

    /* 这个一般用的不多的人很难想到直接样式实现 */
    /* checkbox选中时 用相邻兄弟选择器将旁边的p元素画上穿过文本下的一条线*/
    input:checked + p {
      background: #F9F9F9;
      text-decoration: line-through;
    }
    <script>
        const checkboxes = document.querySelectorAll('.inbox input[type="checkbox"]');
        
        // 记录下上一次点击的checkbox,这个是我做的时候没想到的,我当时做的时候想的是去找这些checkbox里面选中的最前面那个.
        let lastChecked;
    
        function handleCheck(e) {
            // 定个flag,用于判断checkbox选中
            let inBetween = false;
            // e.shiftKey这个我原来是不知道的,以为要监听键盘事件才能知道是不是按了shift,走了弯路
            if (e.shiftKey && this.checked) {
                checkboxes.forEach(checkbox => {
                    // 循环一路走, 当前选中的checkbox与上次选中的,只会进入两次if,不管是从shift从上往下选还是从上往下选,第一次进去inBetween变成true,
                    // 第二次出来inBetween变成false,只有当前checkbox与lastChecked之间的inBetween才会为true,所以选中了两个checkbox之间的所有checkbox,很精妙
                    if (checkbox === this || checkbox === lastChecked) {
                        inBetween = !inBetween;
                    }
                    if (inBetween) {
                        checkbox.checked = true;
                    }
                });
            }
    
            lastChecked = this;
        }
    
        checkboxes.forEach(checkbox => checkbox.addEventListener('click', handleCheck));
    </script>
    好记性不如烂笔头,看到自己觉得应该记录的知识点,结合自己的理解进行记录,用于以后回顾。
  • 相关阅读:
    BFS visit tree
    Kth Largest Element in an Array 解答
    Merge k Sorted Lists 解答
    Median of Two Sorted Arrays 解答
    Maximal Square 解答
    Best Time to Buy and Sell Stock III 解答
    Best Time to Buy and Sell Stock II 解答
    Best Time to Buy and Sell Stock 解答
    Triangle 解答
    Unique Binary Search Trees II 解答
  • 原文地址:https://www.cnblogs.com/wangxi01/p/10649527.html
Copyright © 2011-2022 走看看