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动态合并单元格并添加小计合计功能示例
Nov 26 Vue.js
vue基于Echarts的拖拽数据可视化功能实现
Dec 04 Vue.js
Vue中强制组件重新渲染的正确方法
Jan 03 Vue.js
vue3.0中友好使用antdv示例详解
Jan 05 Vue.js
vue实现轮播图帧率播放
Jan 26 Vue.js
vue中h5端打开app(判断是安卓还是苹果)
Feb 26 Vue.js
Vue接口封装的完整步骤记录
May 14 Vue.js
vue使用echarts实现折线图
Mar 21 Vue.js
vue封装数字翻牌器
Apr 20 Vue.js
vue使用watch监听属性变化
Apr 30 Vue.js
Vue ECharts实现机舱座位选择展示功能
May 15 Vue.js
Vue Mint UI mt-swipe的使用方式
Jun 05 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
php魔术方法与魔术变量、内置方法与内置变量的深入分析
2013/06/03 PHP
CodeIgniter常用知识点小结
2016/05/26 PHP
php基于PDO连接MSSQL示例DEMO
2016/07/13 PHP
PHP 应用容器化以及部署方法
2018/02/12 PHP
Laravel框架使用Seeder实现自动填充数据功能
2018/06/13 PHP
PHP实现数组转JSon和JSon转数组的方法示例
2018/06/14 PHP
JavaScript获得选中文本内容的方法
2008/12/02 Javascript
前端开发过程中浏览器版本的两种判定方法
2013/10/30 Javascript
javascript的propertyIsEnumerable()方法使用介绍
2014/04/09 Javascript
jquery实现的树形目录实例
2015/06/26 Javascript
聊一聊JavaScript作用域和作用域链
2016/05/03 Javascript
Node.js中npm常用命令大全
2016/06/09 Javascript
javascript 中null和undefined区分和比较
2017/04/19 Javascript
使用bootstraptable插件实现表格记录的查询、分页、排序操作
2017/08/06 Javascript
AngularJS上传文件的示例代码
2018/11/10 Javascript
vue实现手机端省市区区域选择
2019/09/27 Javascript
JavaScript如何借用构造函数继承
2019/11/06 Javascript
python多进程提取处理大量文本的关键词方法
2018/06/05 Python
pandas 透视表中文字段排序方法
2018/11/16 Python
pandas使用apply多列生成一列数据的实例
2018/11/28 Python
python监测当前联网状态并连接的实例
2018/12/18 Python
Python实现滑动平均(Moving Average)的例子
2019/08/24 Python
python生成器用法实例详解
2019/11/22 Python
Python编程快速上手——strip()函数的正则表达式实现方法分析
2020/02/29 Python
Python3 assert断言实现原理解析
2020/03/02 Python
Pycharm新手使用教程(图文详解)
2020/09/17 Python
使用HTML5的链接预取功能(link prefetching)给网站提速
2012/12/13 HTML / CSS
美国宠物用品网站:Value Pet Supplies
2018/03/17 全球购物
Feelunique中文官网:欧洲最大化妆品零售电商
2020/07/10 全球购物
关于递归的一道.NET面试题
2013/05/12 面试题
创新型城市实施方案
2014/03/06 职场文书
物业前台接待岗位职责
2015/04/03 职场文书
会计岗位工作总结
2015/08/12 职场文书
2019年作为一名实习生的述职报告
2019/09/29 职场文书
Redis RDB技术底层原理详解
2021/09/04 Redis
戴尔Win11系统no bootable devices found解决教程
2022/09/23 数码科技