资讯专栏INFORMATION COLUMN

vue实现伸缩菜单功能

3403771864 / 783人阅读

  效果展示:

  点击即可随意调节菜单宽度

  变动后

  页面结构一共分为三部分,加上一个伸缩按钮,在你的项目对应的部分都加上class名。

  我这里定义的分别是box、left、mid、resize(按钮类名)

  html

  页面结构划分完成之后,完善一下样式(直接复制,菜单类名换成你的)

  /*拖拽区div样式*/
  .resize {
  cursor: col-resize;
  position: relative;
  // top: 45%;
  top: 400px;
  background-color: #d6d6d6;
  border-radius: 5px;
  margin-top: -10px;
  width: 10px;
  height: 50px;
  background-size: cover;
  background-position: center;
  font-size: 32px;
  color: white;
  }
  /*拖拽区鼠标悬停样式*/
  .resize:hover {
  color: #444444;
  }
  //左侧菜单设置百分比宽度,方便拖拽自适应
  .main_menu {
  width:22%; /*右侧初始化宽度*/
  height: 100%;
  background: #BF334E!important;
  box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.11);
  }

  methods里面的拖拽函数:

  // 拖拽事件
  dragControllerDiv() {
  var resize = document.getElementsByClassName('resize')
  var left = document.getElementsByClassName('left')
  var mid = document.getElementsByClassName('mid')
  var box = document.getElementsByClassName('box')
  for (let i = 0; i < resize.length; i++) {
  // 鼠标按下事件
  resize[i].onmousedown = function (e) {
  //颜色改变提醒
  resize[i].style.background = '#818181'
  var startX = e.clientX
  resize[i].left = resize[i].offsetLeft
  // 鼠标拖动事件
  document.onmousemove = function (e) {
  console.log('鼠标按下')
  var endX = e.clientX
  var moveLen = resize[i].left + (endX - startX - 270) // (endx-startx)=移动的距离。resize[i].left+移动的距离=左边区域最后的宽度
  var maxT = box[i].clientWidth - resize[i].offsetWidth - 270// 容器宽度 - 左边区域的宽度 = 右边区域的宽度
  console.log(moveLen,maxT)
  if (moveLen < 32) moveLen = 270 // 左边区域的最小宽度为32px
  if (moveLen > maxT - 150) moveLen = maxT - 650 //右边区域最小宽度为150px
  resize[i].style.left = moveLen // 设置左侧区域的宽度
  for (let j = 0; j < left.length; j++) {
  console.log( left[j].style)
  left[j].style.width = moveLen + 'px'
  mid[j].style.width = box[i].clientWidth - moveLen - 10 + 'px'
  }
  }
  // 鼠标松开事件
  document.onmouseup = function (evt) {
  console.log('鼠标收起')
  //颜色恢复
  resize[i].style.background = '#d6d6d6'
  document.onmousemove = null
  document.onmouseup = null
  resize[i].releaseCapture && resize[i].releaseCapture() //当你不在需要继续获得鼠标消息就要应该调用ReleaseCapture()释放掉
  }
  resize[i].setCapture && resize[i].setCapture() //该函数在属于当前线程的指定窗口里设置鼠标捕获
  return false
  }
  }
  },

  mounted里面调用:

  mounted() {
  this.dragControllerDiv()
  },

         以上就是全部内容,请大家多多关注。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/127673.html

相关文章

  • 饿了么组件库,element-ui开发精美的后台管理系统系列之(一)开发伸缩菜单

    摘要:先看这个值即为判断显示展开还是收缩状态的开关。这样就实现了展开状态下的菜单。如果有时间的话,我会把这个系列写完,知道朋友们能独立开发一个完整的的单页面后台管理程序。 涉及到路由,权限等等相关内容的部分,跟本文主旨关系不大,所以我将会在另外一篇文章中详述,混在一起的话内容太多了 基于element-ui的左侧可伸缩的菜单通过vuejs来开发支持展开收缩的菜单是非常简单的,只需要v-i...

    whlong 评论0 收藏0
  • Vue.js-Vue实例

    摘要:推荐阅读原文学习笔记实例实例组件间通信组件间通信组件间通信用户信息表图书电商数据图书电商数据图书电商数据渲染微信精选数据渲染微信精选数据渲染微信 推荐阅读原文 学习笔记:Vue实例 Vue实例 组件间通信 See the Pen 组件间通信 by whjin (@whjin) on CodePen. 图书电商数据 See the Pen 图书电商数据 by whjin (@whji...

    shinezejian 评论0 收藏0
  • Jq-简单伸缩菜单

    摘要:豪情第一个展开第一个不展开第一章我的祖国我的祖国我的祖国我的祖国第二章小英雄喜洋洋小英雄喜洋洋小英雄喜洋洋小英雄喜洋洋第三章唐诗宋词赏析唐诗宋词赏析唐诗宋词赏析唐诗宋词赏析运行代码 豪情$(document).ready(function() { $(dt:first).css(border-top-width,0)...

    番茄西红柿 评论0 收藏2637
  • vue轻量级后台管理系统基础模板

    摘要:具体实现请查看和的退出登陆回调方法。现在除了必要的页面需要在一开始添加到路由表里,其他的页面都可以根据后台数据来自动生成。另外,如果在未登陆时要访问某一指定页面,会重定向到登陆页,登陆成功后会自动跳到这个指定页面。 项目地址 vue-admin-template 在线预览 更新 2019.6.25 更新 修复路由表冲突问题 退出当前用户,换账号重新登陆时,上个账号和现在的账号路由表会有...

    2shou 评论0 收藏0
  • 管理系统之权限的设计和实现

    摘要:基本设计和分析前端服务端主要功能打开思否页面,根据页面的功能点,设计出相关的数据表,和管理系统需要的相关页面。 本文主要想对前端权限管理功能实现做一个分享,所以并不会对后台管理的框架结构做太详细介绍,如果有朋友对其他有兴趣可以留言。 基本设计和分析 前端 vue + elementui 服务端: node + mysql + nginx 主要功能 打开思否页面,根据页面的功能点,设...

    googollee 评论0 收藏0

发表评论

0条评论

3403771864

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<