VUE实现Studio管理后台之鼠标拖放改变窗口大小


Posted in Javascript onMarch 04, 2020

近期改版RXEditor,把改版过程,用到的技术点,记录下来。昨天完成了静态页面的制作,制作过程并未详细记录,后期已经不愿再补了,有些遗憾。不过工作成果完整保留在github上,地址:https://github.com/vularsoft/studio-ui

这个项目下面的html-demo.html,便是静态文件。

话不多说,今天就把昨天的HTML转化成VUE。

先看效果:

VUE实现Studio管理后台之鼠标拖放改变窗口大小

布局原理

页面采用纯弹性盒子flex box布局,无float postion等,页面分成如下几个区域:

VUE实现Studio管理后台之鼠标拖放改变窗口大小

细实线描述的是各个DIV之间的嵌套关系,粗黑线是独立的DIV,我称它们为把手(HADLE),主要用来接受鼠标拖动事件,以完成拖动操作。handle非为两种,横向x-handle,纵向y-handle,css中定义x-handle宽度为3px,高度为100%,y-handle高度为3px,宽度为100%,鼠标光标也相应设置一下:

.vular-studio .x-handle{
 width: 3px;
 cursor: w-resize;
 z-index: 10;
}

.vular-studio .y-handle{
 height: 3px;
 cursor: s-resize;
 z-index: 10;
}

拖动原理

带有把手的区域固定大小(固定宽度或者高度),不带把手的部分跟随弹性盒子变化。把手handle是一个独立的VUE组件,它把拖动信息传递给父窗口,父窗口改变自身大小。以bottom-area为例,这是一个可以改变自身大小的DIV:

<template>
 <div class="bottom-area" :style="{height:height + 'px'}">
 <YHandle @heightChange="heightChange"></YHandle>
 <div class="bottom-inner">
  <slot></slot>
 </div>
 </div>
</template>

<script>
import YHandle from './YHandle.vue'
export default {
 name: 'BottomArea',
 components:{
 YHandle,
 },
 data () {
 return {
  height:220,
 }
 },
 methods: {
 heightChange(movement){
  this.height += movement
  if(this.height < 30){
  this.height = 30
  }
  if(this.height > 600){
  this.height = 600
  }
 },
 },
}
</script>

它对应的把手代码:

<template>
 <div class="y-handle" 
 @mousedown="mouseDown" 
 ></div>
</template>

<script>
export default {
 name: 'YHandle',
 data () {
 return {
  lastY:''
 }
 },

 created () {
 document.addEventListener('mouseup', this.mouseUp)
 },

 destroyed() {
 document.removeEventListener('mouseup', this.mouseUp)
 },


 methods: {
 mouseDown(event){
  document.addEventListener('mousemove', this.mouseMove)
  this.lastY = event.screenY
 },
 mouseMove(event){
  console.log('move')
  this.$emit('heightChange', this.lastY - event.screenY)
  this.lastY = event.screenY
 },
 mouseUp(event){
  this.lastY = ''
  document.removeEventListener('mousemove', this.mouseMove)
 },
 },
}
</script>

制作步骤

先建一个VUE项目:
1、安装node
2、安装webpack
3、安装VUE
4、新建VUE项目:vue init webpack-simple
5、根据相应布局制作VUE组件
具体代码,请参考:https://github.com/vularsoft/studio-ui,根据标注,获取相应的版本记录即可。

到此这篇关于VUE实现Studio管理后台之鼠标拖放改变窗口大小 的文章就介绍到这了,更多相关vue 鼠标拖放改变窗口大小 内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
javascript 构建一个xmlhttp对象池合理创建和使用xmlhttp对象
Jan 15 Javascript
jQuery UI Autocomplete 1.8.16 中文输入修正代码
Apr 16 Javascript
使用jQuery判断IE浏览器版本的代码
Jun 14 Javascript
在JavaScript中访问字符串的子串
Jul 07 Javascript
基于JS如何实现给字符加千分符(65,541,694,158)
Aug 03 Javascript
js 实现一些跨浏览器的事件方法详解及实例
Oct 27 Javascript
js 判断数据类型的几种方法
Jan 13 Javascript
thinkphp标签实现bootsrtap轮播carousel实例代码
Feb 19 Javascript
求js数组的最大值和最小值的四种方法
Mar 03 Javascript
监听angularJs列表数据是否渲染完毕的方法示例
Nov 07 Javascript
vue 验证码界面实现点击后标灰并设置div按钮不可点击状态
Oct 28 Javascript
使用 Vue-TCB 快速在 Vue 应用中接入云开发的方法
Feb 10 Javascript
微信小程序如何加载数据库真实数据的实现
Mar 04 #Javascript
微信小程序开发搜索功能实现(前端+后端+数据库)
Mar 04 #Javascript
微信小程序云函数添加数据到数据库的方法
Mar 04 #Javascript
jquery实现垂直手风琴菜单
Mar 04 #jQuery
JS数据类型(基本数据类型、引用数据类型)及堆和栈的区别分析
Mar 04 #Javascript
微信浏览器左上角返回按钮监听的实现
Mar 04 #Javascript
js回调函数原理与用法案例分析
Mar 04 #Javascript
You might like
PHP分页显示制作详细讲解
2008/11/19 PHP
PHP中使用foreach和引用导致程序BUG的问题介绍
2012/09/05 PHP
ubuntu10.04配置 nginx+php-fpm模式的详解
2013/06/03 PHP
php selectradio和checkbox默认选择的实现方法详解
2013/06/29 PHP
ThinkPHP实现带验证码的文件上传功能实例
2014/11/01 PHP
深入浅析php json 格式控制
2015/12/24 PHP
如何使用微信公众平台开发模式实现多客服
2016/01/06 PHP
微信开发之网页授权获取用户信息(二)
2016/01/08 PHP
PHP实现的简单排列组合算法应用示例
2017/06/20 PHP
yii2中关于加密解密的那些事儿
2018/06/12 PHP
Stop SQL Server
2007/06/21 Javascript
JQuery自适应IFrame高度(支持嵌套 兼容IE,ff,safafi,chrome)
2011/03/28 Javascript
用JS判别浏览器种类以及IE版本的几种方法小结
2011/08/02 Javascript
IE6-8中Date不支持toISOString的修复方法
2014/05/04 Javascript
js验证框架实现代码分享
2016/05/18 Javascript
JavaScript常用代码书写规范的超全面总结
2016/09/11 Javascript
微信小程序 WXML、WXSS 和JS介绍及详解
2016/10/08 Javascript
javascript 中的继承实例详解
2017/05/05 Javascript
Vue2 使用 Echarts 创建图表实例代码
2017/05/18 Javascript
详解angularjs popup-table 弹出框表格指令
2017/09/20 Javascript
NodeJS实现视频转码的示例代码
2017/11/18 NodeJs
vue强制刷新组件的方法示例
2019/02/28 Javascript
Vuejs中的watch实例详解(监听者)
2020/01/05 Javascript
python3 遍历删除特定后缀名文件的方法
2018/04/23 Python
对numpy中的transpose和swapaxes函数详解
2018/08/02 Python
解决Django中多条件查询的问题
2019/07/18 Python
Python逐行读取文件内容的方法总结
2020/02/14 Python
python3 简单实现组合设计模式
2020/07/02 Python
Giglio美国站:意大利奢侈品购物网
2018/02/10 全球购物
出生证明公证书
2014/04/09 职场文书
2014年图书馆个人工作总结
2014/12/18 职场文书
给病人的慰问信
2015/03/23 职场文书
运动会观后感
2015/06/09 职场文书
小学三年级班主任工作经验交流材料
2015/11/02 职场文书
海弦WR-800F
2022/04/05 无线电
解决MySQL报“too many connections“错误
2022/04/19 MySQL