目录

1. 实现的效果如下图所示:

2. 思路

3.代码

3.1 js核心代码简单理解版:

3.2 实际应用-react版

4. 使用flex实现左右两栏式经典布局

4.1  图示:

4.2 代码实例:


1. 实现的效果如下图所示:


2. 思路

1. 使用定位在左侧菜单栏右侧写一个不可见div,鼠标经过鼠标指针样式变换

2. 监听事件:鼠标按下、抬起、移动,需要一个变量,来记录当前是按下还是抬起,初始为false,按下时为true,抬起时为false,如果是true的情况可以移动。

3.记录鼠标偏移值e.screenX,借此控制菜单栏宽度,使用min、maxwidth控制最小或最大宽度

4.性能优化,采用节流或防抖


3.代码

分为js和react两个版本,以供参考


3.1 js核心代码简单理解版:

<div class="menu-wrapper"><div class="resize-bar"></div></div><div class="content"></div><script>let resizing = falseconst menu = document.querySelector('.menu-wrapper')const resizeBar = document.querySelector('.resize-bar')// 监听: 当鼠标按下,变量设置为true表示已经按下resizeBar.addEventListener('mousedown', () => {resizing = true})// 监听:当鼠标移动,将鼠标的位置赋值给元素的宽度window.addEventListener('mousemove', (e) => {if (resizing) {e.preventDefault()e.stopPropagation()const { screenX } = emenu.style.width = screenX + 'px'}})// 监听:当鼠标抬起,变量设置为false表示已经抬起window.addEventListener('mouseup', () => {resizing = false;})</script>

3.2 实际应用-react版

结合flex左右布局,鼠标控制的是左侧 flex:0 0 200px 的宽度,以及设置最小和最大的宽度,使用节流方式优化性能

                           // 设置的不可见div<divclassName='resize-bar'style={{width: "10px",height: "100%",minHeight: "4.6875rem",position: "absolute",top: "0",right: "0",cursor: "col-resize",zIndex: "999999999"}}></div>// react代码部分:setTimeout(() => {let prevCursorOffset = -1let resizing = falseconst menu: any = document.querySelector(".mouseDrag")const resizeBar: any = document.querySelector(".resize-bar")resizeBar.addEventListener("mousedown", () => {resizing = true})window.addEventListener("mousemove", handleResizeMenu) window.addEventListener("mouseup", () => {resizing = false})function handleResizeMenu(e) {if (!resizing) {return}const {screenX} = e// 加上这两行代码,避免移动鼠标时选择界面元素e.preventDefault()e.stopPropagation()if (prevCursorOffset === -1) {prevCursorOffset = screenX// 鼠标偏移量大于50时执行一次大小调整} else if (Math.abs(prevCursorOffset - screenX) >= 50) {menu.style.flex = `0 0 ${screenX}px` // 设置左侧宽度menu.style.maxWidth = "500px" // 设置左侧最大宽度prevCursorOffset = screenX}}}, 1500)

4. 使用flex实现左右两栏式经典布局

好处:使用flex布局可以使右侧内容区域自适应


4.1  图示:


4.2 代码实例:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>flex-左右布局</title><style>.wrap {margin: 0 auto;width: 80%;display: flex;}#left {flex: 0 0 200px; /* 左侧固定200px */height: 500px;background: red;}#right {flex: 1; /* 随父级变化 */height: 500px;background: burlywood;}</style></head>
<body>
<div class="wrap"><aside id="left"></aside><section id="right">右侧</section>
</div></body>
</html>

鼠标拖拽菜单栏控制宽度大小及flex实现经典左右两栏布局相关推荐

  1. js 鼠标拖拽改变div宽度高度

    js 鼠标拖拽改变div宽度高度, <!DOCTYPE html> <html><head><meta charset="UTF-8" / ...

  2. 鼠标拖拽调整div大小

    鼠标拖拽调整div大小 实现思路 根据鼠标位置改变鼠标样式 当鼠标在div的边缘和四个角时显示不同的样式,通过cursor修改 当鼠标在div的边缘和四个角按下时记录具体坐标点位置, 并开始根据鼠标的 ...

  3. html点击控制盒子左右移动,JS实现鼠标拖拽盒子移动及右键点击盒子消失效果示例...

    JS实现鼠标拖拽盒子移动及右键点击盒子消失效果示例 发布时间:2020-10-04 12:47:25 来源:脚本之家 阅读:121 作者:s_psycho 本文实例讲述了JS实现鼠标拖拽盒子移动及右键 ...

  4. 3dmax java_Java3D读取3DMax模型并实现鼠标拖拽、旋转、滚轮缩放等功能

    /**-------------------------------------------------代码区--------------------------------------------- ...

  5. 【计算机图形】制作能够利用鼠标拖拽实现360度旋转的3D人体模型flash文件

    前段时间,由于要对参加挑战杯的系统进行改善,老师要求我们在系统当中添加一个可旋转的3D人体模型,于是俺陷入了深深的思考当中.之前一直都没有接触过3D模型的制作,而且老师这回给的时间又特紧,当时那个急呀 ...

  6. Axure 10 案例:模拟鼠标拖拽画框线的效果

    介绍 鼠标拖拽画框线是我们常用的操作.可以通过Axure来完美的模拟鼠标拖拽画框线的效果,当接触到了其他控件的时候,可以通过交互来表示接触状态. 今天,就让我们来学习如何制作它. 预览效果 预览原型 ...

  7. WPF 在image控件用鼠标拖拽出矩形

    今天有小伙伴问我一个问题,在image控件用鼠标拖拽出矩形,本文告诉大家如何使用鼠标画出矩形 做出来的效果先请大家看一下 最简单的方法是在 Down 的时候记录按下的点,在 移动的时候重新计算所在的宽 ...

  8. 在屏幕的任意位置拖拽,控制精灵移动

    本文首发于微信公众号: 小蚂蚁教你做游戏.欢迎关注领取更多学习做游戏的原创教程资料,每天学点儿游戏开发知识. 嗨!大家好,我是小蚂蚁. 最近一直在录制视频教程,很少写图文教程,难免有些生疏.一项技能练 ...

  9. unity2d里实现鼠标拖拽物体的功能

    在 Unity 中实现鼠标拖拽物体的功能需要使用到 Unity 的 Physics 系统. 要实现鼠标拖拽物体,你需要在场景中添加以下内容: 一个 Rigidbody 2D 组件,用于控制物体的运动. ...

最新文章

  1. C 语言编程 — 变量和常量
  2. 【收藏】一篇快速帮企业转型区块链的锦囊
  3. Win10桌面右键响应非常慢怎么办?
  4. 右手螺旋判断磁感应强度方向_高中物理第11章 电磁感应(汇总58个动画视频)
  5. IOS 多线程04-GCD详解 底层并发 API
  6. [众包]Eclipse 运行简单亚马逊AMT模板
  7. 通俗易懂的来理解Iaas,Paas,SaaS
  8. python 多条件 选择 算法_浅析Python中的多条件排序实现
  9. (pytorch-深度学习系列)CNN的多输入通道和多输出通道
  10. 【转载】架构师需要了解的Paxos原理、历程及实战
  11. Android开发笔记(九)特别的.9图片
  12. AWK 高端大气上档次
  13. visual studio(vs)中项目解决方案的目录组织安排
  14. 每周一个 Python 模块 | array
  15. iOS辅助功能Accessibility浅析
  16. 带你重新认识一下应用层协议
  17. 片上总线Wishbone 学习(四)接口信号定义
  18. chatgpt智能提效职场办公-ppt怎么蒙层
  19. 虚拟化应用交付解决方案【ANS SOLUTIONS】
  20. Snipaste截图时下拉菜单消失解决方法

热门文章

  1. 圣诞节送什么礼物好?高颜值耐用的蓝牙耳机推荐
  2. docker-compose –- 单机多容器神器
  3. VB编程的8个小技巧
  4. 次坐标从0开始_交易“关键词”之 坐标
  5. camera360android版有全景功能吗,Camera360 for Android新版发布留声功能
  6. 判断JS对象是否具有某种属性
  7. 【你也能看得懂的电磁场与电磁波系列连载 27】
  8. 神经网络给图片生成标题,神经网络提取图片特征
  9. 【Redis教程】与Python交互03
  10. 薅羊毛利器—Loon,Cookie放在本地一点也不担心