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 相关文章推荐
vue3.0实现插件封装
Dec 14 Vue.js
vue使用require.context实现动态注册路由
Dec 25 Vue.js
SpringBoot+Vue 前后端合并部署的配置方法
Dec 30 Vue.js
vue使用vue-quill-editor富文本编辑器且将图片上传到服务器的功能
Jan 13 Vue.js
vue前端和Django后端如何查询一定时间段内的数据
Feb 28 Vue.js
vue路由实现登录拦截
Mar 24 Vue.js
vue3获取当前路由地址
Feb 18 Vue.js
vue项目中的支付功能实现(微信支付和支付宝支付)
Feb 18 Vue.js
前端vue+express实现文件的上传下载示例
Feb 18 Vue.js
Vue监视数据的原理详解
Feb 24 Vue.js
Vue OpenLayer测距功能的实现
Apr 20 Vue.js
ant design vue的form表单取值方法
Jun 01 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
关于Iframe如何跨域访问Cookie和Session的解决方法
2013/04/15 PHP
控制PHP的输出:缓存并压缩动态页面
2013/06/11 PHP
thinkPHP框架中执行原生SQL语句的方法
2017/10/25 PHP
在laravel框架中使用model层的方法
2019/10/08 PHP
PHP变量的作用范围实例讲解
2020/12/22 PHP
JavaScript 定义function的三种方式小结
2009/10/16 Javascript
JavaScript 三种不同位置代码的写法
2009/10/25 Javascript
js 禁止选择功能实现代码(兼容IE/Firefox)
2010/04/23 Javascript
关于JS中的闭包浅谈
2013/08/23 Javascript
纯js实现倒计时功能
2017/01/06 Javascript
微信小程序实现倒计时60s获取验证码
2020/04/17 Javascript
Koa 中的错误处理解析
2019/04/09 Javascript
JQuery+Bootstrap 自定义全屏Loading插件的示例demo
2019/07/03 jQuery
JavaScript 作用域实例分析
2019/10/02 Javascript
python复制文件代码实现
2013/12/23 Python
python入门之语句(if语句、while语句、for语句)
2015/01/19 Python
Windows8下安装Python的BeautifulSoup
2015/01/22 Python
Python合并两个字典的常用方法与效率比较
2015/06/17 Python
Python的Scrapy爬虫框架简单学习笔记
2016/01/20 Python
如何用Python实现简单的Markdown转换器
2018/07/16 Python
python pexpect ssh 远程登录服务器的方法
2019/02/14 Python
使用PyTorch将文件夹下的图片分为训练集和验证集实例
2020/01/08 Python
Python 实现日志同时输出到屏幕和文件
2020/02/19 Python
python GUI库图形界面开发之PyQt5线程类QThread详细使用方法
2020/02/26 Python
css3和jquery实现自定义checkbox和radiobox组件
2014/04/22 HTML / CSS
加拿大消费电子和手机购物网站:The Source
2017/01/28 全球购物
娇韵诗法国官网:Clarins法国
2019/01/29 全球购物
高级Java程序员面试要点
2013/08/02 面试题
网上开商店的创业计划书
2014/01/19 职场文书
出纳工作岗位责任制
2014/02/02 职场文书
老同学聚会感言
2014/02/23 职场文书
文艺晚会主持词
2014/03/24 职场文书
音乐节策划方案
2014/06/09 职场文书
夫妻房产协议书的格式
2014/10/11 职场文书
邀请函模板
2015/02/02 职场文书
2015年驾驶员工作总结
2015/04/29 职场文书