vue 拖拉改变盒子高度(mousedown、mousemove、mouseup)流畅不卡顿

需求:上下两个盒子之间添加可拖拽按钮,实现高度变化
html:
<textarea
:id="'mycode'+(index*1+1)"
:ref="'mycode'+(index*1+1)"
v-model="item.sqlContent"
class="CodeMirror-hints"
:class="'mycode'+(index*1+1)"
placeholder="按Ctrl键进行代码提示"
/>
<!-- 拖拽组件 -->
<div class="resizeBtn"><span @mousedown="resizeDown" @mousemove="resizeMove" @mouseup="resizeUp">===</span></div>
<el-tabs class="bottomTabsBox" style="height: 225px" size=mini v-model="activeSqlRes" type="card" @tab-click="handleSqlResClick"></el-tabs>
css:
.CodeMirror {
flex: 1;
}
.resizeBtn {
background: #143152;
text-align: center;
height: 10px;
line-height: 7px;
color: gray;
font-weight: 900;
span {
cursor: n-resize;
}
}
.bottomTabsBox {
height: 30%;
background: $--sqlBg-color;
border-top: 1px solid rgba(255,255,255,.2);
z-index: 1;
}
出现问题的版本:
1 卡顿
2 不流畅
3 鼠标快速移动无法改变高度
4 mouseup无法释放
resizeBox: null,
resizeY: 0,
boxHeight: '225px', // 下部分盒子高度
resizeDown(e, index) {
this.resizeBox = document.getElementsByClassName('bottomTabsBox')
this.boxHeight = parseFloat(this.resizeBox[index].style.height)
this.resizeY = e.clientY
},
resizeMove(e) {
if (!this.resizeBox) return false
let change = this.boxHeight + (this.resizeY - e.clientY)
if (change < 40) return false
this.resizeBox[index].style.height = change+ 'px'
},
resizeUp(e) {
this.resizeBox = null
}
优化后版本:超级丝滑~
html:
<!-- 拖拽组件 -->
<div class="resizeBtn"><span @mousedown="resizeDown($event, index)">===</span></div>
resizeDown(e, index) {
this.resizeBox = document.getElementsByClassName('bottomTabsBox')
this.boxHeight = parseFloat(this.resizeBox[index].style.height)
this.resizeY = e.clientY
document.onmousemove = (e) => {
if (!this.resizeBox) return false
let change = this.boxHeight + (this.resizeY - e.clientY)
if (change < 40) return false // 设置最小高度
this.resizeBox[index].style.height = change+ 'px'
}
document.onmouseup = () => {
this.resizeBox = null
document.onmousemove = null;
}
}
vue 拖拉改变盒子高度(mousedown、mousemove、mouseup)流畅不卡顿的更多相关文章
- javascript简单拖拽(鼠标事件 mousedown mousemove mouseup)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...
- JavaScript区分click事件和mousedown(mouseup、mousemove)方法
在前端开发工作中,会遇到这样问题:针对同一个dom元素,即希望为它绑定click事件,又想该元素可以允许拖拽的效果.而使用拖拽的效果,我们一般就会用到mousedown,mousemove和mouse ...
- js改变盒子大小(上下左右)分析
js改变盒子大小 知识点 三个mouse事件:mousedown mousemove mouseup css的定位和cursor 思路 先解决单边问题识别范围,得到所选区域 event. 根据距离,判 ...
- 使用bootstrap网格系统自适应盒子宽度时保持所有盒子高度一致。
使用了bootstrap网格系统的好处是很容易便实现了响应式布局,盒子可以根据设置的样式,随着屏幕的大小改变而自动改变宽度,但是也存在一个问题,那就是盒子的高度是由盒子的内容决定的,如果盒子里的内容不 ...
- click事件和mousedown、mouseup事件
点击select标签元素的时候,会弹出下拉.然而当option中没有元素时,就不希望弹出下拉(比如在某些浏览器中,点击select会默认出一个罩层效果,而此时没有数据选择的话,弹出比较不友好). 首先 ...
- 学习微信小程序之css15解决父盒子高度塌陷
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- JQuery使用mousedown和mouseup简单判断鼠标按下与释放位置是否相同
在JQuery中,我们可以利用mousedown.mouseup来跟踪页面的鼠标按下与释放事件. 如何获取鼠标的位置信息呢?事件event的pageX和pageY属性可以让我们获得鼠标在页面中的具体位 ...
- tkinter中scale拖拉改变值控件(十一)
scale拖拉改变值控件 使用户通过拖拽改变值 简单的实现: import tkinter wuya = tkinter.Tk() wuya.title("wuya") wuya. ...
- css背景图撑开盒子高度
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- UITableView cell 半透明效果,改变cell高度时背景不闪的解决方法
如果直接指定cell.backgroundColor = = [UIColor colorWithRed:255.0/255.0 green:255.0/255.0 blue:255.0/255.0 ...
随机推荐
- 解决老旧电脑在win7中浏览器访问https网站出现的Let‘sEncrypt证书过期的问题
原因LetsEncrypt证书未过期,但是其顶级ca根证书 "DST Root CA X3"在2021-09-01过期了,老旧设备上的win系统会被影响到. 解决步骤下载三张Let ...
- c# - 如何在自定义 System.Text.Json JsonConverter 中使用默认序列化?
我正在写一个 custom System.Text.Json.JsonConverter将旧数据模型升级到新版本.我已覆盖 Read()并实现了必要的后处理.但是,我根本不需要在 Write()中做任 ...
- Kubernetes Cluster部署
1.基本环境说明 ip: 192.168.115.149 主机名:node1 CentOS Linux release 7.9.2009,内核版本为3.10.0-1160.81.1.el7.x8 ...
- NOIP模拟75
前言 先吐槽一下出题人,T2 牛马数据连棵树都不是.. T3 描述不清楚.. T1 如何优雅的送分 解题思路 我考场上还真以为是个送分题,然而... 莫比乌斯反演... 对于一个数字 n 有 \(2^ ...
- 霍夫变换原理及实现(Opencv C++)
已知一幅图像中的n个点,假设我们希望找到这些点中位于直线上的子集.一种可能的解决方法是,首先找到由每对点确定的所有直线,然后寻找靠近特定直线的那些点的所有子集.这种方法涉及寻找n(n-1)/2~n2条 ...
- 纯css+html+js模仿elementui组件
文件下载链接地址https://files.cnblogs.com/files/ht955/UIcomponents.zip?t=1717405975&download=true
- go 1.6 废弃 io/ioutil 包后的替换函数
go 1.6 废弃 io/ioutil 包后的替换函数 io/ioutil 替代 ioutil.ReadAll -> io.ReadAll ioutil.ReadFile -> os.R ...
- EBLK日志收集方案
ELK 是elastic公司提供的一套完整的日志收集以及展示的解决方案,是三个产品的首字母缩写,分别是ElasticSearch.Logstash 和 Kibana.该组合版本会统一发布. Elast ...
- 在ftl模板中调整表格
- linux解压缩,复制,重命名,删除,目录按更新时间排序,grep递归搜索文档
linux解压缩,复制,重命名,删除,目录按更新时间排序,grep递归搜索文档 1.解压缩压缩命令 zip -p -r mymail-1026.zip mymail/ 解压命令 unzip mymai ...