回到页面顶部(带缓冲动画)

前台页面HTML

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        img {
            position: fixed;
            bottom: 100px;
            right: 50px;
            cursor: pointer;
            display: none;
            border: 1px solid #000;
        }
        div {
            width: 1210px;
            margin: 100px auto;
            text-align: center;
            font: 500 26px/35px "simsun";
            color: red;
        }
    </style>
    <script src="animate.js"></script>
    <script>
        window.onload = function () {
            //需求:被卷去的头部超过100显示小火箭,然后点击小火箭屏幕缓慢移动到最顶端。
            //难点:我们以前是移动盒子,现在是移动屏幕,我们没有学过如何移动屏幕。
            //      技术点:window.scrollTo(x,y);浏览器显示区域跳转到指定的坐标
            //步骤:
            //1.老三步
            var img = document.getElementsByTagName("img")[0];
            window.onscroll = function () {
                //被卷去的距离大于200显示小火箭,否则隐藏
                //2.显示隐藏小火箭
                if(scroll().top>1000){
                    img.style.display = "block";
                }else{
                    img.style.display = "none";
                }
                //每次移动滚动条的时候都给leader赋值,模拟leader获取距离顶部的距离
                leader = scroll().top;
            }
            //3.缓动跳转到页面最顶端(利用我们的缓动动画)
            var timer = null;
            var target = 0; //目标位置
            var leader = 0; //显示区域自身的位置
            img.onclick = function () {
                //技术点:window.scrollTo(0,0);
                //要用定时器,先清定时器
                clearInterval(timer);
                timer = setInterval(function () {
                    //获取步长
                    var step = (target-leader)/10;
                    //二次处理步长
                    step = step>0?Math.ceil(step):Math.floor(step);
                    leader = leader +step;
                    //显示区域移动
                    window.scrollTo(0,leader);
                    //清除定时器
                    if(leader === 0){
                        clearInterval(timer);
                    }
                },25);
            }
        }
    </script>

</head>
<body>
    <img src="images/Top.jpg"/>
    <div>
        我是最顶端.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>
        风吹马尾千条线,雨打羊毛一片毡.....<br>


    </div>
</body>
</html>

调用封装好的JS文件

//缓动动画封装
function animate(ele,target) {
    clearInterval(ele.timer);
    ele.timer = setInterval(function () {
        var step = (target-ele.offsetTop)/10;
        step = step>0?Math.ceil(step):Math.floor(step);
        ele.style.top = ele.offsetTop + step + "px";
        console.log(1);
        if(Math.abs(target-ele.offsetTop)<Math.abs(step)){
            ele.style.top = target + "px";
            clearInterval(ele.timer);
        }
    },25);
}
/**
 * Created by andy on 2015/12/8.
 */
function scroll() {  // 开始封装自己的scrollTop
    if(window.pageYOffset != null) {  // ie9+ 高版本浏览器
        // 因为 window.pageYOffset 默认的是  0  所以这里需要判断
        return {
            left: window.pageXOffset,
            top: window.pageYOffset
        }
    }
    else if(document.compatMode === "CSS1Compat") {    // 标准浏览器   来判断有没有声明DTD
        return {
            left: document.documentElement.scrollLeft,
            top: document.documentElement.scrollTop
        }
    }
    return {   // 未声明 DTD
        left: document.body.scrollLeft,
        top: document.body.scrollTop
    }
}
/**
 * Created by Lenovo on 2016/9/2.
 */
/**
 * 通过传递不同的参数获取不同的元素
 * @param str
 * @returns {*}
 */
function $(str){
    var str1 = str.charAt(0);
    if(str1==="#"){
        return document.getElementById(str.slice(1));
    }else if(str1 === "."){
        return document.getElementsByClassName(str.slice(1));
    }else{
        return document.getElementsByTagName(str);
    }
}

/**
 * 功能:给定元素查找他的第一个元素子节点,并返回
 * @param ele
 * @returns {Element|*|Node}
 */
function getFirstNode(ele){
    var node = ele.firstElementChild || ele.firstChild;
    return node;
}

/**
 * 功能:给定元素查找他的最后一个元素子节点,并返回
 * @param ele
 * @returns {Element|*|Node}
 */
function getLastNode(ele){
    return ele.lastElementChild || ele.lastChild;
}

/**
 * 功能:给定元素查找他的下一个元素兄弟节点,并返回
 * @param ele
 * @returns {Element|*|Node}
 */
function getNextNode(ele){
    return ele.nextElementSibling || ele.nextSibling;
}

/**
 * 功能:给定元素查找他的上一个兄弟元素节点,并返回
 * @param ele
 * @returns {Element|*|Node}
 */
function getPrevNode(ele){
    return ele.previousElementSibling || ele.previousSibling;
}

/**
 * 功能:给定元素和索引值查找指定索引值的兄弟元素节点,并返回
 * @param ele 元素节点
 * @param index 索引值
 * @returns {*|HTMLElement}
 */
function getEleOfIndex(ele,index){
    return ele.parentNode.children[index];
}

/**
 * 功能:给定元素查找他的所有兄弟元素,并返回数组
 * @param ele
 * @returns {Array}
 */
function getAllSiblings(ele){
    //定义一个新数组,装所有的兄弟元素,将来返回
    var newArr = [];
    var arr = ele.parentNode.children;
    for(var i=0;i<arr.length;i++){
        //判断,如果不是传递过来的元素本身,那么添加到新数组中。
        if(arr[i]!==ele){
            newArr.push(arr[i]);
        }
    }
    return newArr;
}

  

原文地址:https://www.cnblogs.com/sj1988/p/6602918.html