原生js实现淘宝首页点击按钮缓慢回到顶部效果


Posted in Javascript onApril 06, 2014

淘宝首页的回到顶部按钮是这样的:下拉到一定距离后按钮才显示出来,鼠标放到按钮上时,按钮背景会变成灰色,并且图标变成了文字。点击按钮缓慢回到顶部

我们先分析下实现这样的效果需要添加哪些事件。鼠标移进移出按钮,按钮表现发生变化,所以需要给按钮添加mouseover, mouseout事件。要侦听滚动条的变化,所以需要给window添加scroll事件,点击按钮回到顶部,按钮添加click事件。我们将事件处理程序封装成三个函数moveIn, moveOut, goTop;

下面先给出html/css代码

<div class="container"> 
<div class="header">头部</div> 
<div class="content">主要内容,高度是2000px</div> 
<div class="footer>底部</div> 
<div id="btn">返回顶部</div> 
</div>

.container { width: 980px; margin: 0 auto; height: auto; background: #aaa;} 
.content { height: 2000px; border: 1px solid blue; } 
#btn { 
position:fixed; 
bottom: 50px; 
right: 0; 
width: 54px; 
height: 55px; 
background: url(icons.png) no-repeat 0 -110px; } //背景图可随意找一张 
font-size: 12px; 
line-height: 55px; 
text-align: center; 
text-indent: -9999em; 
cursor: pointer; 
display: none;

下面是完整的js代码
window.addEventListener("load",function() { 
var btn = document.getElementById("btn"); 
btn.addEventListener("mouseover",moveIn, false); 
btn.addEventListener("mouseout", moveOut, false); function moveIn() { 
btn.style.color = "#ffffff"; //修改的是内联样式,具有最高的优先级; 
btn.style.textIndent = "0em"; 
btn.style.backgroundImage = "none"; 
btn.style.backgroundColor = "#FF4401"; 
} 
function moveOut() { 
btn.style.textIndent = "-9999em"; 
btn.style.backgroundImage = "url(icons.png)"; 
} 
function goTop(acceleration, time) { //修改参数可调整返回顶部的速度 
acceleration = acceleration || 0.1; 
time = time || 10; 
var speed = 1 + acceleration; 
function getScrollTop() { //取得滚动条的竖直距离 
return document.documentElement.scrollTop || document.body.scrollTop; 
} 
function setScrollTop(value) { //设置滚动条的竖直距离,实现效果的关键就是在很短的间隔时间内不断地修改滚动条的竖直距离,以实现滚动效果 
document.documentElement.scrollTop = value; 
document.body.scrollTop = value; 
} 
window.onscroll = function() { 
var scrollTop = getScrollTop(); 
if (scrollTop > 100) { //判断滚动条距离窗口顶部多远时显示出来,这里是100px 
btn.style.display = "block"; 
} else { 
btn.style.display = "none"; 
} 
}; 
btn.onclick = function () { 
var timer = setInterval(function() { 
setScrollTop(Math.floor(getScrollTop() / speed)); //这行代码是关键,取得滚动条竖直距离,除以speed后再给滚动条设置竖直距离 
if (getScrollTop() == 0) 
clearInterval(timer); 
}, time); 
}; 
} 
goTop(0.2, 8); 
}, false);

当然,还有其他的实现方法,下面给出其他方法的关键代码
btn.onclick = function() { 
clearInterval(timer); 
var timer = setInterval(function() { 
var now = scrollTop; //滚动条竖直距离 
speed = (0 - now) / 10; 
speed = Math.floor(speed); 
if (now == 0); 
clearInterval(timer); 
document.documentElement.scrollTop = now + speed; //标准模式下的浏览器 
document.body.scrollTop = now + speed; //怪异模式下的浏览器 
}, 15); 
}

原生js实现淘宝首页点击按钮缓慢回到顶部效果 
这里的代码主要还是参考了网上其他资源,再加了一点自己的理解。当然还有其他实现方法,比如JavaScript最早时间就支持的window.scrollTo()。用jQ来实现的话代码量将会变得很少,可参看w3cplus

个人觉得,先学好原生JavaScript,比如搞清楚数据类型,闭包,继承,作用域,DOM,CSS,事件处理,Ajax等,用熟练后学习其他框架将会容易很多。

Javascript 相关文章推荐
JS 实现完美include载入实现代码
Aug 05 Javascript
Javascript insertAfter() 实现函数代码
Oct 12 Javascript
img onload事件绑定各浏览器均可执行
Dec 19 Javascript
JavaScript实现拖拽网页内元素的方法
Apr 15 Javascript
Bootstrap图片轮播组件Carousel使用方法详解
Oct 20 Javascript
微信小程序开发之圆形菜单 仿建行圆形菜单实例
Dec 12 Javascript
JavaScript队列的应用实例详解【经典数据结构】
Apr 12 Javascript
使用async-validator编写Form组件的方法
Jan 10 Javascript
vue实现自定义日期组件功能的实例代码
Nov 06 Javascript
Node.js实现简单的爬取的示例代码
Jun 25 Javascript
layer.confirm()右边按钮实现href的例子
Sep 27 Javascript
taro 实现购物车逻辑的实例代码
Jun 05 Javascript
将字符串中由空格隔开的每个单词首字母大写
Apr 06 #Javascript
当达到输入长度时表单自动切换焦点
Apr 06 #Javascript
javascript中的取反再取反~~没有意义
Apr 06 #Javascript
jQuery toggleClass应用实例(附效果图)
Apr 06 #Javascript
javascript数组操作总结和属性、方法介绍
Apr 05 #Javascript
JavaScript中的prototype和constructor简明总结
Apr 05 #Javascript
JavaScript中的typeof操作符用法实例
Apr 05 #Javascript
You might like
文件系统基本操作类
2006/11/23 PHP
对PHP PDO的一些认识小结
2015/01/23 PHP
php中将一个对象保存到Session中的方法
2015/03/13 PHP
如何把php5.3版本升级到php5.4或者php5.5
2015/07/31 PHP
如何通过PHP实现Des加密算法代码实例
2020/05/09 PHP
JavaScript 模拟用户单击事件
2009/12/31 Javascript
JavaScript 精粹读书笔记(1,2)
2010/02/07 Javascript
jquery等待效果示例
2014/05/01 Javascript
基于Jquery实现键盘按键监听
2014/05/11 Javascript
JavaScript使用Math.Min返回两个数中较小数的方法
2015/04/06 Javascript
jQuery模拟实现的select点击选择效果【附demo源码下载】
2016/11/09 Javascript
详解Nodejs基于mongoose模块的增删改查的操作
2016/12/21 NodeJs
jQuery实现的下雪动画效果示例【附源码下载】
2018/02/02 jQuery
浅谈Vue内置component组件的应用场景
2018/03/27 Javascript
详解基于 Node.js 的轻量级云函数功能实现
2019/07/08 Javascript
[02:32]DOTA2英雄基础教程 祸乱之源
2013/12/23 DOTA
[50:34]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python中使用异常处理来判断运行的操作系统平台方法
2015/01/22 Python
使用Python操作Elasticsearch数据索引的教程
2015/04/08 Python
python使用mysql的两种使用方式
2018/03/07 Python
Sanic框架应用部署方法详解
2018/07/18 Python
python高级特性和高阶函数及使用详解
2018/10/17 Python
python redis 删除key脚本的实例
2019/02/19 Python
用Python中的turtle模块画图两只小羊方法
2019/04/09 Python
python实现从本地摄像头和网络摄像头截取图片功能
2019/07/11 Python
Python 在OpenCV里实现仿射变换—坐标变换效果
2019/08/30 Python
Python enumerate函数遍历数据对象组合过程解析
2019/12/11 Python
Django 路由层URLconf的实现
2019/12/30 Python
python 解决tqdm模块不能单行显示的问题
2020/02/19 Python
美国隐形眼镜网上商店:Lens.com
2019/09/03 全球购物
乡镇干部先进事迹材料
2014/02/03 职场文书
函授药学自我鉴定
2014/02/07 职场文书
村党的群众路线教育实践活动工作总结
2014/10/25 职场文书
单位未婚证明范本
2014/11/25 职场文书
悬空寺导游词
2015/02/05 职场文书
Golang解析JSON对象
2022/04/30 Golang