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


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或asp实现的判断身份证号码是否正确两种验证方法
Nov 26 Javascript
动态加载js和css(外部文件)
Apr 17 Javascript
js函数定时器实现定时读取系统实时连接数
Apr 30 Javascript
JavaScript 七大技巧(二)
Dec 13 Javascript
JavaScript setTimeout使用闭包功能实现定时打印数值
Dec 18 Javascript
详解jQuery uploadify文件上传插件的使用方法
Dec 16 Javascript
轻松理解JavaScript闭包
Mar 14 Javascript
Vue v2.5 调整和更新不完全问题
Oct 24 Javascript
react 实现页面代码分割、按需加载的方法
Apr 03 Javascript
vue生命周期与钩子函数简单示例
Mar 13 Javascript
vue项目中定义全局变量、函数的几种方法
Nov 08 Javascript
使用JavaScript和MQTT开发物联网应用示例解析
Aug 07 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封装的page分页类定义与用法完整示例
2018/12/24 PHP
php+jQuery ajax实现的实时刷新显示数据功能示例
2019/09/12 PHP
TP5框架实现签到功能的方法分析
2020/04/05 PHP
javascript 动态添加事件代码
2008/11/30 Javascript
javascript中的原型链深入理解
2014/02/24 Javascript
Js获取下拉框选定项的值和文本的实现代码
2014/02/26 Javascript
jQuery实现回车键(Enter)切换文本框焦点的代码实例
2014/05/05 Javascript
深入理解逻辑表达式的用法 与或非的用法
2016/06/06 Javascript
JS 通过系统时间限定动态添加 select option的实例代码
2016/06/09 Javascript
jquery实用技巧之输入框提示语句
2016/07/28 Javascript
js中编码函数:escape,encodeURI与encodeURIComponent详解
2017/03/21 Javascript
nodejs个人博客开发第一步 准备工作
2017/04/12 NodeJs
简单的JS控制button颜色随点击更改的实现方法
2017/04/17 Javascript
详解vue中使用vue-quill-editor富文本小结(图片上传)
2019/04/24 Javascript
详解Python中内置的NotImplemented类型的用法
2015/03/31 Python
Python基于matplotlib绘制栈式直方图的方法示例
2017/08/09 Python
Python文件和流(实例讲解)
2017/09/12 Python
使用Python从零开始撸一个区块链
2018/03/14 Python
解决Python中定时任务线程无法自动退出的问题
2019/02/18 Python
python获取依赖包和安装依赖包教程
2020/02/13 Python
通过python检测字符串的字母
2020/02/18 Python
Python实时监控网站浏览记录实现过程详解
2020/07/14 Python
python字典与json转换的方法总结
2020/12/28 Python
在html5的Canvas上绘制椭圆的几种方法总结
2013/01/07 HTML / CSS
总结html5自定义属性有哪些
2020/04/01 HTML / CSS
澳大利亚二手奢侈品网站:Modsie
2019/09/23 全球购物
农村婚庆司仪主持词
2014/03/15 职场文书
高中课前三分钟演讲稿
2014/08/18 职场文书
永远跟党走演讲稿
2014/09/12 职场文书
美国旅游签证工作证明
2014/10/14 职场文书
合伙开公司协议书范本
2014/10/28 职场文书
单位接收函范文
2015/01/30 职场文书
学历证明范文
2015/06/16 职场文书
5行Python代码实现一键批量扣图
2021/06/29 Python
ElementUI实现el-form表单重置功能按钮
2021/07/21 Javascript
JAVA springCloud项目搭建流程
2022/05/11 Java/Android