整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

JavaScript 返回顶部实例

大家介绍如何通过 JS/CSS 实现网页返回顶部效果。

CSS 按钮样式:

#myBtn {

display: none; /* 默认隐藏 */

position: fixed;

bottom: 20px;

right: 30px;

z-index: 99;

border: none;

outline: none;

background-color: red; /* 设置背景颜色,你可以设置自己想要的颜色或图片 */

color: white; /* 文本颜色 */

cursor: pointer;

padding: 15px;

border-radius: 10px; /* 圆角 */

}

var topBtn = document.getElementById('top');
// 获取视窗高度
var winHeight = document.documentElement.clientHeight;
window.onscroll = function () {
    // 获取页面向上滚动距离,chrome浏览器识别document.body.scrollTop,而火狐识别document.documentElement.scrollTop,这里做了兼容处理
    var toTop = document.documentElement.scrollTop || document.body.scrollTop;
    // 如果滚动超过一屏,返回顶部按钮出现,反之隐藏
    if(toTop>=winHeight){
        topBtn.style.display = 'block';
    }else {
        topBtn.style.display = 'none';
    }
}
topBtn.onclick=function () {
    var timer = setInterval(function () {
        var toTop = document.documentElement.scrollTop || document.body.scrollTop;
        // 判断是否到达顶部,到达顶部停止滚动,没到达顶部继续滚动
        if(toTop == 0){
            clearInterval(timer);
        }else {
            // 设置滚动速度
            var speed = Math.ceil(toTop/5);
            // 页面向上滚动
            document.documentElement.scrollTop=document.body.scrollTop=toTop-speed;
        }
    },50);
}

标签

首先放出html

<body>

<contain class="test1">

<a name="topAnchor"></a>

<div id="top">我是顶部</div>

<div></div>

<div></div>

<div></div>

<div></div>

<div></div>

</contain>

<footer>

<button id="backTop1">第一种方式回到顶部</button>

<button id="backTop2">第二种方式回到顶部</button>

<button id="backTop3">第三种方式回到顶部</button>

</footer>

</body>

然后具体操作步骤如下

  1. 将a标签放到指定元素的附近
  2. 然后通过点击事件生成 a 标签
  3. 触发a标签事件
  4. 删除a标签

const backTop1 = document.getElementById("backTop1")


backTop1.addEventListener("click", function (e) {

let a = document.createElement("a")

a.href = "#topAnchor"

e.target.appendChild(a)

a.onclick = function (e) {

e.stopPropagation()

}

a.click()

e.target.removeChild(a)

})

效果如下图所示

效果很明显,在事件触发之后,页面立马跑到的顶部,在交互性没啥要求的时候,这种做法确实没啥问题,不过要求高了之后就不行了,会显得有些突兀。

scrollTo()

此 api 需要传递 DOM元素相对于window的 left 和 top 的距离,此例子仅展示简单demo,只考虑 top 坐标

当然它还有一个 behavior 参数,将其设置为 smooth 后,将会出现滑动效果 步骤如下:

  1. 计算目标元素距离顶部的距离
  2. 通过事件触发

代码如下:

const backTop2 = document.getElementById("backTop2")

const TOP = document.getElementById("top")

const y = TOP.offsetTop

const backTop3 = document.getElementById("backTop3")

backTop3.addEventListener("click", function (e) {

window.scrollTo({ top: y, left: 0, behavior: 'smooth' })

})

效果如下图所示

从效果上来看,相较于a标签,该api支持动画,使得页面更丝滑

Element.scrollIntoView()

该 api 相较于上一个,节点信息更加的明确,操作方法也更加的简洁,更利于后续的维护

代码如下

const backTop2 = document.getElementById("backTop2")

const TOP = document.getElementById("top")

backTop2.addEventListener("click", function (e) {

TOP.scrollIntoView({ behavior: "smooth" })

})

效果如下图所示

从效果上来看,该api和scrollTo的作用是一致的,但是从代码结构上来说,scrollIntoView会更加的简洁

以上三种方法是我目前比较常用的,如有不同之处,还望诸君不吝赐教!


作者:pengpeng

链接:https://juejin.cn/post/6906142651121139719

来源:掘金

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。