侧边栏滚动显示,点击实现缓动返回顶部

Document - 锐客网 > .slider-bar { position: absolute; left: 50%; top: 300px; margin-left: 600px; width: 45px; height: 130px; background-color: pink; }.w { width: 1200px; margin: 10px auto; }.header { height: 150px; background-color: purple; }.banner { height: 250px; background-color: skyblue; }.main { height: 8000px; background-color: yellowgreen; }span { display: none; position: absolute; bottom: 0; cursor: pointer; }
class="goBack">返回顶部
头部区域
主体部分
> //获取元素 var banner = document.querySelector('.banner'); var sliderBar = document.querySelector('.slider-bar'); var goBack = document.querySelector('.goBack'); //获取banner距离浏览器上面的距离 var bannerTop = banner.offsetTop; //因为banner已经滚动上去了,所以要减掉banner的距离,来设置固定以后的top值 var sliderBarTop = sliderBar.offsetTop - bannerTop; var main = document.querySelector('.main'); mainTop = main.offsetTop; document.addEventListener('scroll', function () { //页面滚动到banner底下的区域,侧边栏开始固定 if (window.pageYOffset >= bannerTop) { sliderBar.style.position = 'fixed'; //当侧边栏固定以后,设置当前位置为固定的位置 sliderBar.style.top = sliderBarTop + 'px'; } else { sliderBar.style.position = 'absolute'; sliderBar.style.top = 300 + 'px'; } //当页面滚动到main的位置时,返回顶部的字开始显示 if (window.pageYOffset >= mainTop) { goBack.style.display = 'block'; } else { goBack.style.display = 'none'; } })//点击回到顶部 goBack.addEventListener('click', toTop)//声明变量,当scrollCur为true停止向上滚动的定时器 var scrollCur = false; //向上回到顶部的时候,发生鼠标向下滚动事件,停止向上滚动的定时器 function scrollFunc (e) { e = e || window.event; //console.log(e.wheelDelta); //当回到顶部的时候,鼠标滚轮向下滚动,将值改成true if(e.wheelDelta < 0){ scrollCur = true; } }function toTop() { //监听鼠标滚动事件 document.addEventListener('mousewheel',scrollFunc); var timer = setInterval(function () { //动态获取当前页面的垂直滚动距离 var scrollTop = window.pageYOffset; //console.log(scrollCur); //如果滚动距离或者发生鼠标滚动事件的时候,停止定时器 if (scrollTop <= 0 || scrollCur) { clearInterval(timer); //停止以后要将值改成false,让下次点击从新开始定时器 scrollCur = false; //滚动事件是瞬间发生的,但是用户可能发生事件后还是滚动了,所以要移出鼠标滚动事件 document.removeEventListener('mousewheel',scrollFunc); } //缓动步长公式 var step = scrollTop / 10 //取整 step = Math.ceil(step); //每次滚动距离 scrollTop -= step; //滚动到目标位置 window.scrollTo(0, scrollTop); //window.scrollTo 滚动到指定位置 //window.scrollBy 每调用一次滚动多少距离 }, 30) }

    推荐阅读