需求:上下两个盒子之间添加可拖拽按钮,实现高度变化

  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)流畅不卡顿的更多相关文章

  1. javascript简单拖拽(鼠标事件 mousedown mousemove mouseup)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...

  2. JavaScript区分click事件和mousedown(mouseup、mousemove)方法

    在前端开发工作中,会遇到这样问题:针对同一个dom元素,即希望为它绑定click事件,又想该元素可以允许拖拽的效果.而使用拖拽的效果,我们一般就会用到mousedown,mousemove和mouse ...

  3. js改变盒子大小(上下左右)分析

    js改变盒子大小 知识点 三个mouse事件:mousedown mousemove mouseup css的定位和cursor 思路 先解决单边问题识别范围,得到所选区域 event. 根据距离,判 ...

  4. 使用bootstrap网格系统自适应盒子宽度时保持所有盒子高度一致。

    使用了bootstrap网格系统的好处是很容易便实现了响应式布局,盒子可以根据设置的样式,随着屏幕的大小改变而自动改变宽度,但是也存在一个问题,那就是盒子的高度是由盒子的内容决定的,如果盒子里的内容不 ...

  5. click事件和mousedown、mouseup事件

    点击select标签元素的时候,会弹出下拉.然而当option中没有元素时,就不希望弹出下拉(比如在某些浏览器中,点击select会默认出一个罩层效果,而此时没有数据选择的话,弹出比较不友好). 首先 ...

  6. 学习微信小程序之css15解决父盒子高度塌陷

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. JQuery使用mousedown和mouseup简单判断鼠标按下与释放位置是否相同

    在JQuery中,我们可以利用mousedown.mouseup来跟踪页面的鼠标按下与释放事件. 如何获取鼠标的位置信息呢?事件event的pageX和pageY属性可以让我们获得鼠标在页面中的具体位 ...

  8. tkinter中scale拖拉改变值控件(十一)

    scale拖拉改变值控件 使用户通过拖拽改变值 简单的实现: import tkinter wuya = tkinter.Tk() wuya.title("wuya") wuya. ...

  9. css背景图撑开盒子高度

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. UITableView cell 半透明效果,改变cell高度时背景不闪的解决方法

    如果直接指定cell.backgroundColor = = [UIColor colorWithRed:255.0/255.0 green:255.0/255.0 blue:255.0/255.0 ...

随机推荐

  1. 8.5考试总结(NOIP模拟31)[Game·Time·Cover]

    我们总是在注意错过太多,却不注意自己拥有多少. 前言 考场上疯狂搞第一题,终于把人给搞没了.. T1 Game 解题思路 线段树+二分 总体来讲就是用线段树维护三个值: 没有产生贡献的 a(小 B 的 ...

  2. 美团一面:什么是CAS?有什么优缺点?我说我只用过AtomicInteger。。。。

    引言 传统的并发控制手段,如使用synchronized关键字或者ReentrantLock等互斥锁机制,虽然能够有效防止资源的竞争冲突,但也可能带来额外的性能开销,如上下文切换.锁竞争导致的线程阻塞 ...

  3. react表单处理 非受控组件

    没有和state数据源进行关联的表单项,而是借助ref,使用元素DOM方式获取表单元素值 使用步骤 调用 React.createRef() 方法创建ref对象 将创建好的 ref 对象添加到文本框中 ...

  4. NCNN的内存显存分配器ncnn::Allocator & ncnn::VkAllocator翻译及其差异对比的学习笔记(nihui亲审过滴)

    NCNN的内存分配器 ncnn::Allocator 通用内存分配器   ncnn::PoolAllocator 内存池分配器 可以设置池大小,减少分配内存和析构内存次数,空间换时间   ncnn:: ...

  5. 程序员面试金典-面试题 16.25. LRU缓存

    题目: 设计和构建一个"最近最少使用"缓存,该缓存会删除最近最少使用的项目.缓存应该从键映射到值(允许你插入和检索特定键对应的值),并在初始化时指定最大容量.当缓存被填满时,它应该 ...

  6. 利用ADB获取APP资源

    最近小编经常受到失眠的困扰,因为在编写一个安卓体能评定的软件,同时又在构思一个桌面管理应用,不管是构想还是操作上都遇到了很多难题,所以寄希望于小编手机上的一款软件,因为版权问题,就不说出它叫啥名字了. ...

  7. sqlyog 工具 查看 历史记录

    sqlyog 工具 查看 历史记录 可以查看当前客户端的执行脚本的情况

  8. Ubuntu下nvidia驱动卸载

    Ubuntu下nvidia驱动卸载的一种方法 卸掉已经安装的驱动: sudo apt-getremove --purge '^nvidia-.*' sudo apt-getremove --purge ...

  9. Nuxt3 的生命周期和钩子函数(八)

    title: Nuxt3 的生命周期和钩子函数(八) date: 2024/6/30 updated: 2024/6/30 author: cmdragon excerpt: 摘要:本文介绍了Nuxt ...

  10. NXP i.MX 8M Plus工业开发板硬件说明书( 四核ARM Cortex-A53 + 单核ARM Cortex-M7,主频1.6GHz)

    前  言 本文主要介绍创龙科技TLIMX8MP-EVM评估板硬件接口资源以及设计注意事项等内容. 创龙科技TLIMX8MP-EVM是一款基于NXP i.MX 8M Plus的四核ARM Cortex- ...