【js---鼠标点击可拖动左右内容的实现】

js—鼠标点击可拖动左右内容的实现

实现效果

在这里插入图片描述

代码实现

<!DOCTYPE html>
<html>

<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>左右可拖动的内容显示区</title>
  <style>
     ul,
    li {
      margin: 0;
      padding: 0;
    }

    body {
      font: 14px/1.5 Arial;
      color: #666;
    }

    #box {
      position: relative;
      width: 600px;
      height: 400px;
      border: 2px solid #000;
      margin: 10px auto;
      overflow: hidden;
    }

    #box ul {
      list-style-position: inside;
      margin: 10px;
    }

   #top,
    #bottom {
      color: #FFF;
      width: 300px;
      height: 400px;
      overflow: hidden;
    }

     #top {
      background: green;
      float: left
    }

    #bottom {
      background: skyblue;
      float: right
    }
    #line {
      position: absolute;
      top: 0;
      left: 50%;
      height: 100%;
      width: 4px;
      overflow: hidden;
      background: red;
      cursor: w-resize;
    } 
  </style>
  <script>
    function $(id) {
      return document.getElementById(id)
    }
    window.onload = function () {
      var oBox = $("box"), oTop = $("top"), oBottom = $("bottom"), oLine = $("line");
      oLine.onmousedown = function (e) {
        // 记录鼠标按下的相对位置
        var disX = (e || event).clientX;//鼠标距离浏览器可视窗口的位置
        oLine.left = oLine.offsetLeft;//线条距离relative定位元素的左边
        document.onmousemove = function (e) {
          // 鼠标点击时oLine.left是确定的,所以要动态的计算出鼠标距离浏览器可视窗口的位置
          // 计算出分栏元素移动后的位置
          var iT = oLine.left + ((e || event).clientX - disX);
          // e:触发当前事件对象  tarnameb: 该事件的元素  srcElement:兼容IE浏览器
          var e = e || window.event, tarnameb = e.target || e.srcElement;
          // 取可视区域宽度和分栏可移动宽度的差值,计算出分栏的可移动距离限制
          var maxT = oBox.clientWight - oLine.offsetWidth;
          oLine.style.margin = 0;
          // 可能是负数或超出可移动范围,当 iT 小于 0 时,即分栏移动超出了左边界,把iT设置为0,
          // 为了避免分栏元素移动到容器的外部
          iT < 0 && (iT = 0);
          // iT 是分栏元素移动后的位置,而 maxT 则是分栏的最大可移动距离。当 iT 超过了 maxT 时,
          // 说明分栏已经移动到右边界的外部了,此时需要将 iT 的值设置为 maxT
          iT > maxT && (iT = maxT);
          // 让分栏元素实现跟随鼠标拖动而移动
          // oTop.style.width, 保证顶部占位元素的宽度和分栏元素的位置一致
          oLine.style.left = oTop.style.width = iT + "px";
          // 以保证底部占位元素的宽度和容器右边界之间的距离一致
          oBottom.style.width = oBox.clientWidth - iT + "px";
          $("msg").innerText ='iT' + iT +'oLine.left' + oLine.left + '(e || event).clientX' + (e || event).clientX + 'disx'+ disX + 'top.width:' + oLine.style.width + '---bottom.width:' + oBottom.style.width + '---oLine.offsetLeft:' + oLine.offsetLeft + '---disX:' + disX + '---tarnameb:' + tarnameb.tagName;
          // 阻止了默认事件和事件冒泡的触发
          return false
        };
        // 鼠标松开后,解除鼠标移动事件和鼠标松开事件的绑定,并且释放元素的鼠标捕获。
        document.onmouseup = function () {
          document.onmousemove = null;
          document.onmouseup = null;
          oLine.releaseCapture && oLine.releaseCapture()
        };
        // 实现鼠标捕获事件
        oLine.setCapture && oLine.setCapture();
        return false
      };
    };
  </script>
</head>

<body>
  <center>左右拖动红条改变显示区域宽度<span id="msg"></span></center>
  <div id="box">
    <div id="top">
      <ul>
        <li><a href="#" target="_blank">jQuery初学实例代码集</a></li>
        <li><a href="#" target="_blank">100多个ExtJS应用初学实例集</a></li>
        <li><a href="#" target="_blank">基于jQuery的省、市、县三级级联菜单</a></li>
        <li><a href="#" target="_blank">一个类似QQ网的JS相册展示特效</a></li>
        <li><a href="#" target="_blank">eWebEditor v4.60 最新通用精简版</a></li>
        <li><a href="#" target="_blank">FCKeditor 2.6.4.1 网页编辑器</a></li>
        <li><a href="#" target="_blank">jQuery平滑图片滚动</a></li>
        <li><a href="#" target="_blank">Xml+JS省市县三级联动菜单</a></li>
        <li><a href="#" target="_blank">jQuery 鼠标滑过链接文字弹出层提示的效果</a></li>
        <li><a href="#" target="_blank">JS可控制的图片左右滚动特效(走马灯)</a></li>
      </ul>
    </div>
    <div id="bottom">
      <ul>
        <li><a href="#" target="_blank">网页上部大Banner广告特效及图片横向滚动代码</a></li>
        <li><a href="#" target="_blank">FlexSlider网页广告、图片焦点图切换插件</a></li>
        <li><a href="#" target="_blank">兼容IE,火狐的JavaScript图片切换</a></li>
        <li><a href="#" target="_blank">jQuery仿ios无线局域网WIFI提示效果(折叠面板)</a></li>
        <li><a href="#" target="_blank">TopUp js图片展示及弹出层特效代码</a></li>
        <li><a href="#" target="_blank">jQuery仿Apple苹果手机放大镜阅读效果</a></li>
        <li><a href="#" target="_blank">Colortip 文字title多样式提示插件</a></li>
        <li><a href="#" target="_blank">网页换肤,Ajax网页风格切换代码集</a></li>
        <li><a href="#" target="_blank">超强大、漂亮的蓝色网页弹出层效果</a></li>
        <li><a href="#" target="_blank">jQuery 图像预览功能的代码实现</a></li>
      </ul>
    </div>
    <div id="line"></div>
  </div>
</body>

</html>

右边限制最大宽度和最小宽度

只需要改变对IT变量的限制即可

     //当 iT 小于 150 时,把iT设置为150,
     // 为了避免分栏元素移动到容器的外部
     iT < 150 && (iT =150);
     // iT 是分栏元素移动后的位置,而 maxT 则是分栏的最大可移动距离。当 iT 超过了 maxT 时,
     // 说明分栏已经移动到右边界的外部了,此时需要将 iT 的值设置为 maxT
     iT > 350 && (iT = 350);
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
实现鼠标拖动范围多选功能,可以借助 Element UI 提供的 el-table 组件提供的 selection-change 事件和 table 的 ref 属性进行操作。 以下是具体实现步骤: 1. 在 el-table 上添加 ref 属性,并绑定一个名称,方便在 JavaScript 中获取到它的实例。 2. 监听 el-table 的 selection-change 事件,该事件会在用户选择/取消选择表格中的行时触发。可以在事件处理程序中实现“范围多选”逻辑。 3. 在事件处理程序中,可以通过 $refs 来获取到 el-table 的实例,并调用实例的 toggleRowSelection 方法来实现行的选择/取消选择操作。该方法接受两个参数:当前行的数据和是否选中的标志。 4. 获取鼠标拖动的范围,遍历区域内所有的行,并通过 toggleRowSelection 方法来实现多选。 以下是一个简单的实现示例: ```html <template> <el-table :data="tableData" ref="table" @selection-change="handleSelectionChange" @mousedown="handleMouseDown" @mousemove="handleMouseMove" @mouseup="handleMouseUp" > <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column prop="age" label="年龄"></el-table-column> <el-table-column prop="address" label="地址"></el-table-column> </el-table> </template> <script> export default { data() { return { tableData: [ { name: '张三', age: 18, address: '北京' }, { name: '李四', age: 20, address: '上海' }, { name: '王五', age: 22, address: '广州' }, { name: '赵六', age: 24, address: '深圳' } ], isDragging: false, startRowIndex: -1, endRowIndex: -1 } }, methods: { handleSelectionChange(rows) { console.log(rows) }, handleMouseDown(event) { const table = this.$refs.table const cell = event.target.closest('td') if (cell) { const rowIndex = cell.parentNode.rowIndex - 1 if (event.ctrlKey) { // 如果按下了 Ctrl 键,则不会清除之前选中的行,仅仅添加新的选择 this.isDragging = true } else { // 如果没有按下 Ctrl 键,则清空之前选中的行,只保留当前选择的行 table.clearSelection() table.toggleRowSelection(this.tableData[rowIndex], true) } this.startRowIndex = rowIndex this.endRowIndex = rowIndex } }, handleMouseMove(event) { if (this.isDragging) { const table = this.$refs.table const cell = event.target.closest('td') if (cell) { const rowIndex = cell.parentNode.rowIndex - 1 this.endRowIndex = rowIndex const start = Math.min(this.startRowIndex, this.endRowIndex) const end = Math.max(this.startRowIndex, this.endRowIndex) for (let i = start; i <= end; i++) { table.toggleRowSelection(this.tableData[i], true) } } } }, handleMouseUp() { this.isDragging = false } } } </script> ``` 在上面的示例代码中,我们通过添加 @mousedown、@mousemove 和 @mouseup 事件来实现鼠标拖动范围多选功能。当用户在表格中按下鼠标左键时,会触发 @mousedown 事件,我们在事件处理程序中记录开始的行索引,并判断是否按下了 Ctrl 键,如果按下了 Ctrl 键,则不清除之前选中的行,仅仅添加新的选择。 当用户移动鼠标时,会触发 @mousemove 事件,在事件处理程序中记录结束的行索引,然后计算要选中的行范围,并遍历区域内所有的行,通过 toggleRowSelection 方法来实现多选。 当用户松开鼠标时,会触发 @mouseup 事件,我们在事件处理程序中标记鼠标不再处于拖动状态。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呐呐呐呐。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值