antd--Menu 遇到的一些问题

本文解决前端开发中常见问题:路由跳转后菜单选中项更新、自定义滚动条样式及刷新页面后滚动条位置自动恢复。使用Ant Design Menu组件、CSS滚动条选择器和JavaScript scrollIntoView方法实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、跳转路由后不会自动选中

二、滚动条样式设置

三、刷新页面后记住滚动条位置并自动滚动


项目中写了左菜单栏,用了蚂蚁组件里的 Menu;

最终效果类似这样的:

记录一下遇到的一些问题;

一、跳转路由后不会自动选中

这里将leftMenu封装成一个组件,每次加载一个页面时比如点击菜单跳转路由后都会重新渲染 leftMenu,所以会导致默认选中项一直为设置的默认值,不会根据点击进行跳转。

Menu 组件有 selectedKeys 属性

这里会存下图中的 key 属性

 

会根据 selectedKeys 里存的值来对应寻找 MENU_ENUMkey 属性


将当前路由进行处理后存入,因为这里是设置路由前部分与key值是相同的


二、滚动条样式设置

之前没有处理过滚动条相关问题,所以这次记录一下

CSS滚动条选择器

  • ::-webkit-scrollbar — 整个滚动条.
  • ::-webkit-scrollbar-button — 滚动条上的按钮 (上下箭头).
  • ::-webkit-scrollbar-thumb — 滚动条上的滚动滑块.
  • ::-webkit-scrollbar-track — 滚动条轨道.
  • ::-webkit-scrollbar-track-piece — 滚动条没有滑块的轨道部分.
  • ::-webkit-scrollbar-corner — 当同时有垂直滚动条和水平滚动条时交汇的部分.
  • ::-webkit-resizer — 某些元素的corner部分的部分样式(例:textarea的可拖动按钮).

在页面中,只用到了其中的几个属性,因为只是想把滚动条变窄一点


::-webkit-scrollbar-track-piece { //滚动条凹槽的颜色
  background-color:#f8f8f8;
}
::-webkit-scrollbar {//滚动条的宽度(分别对应纵向滚动条和横向滚动条)
  width:6px;
  height:6px;
}
::-webkit-scrollbar-thumb {//滚动条的设置
  background-color:#dddddd;
  background-clip:padding-box;
  border-radius:3px;//圆角
}

三、刷新页面后记住滚动条位置并自动滚动

我用到的是 js 的 scrollIntoView 方法  Element.scrollIntoView()

注意这里的 Element 通过 document.getElementById(tmp); 获取,我用 document.getElementsByClassName(tmp); 会报错

我的处理方法是,点击之后路由跳转之前,把idN这个属性存到缓存里(上图),然后每次加载页面时取出(下图)

然后调用scrollIntoView属性

Element.scrollIntoView() 方法让当前的元素滚动到浏览器窗口的可视区域内。

element.scrollIntoView(); // 等同于element.scrollIntoView(true) 
element.scrollIntoView(alignToTop); // Boolean型参数 
element.scrollIntoView(scrollIntoViewOptions); // Object型参数

alignToTop

一个 Boolean 值:

  • true,元素的顶端将和其所在滚动区的可视区域的顶端对齐。 scrollIntoViewOptions: {block: "start", inline: "nearest"}。这是这个参数的默认值。
  • false,元素的底端将和其所在滚动区的可视区域的底端对齐。scrollIntoViewOptions: {block: "end", inline: "nearest"}

scrollIntoViewOptions

一个带有选项的object:

{
    behavior: "auto"  | "instant" | "smooth",
    block:    "start" | "end",
}

behavior 可选

定义动画过渡效果, "auto""instant", 或 "smooth" 之一。默认为 "auto"

block 可选

定义垂直方向的对齐, "start""center""end", 或 "nearest"之一。默认为 "start"

inline 可选

定义水平方向的对齐, "start""center""end", 或 "nearest"之一。默认为 "nearest"

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值