前台页面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; }