当前位置:   article > 正文

按住shift键多选demo(原生js实现)_js 实现excel shift键功能

js 实现excel shift键功能

有更加简单的思路或者在前端上有困惑、想要一起学习

实现思路:

1.两种选择模式:①单选模式;        ②多选模式;

2.直接点击,触发单选模式

3.在点击的时候,如果 shift 键处于keydown状态,则触发多选模式

4.应用于两种模式上的取消选中

 

代码实现:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <style>
  10. html,
  11. body,
  12. div,
  13. ul,
  14. li {
  15. margin: 0;
  16. padding: 0;
  17. }
  18. html {
  19. background-color: yellowgreen;
  20. }
  21. .wrapper {
  22. width: 500px;
  23. margin: 80px auto 0;
  24. border-radius: 10px;
  25. background-color: #fff;
  26. box-shadow: 10px 10px 2px rgba(0, 0, 0, .15);
  27. overflow: hidden;
  28. }
  29. .uList {
  30. width: 100%;
  31. list-style: none;
  32. }
  33. .uList li {
  34. display: flex;
  35. height: 75px;
  36. /* background-color: red; */
  37. border-bottom: 1px solid rgba(0, 0, 0, .4);
  38. }
  39. li .check,
  40. li .text {
  41. float: left;
  42. height: 100%;
  43. text-align: center;
  44. line-height: 75px;
  45. }
  46. li .check {
  47. width: 65px;
  48. border-right: 1px solid yellowgreen;
  49. }
  50. .check input[type='checkbox'] {
  51. cursor: pointer;
  52. }
  53. li .text {
  54. flex: 1;
  55. font-size: 24px;
  56. letter-spacing: 2px;
  57. }
  58. </style>
  59. <body>
  60. <div class="wrapper">
  61. <ul class="uList">
  62. <li>
  63. <div class="check"><input type="checkbox" name="" id=""></div>
  64. <div class="text">这是一个邮件收件箱</div>
  65. </li>
  66. <li>
  67. <div class="check"><input type="checkbox" name="" id=""></div>
  68. <div class="text">每个选项都可以选择</div>
  69. </li>
  70. <li>
  71. <div class="check"><input type="checkbox" name="" id=""></div>
  72. <div class="text">如果一直按着<code>shift</code></div>
  73. </li>
  74. <li>
  75. <div class="check"><input type="checkbox" name="" id=""></div>
  76. <div class="text">就可以同时选择多个选项</div>
  77. </li>
  78. <li>
  79. <div class="check"><input type="checkbox" name="" id=""></div>
  80. <div class="text">如果<code>shift</code>键松开</div>
  81. </li>
  82. <li>
  83. <div class="check"><input type="checkbox" name="" id=""></div>
  84. <div class="text">则不能再继续多选</div>
  85. </li>
  86. <li>
  87. <div class="check"><input type="checkbox" name="" id=""></div>
  88. <div class="text">只使用了原生js</div>
  89. </li>
  90. <li>
  91. <div class="check"><input type="checkbox" name="" id=""></div>
  92. <div class="text">这是我的成果♪(^∇^*)
  93. </div>
  94. </li>
  95. </ul>
  96. </div>
  97. <script>
  98. let checkBoxes = document.querySelectorAll("input[type='checkbox']");
  99. let texts = document.querySelectorAll(".text");
  100. for (let i = 0; i < checkBoxes.length; i++) {
  101. checkBoxes[i].onclick = function (e) {
  102. // 如果点击的时候,按住了shift键,则进入 多选模式
  103. if (e.shiftKey && this.checked) {
  104. if (checkBoxes[i].checked === true) {
  105. texts[i].innerHTML = `<del>${texts[i].innerHTML}</del>`;
  106. }
  107. }
  108. // 如果点击复选框的时候,没有按shift键,则进入 单选模式
  109. else if (this.checked === true && !e.shiftKey) {
  110. for (let j = 0; j < texts.length; j++) {
  111. texts[j].innerHTML = texts[j].innerHTML.replace("</del>", "").replace("<del>", "");
  112. checkBoxes[j].checked = false;
  113. }
  114. this.checked = true;
  115. texts[i].innerHTML = `<del>${texts[i].innerHTML}</del>`;
  116. }
  117. // 如果取消选中,则文本删除线消失
  118. if (this.checked === false) {
  119. texts[i].innerHTML = texts[i].innerHTML.replace("</del>", "").replace("<del>", ""); // 通过 字符串的replace()方法,把del标签删去
  120. }
  121. }
  122. }
  123. </script>
  124. </body>
  125. </html>

效果展示: 

shift key案例展示

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/477123
推荐阅读
相关标签
  

闽ICP备14008679号