滑鼠點選如何平順滑動到指定的位置

 

一開始我們先來學如何藉由滑鼠點擊到指定位置

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <style>
        nav > a {
            display: inline;
        }

        .square {
            border: 5px solid red;
            height: 100vh;
        }
    </style>
</head>
<body>
    <nav id="home">
        <a href="#aaa">aaa</a>
        <a href="#bbb">bbb</a>
    </nav>
    <div class="square" id="aaa">
        <p>aaa</p>
        <a href="#home">home</a>
    </div>
    <div class="square">
        <a href="#home">home</a>
    </div>
    <div class="square" id="bbb">
        <p>bbb</p>
        <a href="#home">home</a>
    </div>
</body>
</html>

由上例可知是藉由包含「#」字號的超連結a tag與指定id而達成的。

 

雖然接下來的技術跟上面沒有絕對的關係,

但有了以上概念後,接下來看怎麼做「平順滑動」的特效,

猜想要做「平順滑動」的特效可能需要用到,

javascript click、css transition、jQuery scrollTop bababa的...,

其實關鍵點就在於jQuery的animate

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <style>
        nav > a {
            display: inline;
        }

        .square {
            height: 100vh;
        }

        #aaa {
            background: #F99;
        }

        #bbb {
            background: #9F9;
        }

        #ccc {
            background: #99F;
        }
    </style>
    <script src="https://code.jquery.com/jquery-2.1.4.js"></script>
    <script src="http://code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
    <script>
        $(function () {
            //scroll down
            $("nav a").bind('click', function (event) {
                event.preventDefault();//先取消超連結原本預設動作
                var $anchor = $(this);
                $('body').animate({
                    scrollTop: $($anchor.attr('href')).offset().top
                }, 1000, 'easeInOutQuint');
            });

            //scroll up
            $(".page-scroll").bind('click', function (event) {
                var $anchor = $(this);
                $('body').animate({
                    scrollTop: '0'
                }, 1000, 'easeInOutQuint');
                event.preventDefault();//先取消超連結原本預設動作(加在這裡也可以)
            });
        });
    </script>
</head>
<body>
    <nav id="home">
        <a href="#aaa">aaa</a>
        <a href="#bbb">bbb</a>
        <a href="#ccc">ccc</a>
    </nav>
    <div id="aaa" class="square">
        <p>aaa</p>
        <a href="#home" class="page-scroll">home</a>
    </div>
    <div id="bbb" class="square">
        <p>bbb</p>
        <a href="#home" class="page-scroll">home</a>
    </div>
    <div id="ccc" class="square">
        <p>ccc</p>
        <a href="#home" class="page-scroll">home</a>
    </div>
</body>
</html>

此範例有配合使用jQuery UI的plugin,來達成「平順滑動」的特效。

 

參考資料:

Window scrollTo() Method

ScrollTo:平滑滚动到页面指定位置

flesler/jquery.scrollTo

cferdinandi/smooth-scroll

animate的用法

scrollTop、scrollLeft的用法