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

在性能方面考虑了由于连续触发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模拟。不过很有很多网站都它进行了降级处理。

时间: 2024-11-03 11:42:05

常见效果实现之返回顶部(结合淡入、淡出、减速滚动)_javascript技巧的相关文章

js控制淡入淡出示例代码_javascript技巧

相对来说可以让初学者看一下,并不太实用,可能jquery4条语句就能解决,但是原生相对有参照性,了解最终原理才是关键. 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.o

javascript运动效果实例总结(放大缩小、滑动淡入、滚动)_javascript技巧

本文实例总结了javascript运动效果实现与用法.分享给大家供大家参考,具体如下: 一.图片放大缩小效果: <!doctype html> <html> <head> <meta charset="utf-8"> <title>图片放大缩小</title> <style> *{ margin:0; padding:0; list-style:none;} #ulList{ margin:50px;}

JavaScript返回网页中锚点数目的方法_javascript技巧

本文实例讲述了JavaScript返回网页中锚点数目的方法.分享给大家供大家参考.具体如下: JavaScript返回网页中锚点的数目,下面的JS代码获取页面中的anchor数量 <!DOCTYPE html> <html> <body> <a name="html">HTML Tutorial</a><br> <a name="css">CSS Tutorial</a>

javascript实现仿IE顶部的可关闭警告条_javascript技巧

功能非常实用,代码非常简单,就不多废话了,直接奉上: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <met

js实现的页面加载完毕之前loading提示效果完整示例【附demo源码下载】_javascript技巧

本文实例讲述了js实现的页面加载完毕之前loading提示效果.分享给大家供大家参考,具体如下: 一.JS代码: //获取浏览器页面可见高度和宽度 var _PageHeight = document.documentElement.clientHeight, _PageWidth = document.documentElement.clientWidth; //计算loading框距离顶部和左部的距离(loading框的宽度为215px,高度为61px) var _LoadingTop =

js中的window.open返回object的错误的解决方法_javascript技巧

解决window.open后返回object的错误 复制代码 代码如下: <a href="javascript:void(window.open('','','width=200,height=200'))">window.open()</a> 只在js的外层加上一个void不带返回参数的声明. 顺便在这里将window.open函数的参数使用也列出来: window.open函数参数列表 window = object.open([URL ][, name

用AJAX返回HTML片段中的JavaScript脚本_javascript技巧

这是AJAX开发中很常见的问题,如果你不是一直在用JavaScript框架做开发,相信你早就发现这个问题了.本文分析了两个解决办法,其中一个是讲解jQuery框架的实现. 一. 问题描述 下面举个简单的例子,演示问题所在.在下面的例子中,假设变量responseText就是AJAX加载的HTML片段数据,其中包含脚本弹出一条消息,用innerHTML方法插入ID为ajaxData的DIV中,你可能期望看到弹出那个消息框,结果你发现没有,问题就是这样. 复制代码 代码如下: <div id="

js 右侧浮动层效果实现代码(跟随滚动)_javascript技巧

实现代码一. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>无标题文档</title> <!--**

easyui form validate总是返回false的原因及解决方法_javascript技巧

最近做表单验证用了easyui form组件.又一次发现在测试表单都填写正确了但是调试表单的代码监测到调用form的"validate"方法总是返回false 最后查了一下原因在html中写的是easyui-validatebox但是在script中却又声明了$('#field1').combobox(); <form id="form1"> <input type="text" id="field1" cl