原生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 相关文章推荐
关于图片验证码设计的思考
Jan 29 Javascript
JQuery 常用方法和事件详细介绍
Apr 18 Javascript
JS正则表达式验证数字代码
Jan 28 Javascript
自己用jQuery写了一个图片的马赛克消失效果
May 04 Javascript
jquery实现可拖拽弹出层特效
Jan 04 Javascript
浅谈JavaScript中null和undefined
Jul 09 Javascript
JS采用绝对定位实现回到顶部效果完整实例
Jun 20 Javascript
js实现控制textarea输入字符串的个数,鼠标按下抬起判断输入字符数
Oct 25 Javascript
JavaScript基础之AJAX简单的小demo
Jan 29 Javascript
原生JS实现的多个彩色小球跟随鼠标移动动画效果示例
Feb 01 Javascript
vue中post请求以a=a&amp;b=b 的格式写遇到的问题
Apr 27 Javascript
Nuxt v-bind绑定img src不显示的解决
Dec 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
解析如何用php screw加密php源代码
2013/06/20 PHP
PHP简单实现“相关文章推荐”功能的方法
2014/07/19 PHP
PHP实现的线索二叉树及二叉树遍历方法详解
2016/04/25 PHP
php 截取utf-8格式的字符串实例代码
2016/10/30 PHP
PHP利用超级全局变量$_GET来接收表单数据的实例
2016/11/05 PHP
php实现不通过扩展名准确判断文件类型的方法【finfo_file方法与二进制流】
2017/04/18 PHP
php学习笔记之mb_strstr的基本使用
2018/02/03 PHP
php微信分享到朋友圈、QQ、朋友、微博
2019/02/18 PHP
javascript Xml增删改查(IE下)操作实现代码
2009/01/30 Javascript
jquery 插件学习(二)
2012/08/06 Javascript
jquery动态添加删除一行数据示例
2014/06/12 Javascript
兼容最新firefox、chrome和IE的javascript图片预览实现代码
2014/08/08 Javascript
Jquery解析Json格式数据过程代码
2014/10/17 Javascript
javascript实现点击商品列表checkbox实时统计金额的方法
2015/05/15 Javascript
深入解析JavaScript的闭包机制
2015/10/20 Javascript
如何让一个json文件显示在表格里【实现代码】
2016/05/09 Javascript
JavaScript SHA-256加密算法详细代码
2016/10/06 Javascript
关于Vue.js 2.0的Vuex 2.0 你需要更新的知识库
2016/11/30 Javascript
Vue实战之vue登录验证的实现代码
2017/10/31 Javascript
微信小程序全局变量功能与用法详解
2019/01/22 Javascript
微信小程序swiper组件实现抖音翻页切换视频功能的实例代码
2020/06/24 Javascript
jquery实现图片放大镜效果
2020/12/23 jQuery
python爬虫正则表达式之处理换行符
2018/06/08 Python
Python使用combinations实现排列组合的方法
2018/11/13 Python
解决Python内层for循环如何break出外层的循环的问题
2019/06/24 Python
python开启debug模式的方法
2019/06/27 Python
Golang GBK转UTF-8的例子
2019/08/26 Python
Python关于反射的实例代码分享
2020/02/20 Python
python反扒机制的5种解决方法
2021/02/06 Python
巴西女装购物网站:Eclectic
2018/04/24 全球购物
美国批发供应商:Kole Imports
2019/04/10 全球购物
泰国国际航空公司官网:Thai Airways International
2019/12/04 全球购物
2015年大学班级工作总结
2015/04/28 职场文书
宇宙与人观后感
2015/06/05 职场文书
家访教师心得体会
2016/01/23 职场文书
golang日志包logger的用法详解
2021/05/05 Golang