前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >实现盒子宽度随鼠标位置而改变

实现盒子宽度随鼠标位置而改变

作者头像
切图仔
发布2022-09-08 18:38:03
9690
发布2022-09-08 18:38:03
举报
文章被收录于专栏:生如夏花绚烂生如夏花绚烂

结构与样式

代码语言:javascript
复制
<div class="leftCategory">
      <div class="drag-line"></div>
</div>

.leftCategory {
  position: relative;
  width: 200px;
}
.drag-line{
  position: absolute;
  top:0;
  right:0;
  width: 6px;
  height: 100vh;
  z-index: 99;
  cursor: e-resize;
}

实现思路

当鼠标在拖动线(drag-line)区域内按下时,监听鼠标移动,获取鼠标移动的实时距离 将这个距离加上leftCategory本来的宽度,就是leftCategory随着鼠标移动的宽度

代码实现

代码语言:javascript
复制
// 获取元素在页面中的位置(X)
function getElementLeft(element) {
    var actualLeft = element.offsetLeft;   // 获取元素距离父元素的距离
    var current = element.offsetParent;   //这是获取父元素
    while (current !== null) {      //当它上面有元素时就继续执行
      actualLeft += current.offsetLeft;   //这是获取父元素距它的的父元素左上角的距离
      current = current.offsetParent;
    }
    return actualLeft;   
}

//  实现左侧分类树宽度自由改变
function treeAutoWidth(){
    // 获取当前拖动线在body中的位置
    let dragLinePositionX = 0
        // 鼠标实际移动的距离
    let mouseDistance = 0
    let dragLine = document.querySelector('.drag-line')
    let leftCategory = document.querySelector('.leftCategory')
    dragLine.onmousedown=function(e){
        document.onmousemove = function(e){
            dragLinePositionX = getElementLeft(dragLine)+dragLine.clientWidth 
            // 鼠标实际移动的距离 = 鼠标在body的位置减去 拖动线在body中的位置
            mouseDistance = e.x - dragLinePositionX 
            dragLine.style.transform=`translateX(${mouseDistance}px)`
            leftCategory.style.width=`${leftCategory.clientWidth + mouseDistance}px`
        }
        document.onmouseup=function(){
        document.onmouseup=null;
        document.onmousemove=null;
        };
    }
}

export default treeAutoWidth
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-04-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 结构与样式
  • 实现思路
  • 代码实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档