常见效果实现之返回顶部(结合淡入、淡出、减速滚动)


Posted in Javascript onJanuary 04, 2012

在性能方面考虑了由于连续触发onscroll事件,频繁调用回调函数而产生的性能问题。可以将回调函数缓存一段时候后执行,即当这段时间内多次触发了onscroll事件,但回调函数只会执行一次。

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="gb2312" /> 
<title>结合淡入/淡出/减速运动效果实现的返回顶部功能</title> 
<style> 
.fixed{ 
position:fixed; bottom:100px; width:20px; right:100px; height:80px; font-size:12px; 

 cursor:pointer; background-color:#ccc; opacity:0; filter: alpha(opacity=0); 
} 
.placeholder{ height:2000px;} 
</style> 
</head> 
<body> 
<div id="gotop" class="fixed"> 
返回顶部 
</div> 
<script> 
var tool = { 
//此方法为了避免在 ms 段时间内,多次执行func。常用 resize、scoll、mousemove等连续性事件中 
buffer: function(func, ms, context){ 
var buffer; 
return function(){ 
if(buffer) return; 
buffer = setTimeout(function(){ 
func.call(this) 
buffer = undefined; 
},ms); 
}; 
}, 
/*读取或设置元素的透明度*/ 
opacity: function(elem, val){ 
var setting = arguments.length > 1; 
if("opacity" in elem.style){//elem.style["opacity"] 读取不到CSS class中的值 
return setting ? elem.style["opacity"] = val : elem.style["opacity"]; 
}else{ 
if(elem.filters && elem.filters.alpha) { 
return setting ? elem.filters.alpha["opacity"] = val*100 : elem.filters.alpha["opacity"]/100; 
} 
} 
}, 
//获取或设置文档对象的scrollTop 
//function([val]) 
documentScrollTop: function(val){ 
var elem = document; 
return (val!== undefined) ? 
elem.documentElement.scrollTop = elem.body.scrollTop = val : 
Math.max(elem.documentElement.scrollTop, elem.body.scrollTop); 
} 
}; 
//动画效果 
var effect = { 
//淡入 
fadein: function (elem){ 
var val = 0; 
var interval = 25; 
setTimeout(function(){ 
val += 0.1; 
if(val>1){ 
tool.opacity(elem, 1) 
return; 
}else { 
tool.opacity(elem, val) 
setTimeout(arguments.callee, interval); 
} 
},interval); 
}, 
//淡出 
fadeout: function (elem){ 
var val = 1; 
var interval = 25; 
setTimeout(function(){ 
val -= 0.1; 
if(val < 0){ 
tool.opacity(elem, 0) 
return; 
}else { 
tool.opacity(elem,val) ; 
setTimeout(arguments.callee, interval); 
} 
},interval); 
}, 
//减速移动滚动条 
move: function(scrollTop){ 
setTimeout(function(){ 
scrollTop = Math.floor((scrollTop * 0.65)); 
tool.documentScrollTop(scrollTop); 
if(scrollTop !=0 ){ 
setTimeout(arguments.callee, 25); 
} 
},25); 
} 
}; 
//主程序 
(function(){//gotop 
var visible = false; 
var elem = document.getElementById("gotop"); 
function onscroll(){ 
var scrollTop = tool.documentScrollTop(); 
if(scrollTop > 0){ 
if(!visible){ 
effect.fadein(elem) 
visible = true; 
} 
}else{ 
if(visible){ 
effect.fadeout(elem); 
visible = false; 
} 
} 
} 
function onclick(){ 
var scrollTop = tool.documentScrollTop(); 
effect.move(scrollTop); 
} 
elem.onclick = onclick; 
window.onscroll = tool.buffer(onscroll, 200, this); 
})(); 
</script> 
<div class="placeholder">placeholder</div> 
</body> 
</html>

兼容性和bugs相关问题:
1 opacity: function(elem, val){

if(val){//使用这种判断方式当传0,空字符串时会产生BUG 。
2:document.documentElement.scrollTop chrome取不到值 。
3: elem.style.opacity 读取不到在CSS Class中定义的值。
4:IE6不支持fixed定位,虽然可以使用absolute模拟。不过很有很多网站都它进行了降级处理。

Javascript 相关文章推荐
javaScript Array(数组)相关方法简述
Jul 25 Javascript
JavaScript中的anchor()方法使用详解
Jun 08 Javascript
js中利用tagname和id获取元素的方法
Jan 03 Javascript
Bootstrap项目实战之首页内容介绍(全)
Apr 25 Javascript
jquery.serialize() 函数语法及简单实例
Jul 08 Javascript
浅谈jquery高级方法描述与应用
Oct 04 Javascript
jQuery查找和过滤_动力节点节点Java学院整理
Jul 04 jQuery
Vue.js与 ASP.NET Core 服务端渲染功能整合
Nov 16 Javascript
JavaScript设计模式之工厂模式和抽象工厂模式定义与用法分析
Jul 26 Javascript
Vue的生命周期操作示例
Sep 17 Javascript
Node.js设置定时任务之node-schedule模块的使用详解
Apr 28 Javascript
Jquery高级应用Deferred对象原理及使用实例
May 28 jQuery
Textarea与懒惰渲染实现代码
Jan 04 #Javascript
js中有关IE版本检测
Jan 04 #Javascript
国外大牛IE版本检测!现在IE都到9了,IE检测代码
Jan 04 #Javascript
IE的有条件注释判定IE版本详解(附实例代码)
Jan 04 #Javascript
js变量以及其作用域详解
Jul 18 #Javascript
分享一个asp.net pager分页控件
Jan 04 #Javascript
调试Node.JS的辅助工具(NodeWatcher)
Jan 04 #Javascript
You might like
require(),include(),require_once()和include_once()的异同
2007/01/02 PHP
PHP教程 基本语法
2009/10/23 PHP
Codeigniter实现发送带附件的邮件
2015/03/19 PHP
详谈php中 strtr 和 str_replace 的效率问题
2017/05/14 PHP
文本框获得焦点和失去焦点的判断代码
2012/03/18 Javascript
Firefox中通过JavaScript复制数据到剪贴板(Copy to Clipboard 跨浏览器版)
2013/11/22 Javascript
BackBone及其实例探究_动力节点Java学院整理
2017/07/14 Javascript
js+html实现周岁年龄计算器
2019/06/25 Javascript
vue实现分页的三种效果
2020/06/23 Javascript
简单了解three.js 着色器材质
2020/08/03 Javascript
[48:24]完美世界DOTA2联赛循环赛LBZS vs Forest 第一场 10月30日
2020/10/31 DOTA
Python实现的弹球小游戏示例
2017/08/01 Python
Python之多线程爬虫抓取网页图片的示例代码
2018/01/10 Python
对Python 网络设备巡检脚本的实例讲解
2018/04/22 Python
使用urllib库的urlretrieve()方法下载网络文件到本地的方法
2018/12/19 Python
Python实现字典按key或者value进行排序操作示例【sorted】
2019/05/03 Python
Python高级特性——详解多维数组切片(Slice)
2019/11/26 Python
python调用函数、类和文件操作简单实例总结
2019/11/29 Python
Python reshape的用法及多个二维数组合并为三维数组的实例
2020/02/07 Python
PyCharm 2020.1版安装破解注册码永久激活(激活到2089年)
2020/09/24 Python
canvas绘制文本内容自动换行的实现代码
2019/01/14 HTML / CSS
canvas绘制太极图的实现示例
2020/04/29 HTML / CSS
中国跨镜手机配件批发在线商店:TVC-Mall
2019/08/20 全球购物
班组长安全职责
2014/01/05 职场文书
党校学习思想汇报
2014/01/06 职场文书
2014全国两会心得体会
2014/03/17 职场文书
大学学生会竞选演讲稿
2014/04/25 职场文书
倡议书格式
2014/08/30 职场文书
预备党员自我批评思想汇报
2014/10/10 职场文书
2015年员工工作总结范文
2015/04/08 职场文书
诚实守信主题班会
2015/08/13 职场文书
python 中的@运算符使用
2021/05/26 Python
javascript Number 与 Math对象的介绍
2021/11/17 Javascript
解析探秘fescar分布式事务实现原理
2022/02/28 Java/Android
pytorch中的 .view()函数的用法介绍
2022/03/17 Python
Python实现数据的序列化操作详解
2022/07/07 Python