书写一个右侧珠串导航栏的功能

html部分

<ul class="slider-menu-content" style="height: 492px" @click="selectMenu" id="sliderMenuContent">

<li id="canCtrl">a<span></span></li>

<li id="linCtrl">b<span></span></li>

<li id="diCtrl">c<span></span></li>

<li id="doCtrl">d<span></span></li>

<li id="recCtrl">e<span></span></li>

<li id="trgCtrl">f<span></span></li>

<li id="quotaCtrl">g<span></span></li>

<li id="gpsCtrl">h<span></span></li>

<li id="smsCtrl">i<span></span></li>

<li id="netCtrl">j<span></span></li>

<li id="netFltCtrl">k<span></span></li>

<li id="iotEnCtrl">l<span></span></li>

</ul>

//  右侧内容部分

<ul class="slider-menu-content" style="height: 492px" id="bodyContent">

<li id="can">内容a<span></span></li>

<li id="lin">内容b<span></span></li>

<li id="di">内容c<span></span></li>

<li id="do">内容d<span></span></li>

<li id="rec">内容e<span></span></li>

<li id="trg">内容f<span></span></li>

<li id="quota">内容g<span></span></li>

<li id="gps">内容h<span></span></li>

<li id="sms">内容i<span></span></li>

<li id="net">内容j<span></span></li>

<li id="netFlt">内容k<span></span></li>

<li id="iotEn">内容l<span></span></li>

</ul>

js部分

事件代理机制

document.getElementById("bodyContent").onclick = selectMenu(e)

// 构成缓慢滑动的效果

function scroll (currentY, targetY) {

let differenceTop = targetY - currentY

let _currentY = currentY

setTimeout(function () {

const dist = Math.ceil(differenceTop / 6)

_currentY += dist

window.scrollTo(_currentY, currentY)

if (differenceTop > 6 || differenceTop < -6) {

scroll(_currentY, targetY)

} else {

window.scrollTo(_currentY, targetY)

}

}, 1)

}

// 元素选中样式去重

function  removeDuplicate (ele, classname) {

if (ele.className.indexOf(classname) === -1) {

ele.className = ele.className + ' ' + classname

}

let siblings = ele.parentNode.children

for (let i = 0; i < siblings.length; i++) {

if (siblings[i] !== ele) {

siblings[i].classList.remove(classname)

}

}

}

// 侧边栏菜单点击选中效果

function  selectMenu (e) {

const target = e.target

if (target && target.nodeName === 'LI') {

this.removeDuplicate(target, 'slider-menu-item-active') 

// 获取点击项对应配置项的id

const menuId = target.id

let configId = ''

for (let i = 0; i < menuId.length - 4; i++) {

configId += menuId[i]

}

// 移动效果

let scrollHeight = document.getElementById(configId).offsetTop - 10

let currentY = document.documentElement.scrollTop || document.body.scrollTop

scroll(currentY, scrollHeight)

}

}

// 随着页面滚动,让侧边栏的选中样式发生改变

function   changeScrolltop (scrollTop) {

let childrens = null

if (document.getElementById('sliderMenuContent')) {

childrens = document.getElementById('sliderMenuContent').childNodes  //  sliderMenuContent 为侧边栏的父节点的id

} else {

return false

}

if (scrollTop === 0) {

this.removeDuplicate(document.getElementById(childrens[0].id), 'slider-menu-item-active')

return false

}

childrens.forEach((element, v) => {

if (element.id) {

let configId = ''

for (let i = 0; i < element.id.length - 4; i++) {

configId += element.id[i]

}

if (scrollTop >= (document.getElementById(configId).offsetTop - 75)) {

this.removeDuplicate(document.getElementById(element.id), 'slider-menu-item-active')

}

}

})

}

// 给页面添加监听滚动事件

window.addEventListener('scroll', (e) => {

var scrollTop = document.documentElement.scrollTop || document.body.scrollTop

changeScrolltop(scrollTop)

})

猜你喜欢

转载自blog.csdn.net/sherrie_05/article/details/81082800