本文为原创文章,转载需注明出处~~

效果图:

项目需求:如果一级菜单过多,需要出现滚动点击按钮。

准备工作:考虑到使用swiper插件,但swiper-slider必须是swiper-wrapper的第一子节点,el-menu没办法套用,放弃!决定自己写:

html:

关键css:

<-- 按钮样式 -->
.swiperMenu {
position: relative;
overflow: hidden;
padding-right: 74px !important;
.moveBtn {
position: absolute;
right: 0;
top: 0;
height: $--menu-height;
z-index: 1;
.move {
width: 36px;
height: 100%;
background: #0444AE;
float: left;
display: grid;
grid-template-rows: 70% 30%;
justify-items: center;
&:hover {
.moveImg {
width: 15px;
height: 24px;
margin-top: 18px;
opacity: 1;
cursor: pointer;
}
.moveImgnone {
opacity: 0.2;
cursor: auto;
}
}
.moveImg {
width: 15px;
height: 24px;
margin-top: 18px;
opacity: 0.5;
}
.moveImgnone {
opacity: 0.2;
}
span {
display: inline-block;
width: 14px;
height: 14px;
background: #0957DA;
border-radius: 1px;
font-size: 12px;
font-family: Helvetica;
color: #FFFFFF;
text-align: center;
}
}
.lineBox {
float: left;
background: #0444AE;
height: $--menu-height;
div {
background: #fff;
opacity: 0.2;
width: 1px;
height: 48px;
margin-top: 14px;
}
}
}
}
<-- 将el-menu下的ul标签横向被li撑开。重点重点!!!!!!!!!! -->
.el-menu-demo {
overflow: hidden;
white-space: nowrap;
scroll-behavior: smooth; // 实现缓动动画效果
.el-submenu {
display: inline-block;
float: none;
width: 114px;
}
}

JS:

  data () {
return {
updateTopMenuActive: 0,
show: true,
copy_Menus: [],
resizeTick: false,
firstMenuChange: false,
templateMoreAlias: '_templateMoreMenu', //临时更多目录的别名
activeMenuIndex: sessionStorage.activeMenuIndex || '/home', //默认选择首页
allWidth: 0, // 菜单ul总宽度
leftNum: 0, // 左边菜单隐藏个数
rightNum: 0, // 右边菜单隐藏个数
boxLength: 0, // 可视窗口宽度
moveBtnWidth: 0, // 按钮盒子宽度
firstMenuWidth: 80, // 第一个菜单的宽度(首页)
eveyMenuWidth: 114, // 每一个菜单的宽度
}
},
 
  watch: {
    boxLength(val) {
      if(this.allWidth > val) {
        // 右边隐藏个数 = 总共菜单的个数 - 左边隐藏的个数 - 右边隐藏宽度/114
        this.rightNum = this.copy_Menus.length - Math.ceil((this.boxLength-this.firstMenuWidth)/this.eveyMenuWidth) - this.leftNum
      } else {
        this.rightNum = 0
      }
    }
  },
 
  methods: {
    // 菜单右侧移动按钮
    toRightMove(num) {
      let menuscrollLeft = document.getElementById('menuUl').scrollLeft
      if(num > 0) {
        if(menuscrollLeft == 0) {
          // document.getElementById('menuUl').scrollLeft = this.firstMenuWidth
          document.getElementById('menuUl').scrollLeft = this.eveyMenuWidth
        } else {
          document.getElementById('menuUl').scrollLeft += this.eveyMenuWidth
        }
        this.rightNum--
        this.leftNum++
      }
    },
    // 菜单左侧移动按钮
    toLeftMove(num) {
      let menuscrollLeft = document.getElementById('menuUl').scrollLeft
      if(num > 0) {
        if(menuscrollLeft > this.firstMenuWidth) {
          document.getElementById('menuUl').scrollLeft -= this.eveyMenuWidth
        } else {
          document.getElementById('menuUl').scrollLeft = 0
        }
        this.rightNum++
        this.leftNum--
      }
    },
    initMenus (newVal, oldVal) {
      // ---------------------此处省略其他代码-----------------------------
      this.$nextTick(() => {
        // 按钮盒子宽度
        this.moveBtnWidth = document.getElementById('moveBtn').offsetWidth
        // 可视窗口宽度 = 大盒子宽度 - 按钮盒子宽度
        this.boxLength = document.getElementById('swiperMenu').offsetWidth - this.moveBtnWidth
        // 菜单总长度
        this.allWidth = (this.copy_Menus.length - 1) * this.eveyMenuWidth + this.firstMenuWidth
       
        if(this.allWidth > this.boxLength) {
          this.rightNum = this.copy_Menus.length - Math.ceil((this.boxLength-this.firstMenuWidth)/this.eveyMenuWidth)
        } else {
          this.rightNum = 0
        }
      })
    },
 }

  created () {
    this.initMenus()
  // 监听页面窗口变化
    window.addEventListener('resize',function(){
      _this.boxLength = document.getElementById('swiperMenu').offsetWidth;
    })
  }
 

【VUE】el-menu导航菜单过长、过多 超出窗口宽度 添加左右滚动按钮实现左右滚动效果的更多相关文章

  1. [vue ]滚动视图解决ElementUI NavMenu 导航菜单过长显示的问题

    记录一下工作 需求 导航菜单过长的时候会溢出,需要一个像 Tabs 标签页一样的滚动视图容器,可以左右滚动内部视图. 解决方法 由于时间问题,所以直接将 Tabs 源码抽取出来使用. 这里要做一些特殊 ...

  2. BootstrapBlazor实战 Menu 导航菜单使用(1)

    实战BootstrapBlazorMenu 导航菜单的使用, 以及整合Freesql orm快速制作菜单项数据库后台维护页面 demo演示的是Sqlite驱动,FreeSql支持多种数据库,MySql ...

  3. B08. BootstrapBlazor实战 Menu 导航菜单使用(2)

    接上篇: B08. BootstrapBlazor实战 Menu 导航菜单使用(1) 3.项目模板 节省时间,直接使用 Bootstrap Blazor App 模板快速搭建项目 传送门: https ...

  4. 使用Iview Menu 导航菜单(非 template/render 模式)

    1.首先直接参照官网Demo例子,将代码拷贝进项目中运行, 直接报错: Cannot read property 'mode' of undefined. 然后查看官网介绍,有一行注意文字,好吧. 2 ...

  5. Iview 中 获取 Menu 导航菜单 选中的值

    期望效果: 原来,我用的是脚本来控制,然后........,再然后,我再去仔细看官方文档的时候,才发现,Menu组件 有那么两个事件,on-select 和 on-open-change ,好气啊,之 ...

  6. 为SharePoint网站创建自定义导航菜单

    转:http://kaneboy.blog.51cto.com/1308893/397779 相信不少人都希望把SharePoint网站内置的那个顶部导航菜单,换成自己希望的样式.由于SharePoi ...

  7. 一款jQuery立体感动态下拉导航菜单特效

    一款jQuery立体感动态下拉导航菜单特效,鼠标经过,在菜单栏上方下拉出一个背景图片,效果十分不错的一款jquery特效. 对IE6都是兼容的,希望大家好好研究研究. 适用浏览器:IE6.IE7.IE ...

  8. .Net Core通过json文件 配置管理后台导航菜单

    先来看个最终效果图 以前我们配置后台菜单 一般都是把菜单链接, 图标, 以及层级关系 配置到数据库,Core很容易通过json文件来配置导航菜单  而不用存数据库了 先添加个menuconfig.js ...

  9. vue导航菜单调用PHP后台数据

    数据库设计: 后台PHP输出所有菜单数据(index.php): <?phpheader("Access-Control-Allow-Origin:*");header(&q ...

  10. JQUERY 插件开发——MENU(导航菜单)

    JQUERY 插件开发——MENU(导航菜单) 故事背景:由于最近太忙了,已经很久没有写jquery插件开发系列了.但是凭着自己对这方面的爱好,我还是抽了一些时间来过一下插件瘾的.今天的主题是导航菜单 ...

随机推荐

  1. ClickHouse 初步认识

    概述 Clickhouse 是分析型数据库,真正的面向列式存储,支持高维度表.它免费开源.具备高效的数据导入和查询性能,能达到 50M/200M 每秒.支持实时查询.支持不同功能底层存储引擎,例如:M ...

  2. 授权调用: 介绍 Transformers 智能体 2.0

    简要概述 我们推出了 Transformers 智能体 2.0! ⇒ 在现有智能体类型的基础上,我们新增了两种能够 根据历史观察解决复杂任务的智能体. ⇒ 我们致力于让代码 清晰.模块化,并确保最终提 ...

  3. 鸿蒙HarmonyOS实战-Web组件(页面跳转和浏览记录)

    前言 页面跳转是指在浏览器中从当前页面跳转到另一个页面的操作.可以通过点击链接.输入网址.提交表单等方式实现页面跳转. 浏览记录是指记录用户在浏览器中浏览过的页面的历史记录.当用户跳转到一个新页面时, ...

  4. 一周万星的文本转语音开源项目「GitHub 热点速览」

    上周的热门开源项目让我想起了「图灵测试」,测试者在不知道对面是机器还是人类的前提下随意提问,最后根据对方回复的内容,判断与他们交谈的是人还是计算机.如果无法分辨出回答者是机器还是人类,则说明机器已通过 ...

  5. openstack neutron 报错

    openstack neutron /etc/neutron下面没有dhcp文件 查错发现安装时候打错

  6. JavaScript语法形式2 内部式

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

  7. WPF/C#:程序关闭的三种模式

    ShutdownMode枚举类型介绍 ShutdownMode是一个枚举类型,它定义了WPF应用程序的关闭方式.这个枚举类型有三个成员: OnLastWindowClose:当最后一个窗口关闭或者调用 ...

  8. es6.6.1 rest常规操作

    ES 内置的REST接口/ 获取版本信息/index/_search 搜索指定索引下的数据 test/_search/_aliases 获取或者操作索引下的别名 _aliases/index/ 查看指 ...

  9. discuz论坛个人空间自定义css样式

    Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解` discuz论坛个人空间自定义css样式 日期:2020- ...

  10. 在Ubuntu系统安装Anaconda及Python

      本文介绍在Linux Ubuntu操作系统的电脑中,安装Anaconda环境与Python语言的方法.   在之前的文章Anaconda与Python环境在Windows中的部署中,我们介绍了在W ...