vue中的可拖拽宽度div的实现示例


Posted in Vue.js onApril 08, 2022

主要思路

  • 在需要拖拽宽度的区域设置一个div,高度设为 100%,宽度尽量窄一些(也不要太窄,3~6px左右)
  • 在此div上绑定当“鼠标按下”时,触发document绑定“鼠标移动”方法和"鼠标抬起"方法
  • 通过鼠标移动方法不断获取当前鼠标位置,设置需要变化大小div的宽高。
  • 鼠标抬起时取消鼠标移动方法和鼠标抬起方法的绑定。
<template>
  <div class="container" id="content_box">
    <div class="tab">左侧Tab</div>
    <div class="menu" ref="menu">
      左侧菜单
      <div class="menu-resize" ref="menuResize"></div>
    </div>
    <div class="content">
      中心区域
      <div class="opera" ref="opera">
        <div class="opera-resize" ref="operaResize"></div>
        操作区域
      </div>
    </div>
  </div>
</template>

<script>
export default {
  name: "dropWidth",
  mounted() {
    this.$nextTick(() => {
      this.dropSize();
    })
  },
  methods: {
    dropSize() {
      let that = this,
          menuWidth = 200,
          operaHeight = 200;
      this.$refs.menuResize.onmousedown = function () {
        document.onmousemove = function (e) {
          let clientX = e.clientX;
          // 最大宽度
          if(clientX>=330){
            clientX = 330;
          }
          // 最小宽度
          if(clientX<=230){
            clientX = 230;
          }
          // TODO 这里减的是最左侧tab的宽度
          menuWidth = clientX - 30;
          that.$refs.menu.style.width = clientX - 30 +"px";
        }

        document.onmouseup = function () {
          console.log('当前宽度', menuWidth);
          document.onmousemove = null;
          document.onmouseup = null;
          that.releaseCapture && that.releaseCapture()
        }
      }

      this.$refs.operaResize.onmousedown = function () {
        document.onmousemove = function (e) {
          let clientY = e.clientY;
          console.log(clientY)
          // 最大宽度
          if(clientY<=100){
            clientY = 100;
          }
          // 最小宽度
          if(clientY>=300){
            clientY = 300;
          }
          operaHeight = clientY;
          // TODO 这里需要取反向
          that.$refs.opera.style.height = 400 - clientY +"px";
        }

        document.onmouseup = function () {
          console.log('当前宽度', operaHeight);
          document.onmousemove = null;
          document.onmouseup = null;
          that.releaseCapture && that.releaseCapture()
        }
      }
    }
  }
}
</script>

<style scoped>
.container {
  width: 1000px;
  height: 400px;
  border: 2px solid #dddddd;

  display: flex;
  justify-content: center;
}

.tab {
  width: 30px;
  height: 100%;
  background-color: #EC8C32;

  flex-shrink: 0;
  flex-grow: 0;
}

.menu {
  width: 200px;
  background-color: #AAB6E0;

  flex-shrink: 0;
  flex-grow: 0;
  position: relative;
}

.content {
  width: 100%;
  position: relative;
}

.opera {
  width: 100%;
  height: 200px;
  position: absolute;
  bottom: 0;
  background-color: #F2BE25;
}

.menu-resize {
  width: 5px;
  height: 100%;

  position: absolute;
  top: 0;
  right: 0;
  cursor: col-resize;
}

.opera-resize {
  width: 100%;
  height: 5px;
  position: absolute;
  top: 0;
  left: 0;
  cursor: row-resize;
}
</style>

实现效果

vue中的可拖拽宽度div的实现示例

到此这篇关于vue中的可拖拽宽度div的实现示例的文章就介绍到这了,更多相关vue 可拖拽宽度div内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Vue.js 相关文章推荐
vue基于Echarts的拖拽数据可视化功能实现
Dec 04 Vue.js
vue实现购物车的小练习
Dec 21 Vue.js
vue3.0自定义指令(drectives)知识点总结
Dec 27 Vue.js
vue组件是如何解析及渲染的?
Jan 13 Vue.js
vue3.0 自适应不同分辨率电脑的操作
Feb 06 Vue.js
如何管理Vue中的缓存页面
Feb 06 Vue.js
vue首次渲染全过程
Apr 21 Vue.js
详细聊聊vue中组件的props属性
Nov 02 Vue.js
vue 数字翻牌器动态加载数据
Apr 20 Vue.js
vue里使用create, mounted调用方法
Apr 26 Vue.js
vue router 动态路由清除方式
May 25 Vue.js
vue递归实现树形组件
Jul 15 Vue.js
vue 实现弹窗关闭后刷新效果
Apr 08 #Vue.js
vue中this.$http.post()跨域和请求参数丢失的解决
Apr 08 #Vue.js
vue实现书本翻页动画效果实例详解
Apr 08 #Vue.js
vue实现列表拖拽排序的示例代码
vue实现可以快进后退的跑马灯组件
Apr 08 #Vue.js
Axios代理配置及封装响应拦截处理方式
vue-cil之axios的二次封装与proxy反向代理使用说明
Apr 07 #Vue.js
You might like
Aster vs KG BO3 第三场2.19
2021/03/10 DOTA
快速保存网页中所有图片的方法
2006/06/23 Javascript
分享十五个最佳jQuery 幻灯插件和教程
2010/03/27 Javascript
JQquery的一些使用心得分享
2012/08/01 Javascript
js Map List 遍历使用示例
2013/07/10 Javascript
js+css 实现遮罩居中弹出层(随浏览器窗口滚动条滚动)
2013/12/11 Javascript
JS实现当前页居中分页效果的方法
2015/06/18 Javascript
jquery实现图片放大镜功能
2015/11/23 Javascript
Bootstrap CSS组件之导航(nav)
2016/12/17 Javascript
Angular实现的日程表功能【可添加及隐藏显示内容】
2017/12/27 Javascript
JavaScript基于面向对象实现的猜拳游戏
2018/01/03 Javascript
layui表格 返回的数据状态异常的解决方法
2019/09/10 Javascript
HTML+JavaScript实现扫雷小游戏
2019/09/30 Javascript
在vs code 中如何创建一个自己的 Vue 模板代码
2020/11/10 Javascript
使用Python实现下载网易云音乐的高清MV
2015/03/16 Python
使用Protocol Buffers的C语言拓展提速Python程序的示例
2015/04/16 Python
Python六大开源框架对比
2015/10/19 Python
Python模块包中__init__.py文件功能分析
2016/06/14 Python
python 输出上个月的月末日期实例
2018/04/11 Python
Python面向对象之类的定义与继承用法示例
2019/01/14 Python
解决Python找不到ssl模块问题 No module named _ssl的方法
2019/04/29 Python
在python 中split()使用多符号分割的例子
2019/07/15 Python
python 提取文件指定列的方法示例
2019/08/07 Python
pytorch实现Tensor变量之间的转换
2020/02/17 Python
django的模型类管理器——数据库操作的封装详解
2020/04/01 Python
Python小白垃圾回收机制入门
2020/06/09 Python
东南亚地区最大的购物网站Lazada新加坡站点:Lazada.sg
2016/07/17 全球购物
梅西酒窖:Macy’s Wine Cellar
2018/01/07 全球购物
Luxplus荷兰:以会员价购买美容产品等,独家优惠
2019/08/30 全球购物
匈牙利超级网上商店和优惠:Alza.hu
2019/12/17 全球购物
英语系毕业生自荐信
2013/10/31 职场文书
庆祝教师节演讲稿
2014/09/03 职场文书
迎国庆横幅标语
2014/10/08 职场文书
SQL语法CONSTRAINT约束操作详情
2022/01/18 MySQL
Go语言grpc和protobuf
2022/04/13 Golang
详解Mysq MVCC多版本的并发控制
2022/04/29 MySQL