ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

vue 双向滚动条拖动

2022-08-01 11:32:39  阅读:141  来源: 互联网

标签:box vue 鼠标 拖动 scrollLeft 滚动条 flag scrollTop event


onMounted(() => {
  const box = document.getElementById('gantt-box')
  let flag, downX, downY, scrollLeft, scrollTop
  box.addEventListener('mousedown', function (event) {
    flag = true;
    [downX, downY, scrollTop, scrollLeft] = [event.clientX, event.clientY, this.scrollTop, this.scrollLeft]
  })
  box.addEventListener('mousemove', function (event) {
    if (flag) { // 判断是否是鼠标按下滚动元素区域
      const [moveX, moveY] = [event.clientX, event.clientY]
      const scrollY = moveY - downY // 当前移动的x轴下标减去刚点击下去的x轴下标得到鼠标滑动距离
      const scrollX = moveX - downX
      this.scrollTop = scrollTop - scrollY // 鼠标按下的滚动条偏移量减去当前鼠标的滑动距离
      this.scrollLeft = scrollLeft - scrollX
    }
  })
  // 鼠标抬起停止拖动
  box.addEventListener('mouseup', function () {
    flag = false
  })
  // 鼠标离开元素停止拖动
  box.addEventListener('mouseleave', function (event) {
    flag = false
  })
})

css部分

    <div id="gantt-box">
      <div class="gantt-auto" />
    </div>

 

css 

#gantt-box {
  width: 1404px;
  height: 530px;
  overflow: auto;
  cursor: grab;
  .gantt-auto {
    width: 2404px;
    height: 1530px;
  }
  &::-webkit-scrollbar-track {
    border-radius: 12px;
    background: none;
    box-shadow: none;
  }
  &::-webkit-scrollbar{
    height: 12px;
    width: 12px;
  }
  &::-webkit-scrollbar-thumb {
    border-radius: 12px;
    background: rgba(52, 129, 223, 0.7);
  }
}

 

标签:box,vue,鼠标,拖动,scrollLeft,滚动条,flag,scrollTop,event
来源: https://www.cnblogs.com/dcyd/p/16539554.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有