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


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 相关文章推荐
css transform 3D幻灯片特效实现步骤解读
Mar 27 Javascript
完美解决IE低版本不支持call与apply的问题
Dec 05 Javascript
jquery在ie7下选择器的问题导致append失效的解决方法
Jan 10 Javascript
Bootstrap和Angularjs配合自制弹框的实例代码
Aug 24 Javascript
AngularJS 最常用的八种功能(基础知识)
Jun 26 Javascript
使用JavaScript实现链表的数据结构的代码
Aug 02 Javascript
BootStrap自定义popover,点击区域隐藏功能的实现
Jan 23 Javascript
Vue 第三方字体图标引入 Font Awesome的方法
Sep 28 Javascript
详解Vue底部导航栏组件
May 02 Javascript
使用vue-router切换页面时,获取上一页url以及当前页面url的方法
May 06 Javascript
JavaScript实现简单贪吃蛇效果
Mar 09 Javascript
Vue CLI3移动端适配(px2rem或postcss-plugin-px2rem)
Apr 27 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 HTML代码串截取代码
2008/12/29 PHP
提高Laravel应用性能方法详解
2019/06/24 PHP
Laravel Reponse响应客户端示例详解
2020/09/03 PHP
PHP实现腾讯短网址生成api接口实例
2020/12/08 PHP
js停止输出代码
2008/07/20 Javascript
jQuery formValidator表单验证插件开源了 含API帮助、源码、示例
2008/08/14 Javascript
JS backgroundImage控制
2009/05/19 Javascript
JQUERY 浏览器判断实现函数
2009/08/20 Javascript
40个新鲜出炉的jQuery 插件和免费教程[上]
2012/07/24 Javascript
Jquery index()方法 获取相应元素索引值
2012/10/12 Javascript
js鼠标点击图片实现随机变换图片的方法
2015/02/16 Javascript
JavaScript+CSS无限极分类效果完整实现方法
2015/12/22 Javascript
jQuery给元素添加样式的方法详解
2015/12/30 Javascript
JS去除空格和换行的正则表达式(推荐)
2016/06/14 Javascript
javascript判断firebug是否开启的方法
2016/11/23 Javascript
原生js实现水平方向无缝滚动
2017/01/10 Javascript
Three.js利用dat.GUI如何简化试验流程详解
2017/09/26 Javascript
浅谈webpack对样式的处理
2018/01/05 Javascript
转换layUI的数据表格中的日期格式方法
2019/09/19 Javascript
vue如何实现动态加载脚本
2020/02/05 Javascript
一篇文章让你搞懂JavaScript 原型和原型链
2020/11/23 Javascript
浅谈Python爬取网页的编码处理
2016/11/04 Python
Python SQLite3简介
2018/02/22 Python
python3实现磁盘空间监控
2018/06/21 Python
Python二叉树的镜像转换实现方法示例
2019/03/06 Python
Python3.5 + sklearn利用SVM自动识别字母验证码方法示例
2019/05/10 Python
Python一键查找iOS项目中未使用的图片、音频、视频资源
2019/08/12 Python
Python使用循环神经网络解决文本分类问题的方法详解
2020/01/16 Python
Python + selenium + crontab实现每日定时自动打卡功能
2020/03/31 Python
css3media响应式布局实例
2016/07/08 HTML / CSS
女子锻炼服装和瑜伽服装:Splits59
2019/03/04 全球购物
公积金转移接收函
2014/01/11 职场文书
行政内勤岗位职责
2014/04/07 职场文书
医德医风自我评价2015
2015/03/03 职场文书
2015年电厂工作总结范文
2015/05/13 职场文书
JS代码编译器Monaco使用方法
2021/06/11 Javascript