美文网首页
js实现滑动选择checkbox

js实现滑动选择checkbox

作者: 我没事_就是有点难受 | 来源:发表于2021-03-01 23:30 被阅读0次

项目上最近有个需求,多个checkbox可以通过按下鼠标拖动鼠标选中checkbox,这样能方便选择多个复选框不用一个个手点


类似这种效果吧


滑动选择.gif
  1. 思考🤔:首先我想到的是自己去实现这个需求,如果通过原生js实现,那么转到项目上写一个react组件也能实现。

  2. 先是去网上百度了下有没有类似的需求,关于滑动选中发现网上几乎没有,于是乎自己动手写。

  3. 滑动选中无非就是涉及到原生dom的三种事件:onmousedown(鼠标按下时的回调)、onmouseover(鼠标移动到目标元素上的回调)、onmouseup(鼠标松开的回调)
    这几个事件快忘记的正好可以回忆一波。

总体大概思路:按下鼠标记下开始节点的索引,并给checkout添加监听事件onmouseover,鼠标移动过程中记录当前(结束)节点索引,通过遍历设置索引范围内的checkbox元素为选中态。

以下是代码

  1. html:
 <input name="0" onmousedown="addEvent(event)" onmouseup="removeEvent(event)" onclick="handleClick(event)" type="checkbox" /><br />
    <input name='1' onmousedown="addEvent(event)" onmouseup="removeEvent(event)" onclick="handleClick(event)" type="checkbox" /><br />
    <input name='2' onmousedown="addEvent(event)" onmouseup="removeEvent(event)" onclick="handleClick(event)" type="checkbox" /><br />
    <input name='3' onmousedown="addEvent(event)" onmouseup="removeEvent(event)" onclick="handleClick(event)" type="checkbox" /><br />
  1. js:
function mouseoverChecked(e) {
      var element = document.querySelectorAll('input');
      debugger;
      endIndex = +e.target.name;
      console.log('结束索引', endIndex);
      element.forEach(item => {
        item.checked = false;
      });
      for(let i=startIndex; i < endIndex + 1; i++) {
        element[i].checked = true;
      }
    }
    // 鼠标按下去绑定onmouseover监听
    function addEvent(e) {
        var element = document.querySelectorAll('input');
        startIndex = +e.target.name;
      console.log('开始索引', startIndex);
      e.currentTarget.checked = !e.currentTarget.checked;
      element.forEach(item => {
      item.addEventListener('mouseover', mouseoverChecked)
      });
  }

  // 鼠标松开解绑onmouseover监听
  function removeEvent(e) {
    var element = document.querySelectorAll('input');
    //   console.log('结束索引', e.target.name);
      element.forEach(item => {
      item.removeEventListener('mouseover', mouseoverChecked)
      });
  }
  1. 效果:
原生滑动.gif
  1. 拓展

通过原生js能实现的需求,那么放到项目上不管使react技术栈还是vue相信都能封装一个好的插件,后续考虑封装下react组件。

相关文章

  • js实现滑动选择checkbox

    项目上最近有个需求,多个checkbox可以通过按下鼠标拖动鼠标选中checkbox,这样能方便选择多个复选框不用...

  • js拖拽

    (1)原生js实现checkbox全选

  • jquery checkbox学习记录

    checkbox有哪些主要操作? 比如 利用js选择或者取消选择checkbox。 这个的原理是依据checkbo...

  • checkbox模拟移动端按钮切换

    为了实现前端的css与js彻底分离不再耦合,应用checkbox的css新的选择器进行代码的切换 代码 html代...

  • zTree.js的使用

    zTree.js的使用 zTree学习笔记一:实现checkbox、全选、取消全选功能

  • 开发过程记录关键点

    2021年2月19日 RecycleView 跟 CheckBox嵌套使用,滑动后已选中的CheckBox会取消选...

  • 常见tab效果的实现

    原生JS实现 tab栏切换地址JQ实现左侧菜单栏地址JQ实现滑动切换地址

  • 控制按钮可否点击。不可点击置灰

    主要想实现的功能就是,当checkBox未选择时,按钮置灰不可点击;当checkBox选中时,按钮可以点击并且变成...

  • Android style妙用

    checkbox 实现switch效果 原生的switch并不好看,自定义又很麻烦,如果大家不追求那个滑动的动画效...

  • CheckBox多选框

    CheckBox为CompoundButton子类 实现CheckBox,并输出选中CheckBox结果 取得已经...

网友评论

      本文标题:js实现滑动选择checkbox

      本文链接:https://www.haomeiwen.com/subject/rhdfqltx.html