实现弹性返回顶部

本文介绍了一个简单的网页返回顶部功能的实现方法,包括HTML结构、CSS样式及JavaScript逻辑。该功能支持平滑滚动、按钮显示隐藏及鼠标悬停交互。

需求

  • 返回顶部时有滚动效果
  • 鼠标悬停时有交互效果
  • 默认隐藏返回顶部按钮
  • 按钮固定在屏幕右下方

实现

HTML
<span id="go-to-top">
    <i class="fa fa-chevron-up"></i>
</span>

CSS

#go-to-top {
    /* 固定在屏幕右下角 */
    position: fixed;
    right: 35px;
    bottom: 60px;
    /* 默认隐藏 */
    display: none;
    /* 盒模型 */
    width: 40px;
    height: 40px;
    line-height: 40px;
    cursor: pointer;
    /* 文字 */
    text-align: center;
    color: #fff;
    /* 可以换成图片背景 */
    background-color: #ccc;
    transition: background-color 0.4s;
}
#go-to-top:hover {
    background-color: #999;
}

JavaScript

/**
 * 返回顶部
 */
// 返回顶部  
function getScrollTop() {
    return document.documentElement.scrollTop + document.body.scrollTop;
}
function setScrollTop(value) 
{ 
    if (document.documentElement.scrollTop) 
    { 
        document.documentElement.scrollTop = value; 
    } 
    else 
    { 
        document.body.scrollTop = value; 
    } 
}
// 弹性返回顶部,展现滚动的动画
var goToTop = $('#go-to-top');
goToTop.click(function(event) {
    var goTop = setInterval(scrollMove, 12); 
    function scrollMove() 
    { 
        setScrollTop(getScrollTop() / 1.1); 
        if (getScrollTop() < 1) clearInterval(goTop); 
    } 
});
// 自动隐藏放回顶部按钮
$(window).scroll(function(event) {
    getScrollTop()>0 ? goToTop.fadeIn('fast') : goToTop.fadeOut('fast');
});

解决方案

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="utf-8">
    <title>弹性放回顶部</title>
    <link href="http://netdna.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
    <style>
        #go-to-top {
            /* 固定在屏幕右下角 */
            position: fixed;
            right: 35px;
            bottom: 60px;
            /* 默认隐藏 */
            display: none;
            /* 盒模型 */
            width: 40px;
            height: 40px;
            line-height: 40px;
            cursor: pointer;
            /* 文字 */
            text-align: center;
            color: #fff;
            /* 可以换成图片背景 */
            background-color: #ccc;
            transition: background-color 0.4s;
        }
        #go-to-top:hover {
            /* 鼠标悬停的交互 */
            background-color: #999;
        }
    </style>
</head>

<body>
    <!-- 一堆占位div  -->
    <div style="width: 100%; height: 400px; background-color: red"></div>
    <div style="width: 100%; height: 400px; background-color: green"></div>
    <div style="width: 100%; height: 400px; background-color: blue"></div>
    <div style="width: 100%; height: 400px; background-color: yellow"></div>
    <div style="width: 100%; height: 400px; background-color: black"></div>
    <div style="width: 100%; height: 400px; background-color: orange"></div>
    <div style="width: 100%; height: 400px; background-color: white"></div>
    <div style="width: 100%; height: 400px; background-color: pink"></div>

    <!-- 返回顶部组件 -->
    <span id="go-to-top">
        <i class="fa fa-chevron-up"></i>
    </span>

    <!-- 脚本 -->
    <script src="http://cdn.bootcss.com/jquery/2.2.4/jquery.js"></script>
    <script>
        /**
         * 返回顶部
         */
        // 返回顶部  
        function getScrollTop() {
            return document.documentElement.scrollTop + document.body.scrollTop;
        }
        function setScrollTop(value) 
        { 
            if (document.documentElement.scrollTop) 
            { 
                document.documentElement.scrollTop = value; 
            } 
            else 
            { 
                document.body.scrollTop = value; 
            } 
        }
        // 弹性返回顶部,展现滚动的动画
        var goToTop = $('#go-to-top');
        goToTop.click(function(event) {
            var goTop = setInterval(scrollMove, 12); 
            function scrollMove() 
            { 
                setScrollTop(getScrollTop() / 1.1); 
                if (getScrollTop() < 1) clearInterval(goTop); 
            } 
        });
        // 自动隐藏放回顶部按钮
        $(window).scroll(function(event) {
            getScrollTop()>0 ? goToTop.fadeIn('fast') : goToTop.fadeOut('fast');
        });
    </script>
</body>

</html>

转载于:https://www.cnblogs.com/gymmer/p/6972633.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值