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


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 相关文章推荐
二级域名转向类
Nov 09 Javascript
javascript 日期时间函数(经典+完善+实用)
May 27 Javascript
js 图片缩放(按比例)控制代码
May 27 Javascript
javascript 动态加载 css 方法总结
Jul 11 Javascript
精心挑选的15个jQuery下拉菜单制作教程
Jun 15 Javascript
jQuery回车实现登录简单实现
Aug 20 Javascript
简单实用的反馈表单无刷新提交带验证
Nov 15 Javascript
JavaScript中获取时间的函数集
Aug 16 Javascript
jQuery插件DataTable使用方法详解(.Net平台)
Dec 22 Javascript
Javascript 两种刷新方法以及区别和适用范围
Jan 17 Javascript
Vue拖拽组件开发实例详解
May 11 Javascript
使用express获取微信小程序二维码小记
May 21 Javascript
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
php数组函数序列之array_unique() - 去除数组中重复的元素值
2011/10/29 PHP
CI框架在CLI下执行占用内存过大问题的解决方法
2014/06/17 PHP
php验证身份证号码正确性的函数
2016/07/20 PHP
DEDE实现转跳属性文档在模板上调用出转跳地址
2016/11/04 PHP
PHP简单实现正则匹配省市区的方法
2018/04/13 PHP
数据结构之利用PHP实现二分搜索树
2020/10/25 PHP
比较简单的异步加载JS文件的代码
2009/07/18 Javascript
jQuery版Tab标签切换
2011/03/16 Javascript
js中function()使用方法
2013/12/24 Javascript
vue分页组件table-pagebar使用实例解析
2020/11/15 Javascript
Javascript获取某个月的天数
2018/05/30 Javascript
vue项目中使用lib-flexible解决移动端适配的问题解决
2018/08/23 Javascript
图文详解vue框架安装步骤
2019/02/12 Javascript
javascript function(函数类型)使用与注意事项小结
2019/06/10 Javascript
微信小程序静默登录的实现代码
2020/01/08 Javascript
python获取beautifulphoto随机某图片代码实例
2013/12/18 Python
Python爬虫实现全国失信被执行人名单查询功能示例
2018/05/03 Python
python xlwt如何设置单元格的自定义背景颜色
2019/09/03 Python
详解numpy矩阵的创建与数据类型
2019/10/18 Python
Python基础之高级变量类型实例详解
2020/01/03 Python
Python面向对象魔法方法和单例模块代码实例
2020/03/25 Python
Python中如何添加自定义模块
2020/06/09 Python
详解Python IO口多路复用
2020/06/17 Python
用python实现名片管理系统
2020/06/18 Python
Biblibili视频投稿接口分析并以Python实现自动投稿功能
2021/02/05 Python
纯CSS3制作漂亮带动画效果的主机价格表
2015/04/25 HTML / CSS
HTML5边玩边学(3)像素和颜色
2010/09/21 HTML / CSS
食品采购员岗位职责
2014/04/14 职场文书
课前三分钟演讲稿
2014/04/24 职场文书
四风问题对照检查整改措施思想报告
2014/10/05 职场文书
审计局班子四风对照检查材料思想汇报
2014/10/07 职场文书
2015年国庆节活动总结
2015/03/23 职场文书
起诉书范文
2015/05/20 职场文书
地道战观后感300字
2015/06/04 职场文书
安全教育的主题班会
2015/08/13 职场文书
Axios取消重复请求的方法实例详解
2021/06/15 Javascript