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+iview实现文件上传
Nov 17 Vue.js
在Vue中使用Echarts可视化库的完整步骤记录
Nov 18 Vue.js
VUE+Element实现增删改查的示例源码
Nov 23 Vue.js
Vue 实现一个简单的鼠标拖拽滚动效果插件
Dec 10 Vue.js
vue+element实现动态加载表单
Dec 13 Vue.js
深入了解Vue动态组件和异步组件
Jan 26 Vue.js
vue 项目@change多个参数传值多个事件的操作
Jan 29 Vue.js
Vue 实例中使用$refs的注意事项
Jan 29 Vue.js
Vite和Vue CLI的优劣
Jan 30 Vue.js
Vue的列表之渲染,排序,过滤详解
Feb 24 Vue.js
vue实现拖拽交换位置
Apr 07 Vue.js
vue生命周期钩子函数以及触发时机
Apr 26 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 图片上添加透明度渐变的效果
2009/06/29 PHP
php 定义404页面的实现代码
2012/11/19 PHP
php 获取页面中指定内容的实现类
2014/01/23 PHP
php获取字段名示例分享
2014/03/03 PHP
Codeigniter中禁止A Database Error Occurred错误提示的方法
2014/06/12 PHP
PHP回调函数概念与用法实例分析
2017/11/03 PHP
JavaScript 函数调用规则
2009/09/14 Javascript
url 特殊字符 传递参数解决方法
2010/01/01 Javascript
Fastest way to build an HTML string(拼装html字符串的最快方法)
2011/08/20 Javascript
Jquery 表格合并的问题分享
2011/09/17 Javascript
通过$(this)使用jQuery包装后的方法或属性
2014/05/18 Javascript
js重写alert控件(适合学习js的新手朋友)
2014/08/24 Javascript
jQuery实现区域打印功能代码详解
2016/06/17 Javascript
JavaScript新增样式规则(推荐)
2016/07/19 Javascript
JSON对象 详解及实例代码
2016/10/18 Javascript
使用Node.js实现简易MVC框架的方法
2017/08/07 Javascript
基于JavaScript的数据结构队列动画实现示例解析
2020/08/06 Javascript
[01:02:18]VGJ.S vs infamous Supermajor 败者组 BO3 第一场 6.4
2018/06/05 DOTA
python使用reportlab实现图片转换成pdf的方法
2015/05/22 Python
Python中property属性实例解析
2018/02/10 Python
python实现SOM算法
2018/02/23 Python
Python文件常见操作实例分析【读写、遍历】
2018/12/10 Python
在Pycharm中设置默认自动换行的方法
2019/01/16 Python
Python实现查找数组中任意第k大的数字算法示例
2019/01/23 Python
python开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS)
2020/03/18 Python
python+opencv实现移动侦测(帧差法)
2020/03/20 Python
利用CSS3动画实现圆圈由小变大向外扩散的效果实例
2018/09/10 HTML / CSS
澳大利亚最受欢迎的美发用品目的地:AMR
2019/08/28 全球购物
英语专业推荐信
2013/11/16 职场文书
高中毕业自我鉴定
2013/12/19 职场文书
给同事的道歉信
2014/01/11 职场文书
城市轨道交通工程职业生涯规划书范文
2014/09/16 职场文书
2014年小学数学工作总结
2014/12/12 职场文书
骨干教师事迹材料
2014/12/17 职场文书
新郎父亲婚礼致辞
2015/07/27 职场文书
详解nginx安装过程并代理下载服务器文件
2022/02/12 Servers