JQuery实现左侧菜单栏可折叠功能
该效果包含根据右侧内容,左右联动
效果图
实现思想
- 主要利用滚动事件
$('.oprationRight').scroll(
function () {
scrollTop = $('.oprationRight').scrollTop();
activeIndex = calculateIndex(menuHeightArr, scrollTop);
let _this = $('.oprationWrapper').children('.menuLevel1').eq(activeIndex);
scrollToMenu(activeIndex, breadCrumbsType, scrollTop, calculateIndex, _this)
}
)
- 点击链接到某处使用a链接的锚点
<a href="#one“></a>
<div id="one"></div>
- 计算右边各块内容到顶部的距离,并存储
为防止滚动时面包屑遮挡住内容,需要减去第一块内容到顶部的距离
let arr = [];
$('.menuBlock').eq(activeIndex).children('.menuItemBlock').each(function () {
arr.push($(this)[0].offsetTop - menuList.eq(0)[0].offsetTop)
})
- 滚动时,判断当前滚动距离处于右边内容的哪一块,得到index值,为左边菜单做选中标记
function calculateIndex(menuHeightArr, scrollTop) {
let index = 0;
for (let i = 0; i < menuHeightArr.length; i++) {
if (i == 0) {
if (scrollTop >= 0 && scrollTop < menuHeightArr[0]) {
index = 0;
}
} else if (0 < i && i < menuHeightArr.length - 1) {
if (scrollTop >= menuHeightArr[i] && scrollTop < menuHeightArr[i + 1]) {
index = i;
}
} else if (i >= menuHeightArr.length - 1) {
if (scrollTop >= menuHeightArr[i]) {
index = menuHeightArr.length - 1;
}
}
}
return index;
}
- 得到左边菜单选中值后,要判断是否有二级菜单,如果有,需要将其展开,并且计算右边一级内容下面各二级内容到顶部的距离,且得出当前一级菜单下二级菜单的选中值,调用计算index的方法calculateIndex()
- 另外就是滚动时,根据需求的特殊处理
html内容大致结构