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的mixin策略
Nov 19 Vue.js
在Vue中使用CSS3实现内容无缝滚动的示例代码
Nov 27 Vue.js
详解vue-cli项目在IE浏览器打开报错解决方法
Dec 10 Vue.js
Vue 实现一个简单的鼠标拖拽滚动效果插件
Dec 10 Vue.js
vue图片裁剪插件vue-cropper使用方法详解
Dec 16 Vue.js
vue3.0自定义指令(drectives)知识点总结
Dec 27 Vue.js
vuex的使用和简易实现
Jan 07 Vue.js
Vue 实现可视化拖拽页面编辑器
Feb 01 Vue.js
vue如何批量引入组件、注册和使用详解
May 12 Vue.js
详解Vue的列表渲染
Nov 20 Vue.js
在vue中import()语法不能传入变量的问题及解决
Apr 01 Vue.js
vue3.0 数字翻牌组件的使用方法详解
Apr 20 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读取CURL模拟登录时生成Cookie文件的方法
2014/11/04 PHP
php新浪微博登录接口用法实例
2014/12/23 PHP
PHP获取数组的键与值方法小结
2015/06/13 PHP
PHP实现的MD5结合RSA签名算法实例
2017/10/07 PHP
瀑布流布局并自动加载实现代码
2013/03/12 Javascript
js防止表单重复提交的两种方法
2013/09/30 Javascript
js冒泡、捕获事件及阻止冒泡方法详细总结
2014/05/08 Javascript
深入探密Javascript数组方法
2015/01/08 Javascript
Json对象和字符串互相转换json数据拼接和JSON使用方式详细介绍(小结)
2016/10/25 Javascript
HTML5基于Tomcat 7.0实现WebSocket连接并实现简单的实时聊天
2016/10/31 Javascript
js仿微信语音播放实现思路
2016/12/12 Javascript
nodejs基于express实现文件上传的方法
2018/03/19 NodeJs
JS实现前端页面的搜索功能
2018/06/12 Javascript
vue 组件的封装之基于axios的ajax请求方法
2018/08/11 Javascript
关于Vue项目跨平台运行问题的解决方法
2018/09/18 Javascript
JavaScript实现预览本地上传图片功能完整示例
2019/03/08 Javascript
实例讲解React 组件生命周期
2020/07/08 Javascript
Electron 打包问题:electron-builder 下载各种依赖出错(推荐)
2020/07/09 Javascript
python海龟绘图实例教程
2014/07/24 Python
Python求出0~100以内的所有素数
2018/01/23 Python
简单了解Python matplotlib线的属性
2019/06/29 Python
使用Python调取任意数字资产钱包余额功能
2019/08/15 Python
django框架auth模块用法实例详解
2019/12/10 Python
Python序列类型的打包和解包实例
2019/12/21 Python
使用pytorch实现论文中的unet网络
2020/06/24 Python
python 利用matplotlib在3D空间中绘制平面的案例
2021/02/06 Python
css3 中实现炫酷的loading效果
2019/04/26 HTML / CSS
美国首屈一指的礼品篮供应商:GiftTree
2018/01/06 全球购物
粉红色的鲸鱼:Vineyard Vines
2018/02/17 全球购物
StubHub新西兰:购买和出售你的门票
2019/04/22 全球购物
求职自荐信格式
2013/12/04 职场文书
本科毕业论文致谢怎么写
2015/05/14 职场文书
2015年高中班级工作总结
2015/07/21 职场文书
2016年小学植树节活动总结
2016/03/16 职场文书
使用这 6个Vue加载动画库来减少我们网站的跳出率
2021/05/18 Vue.js
html原生table实现合并单元格以及合并表头的示例代码
2023/05/07 HTML / CSS