js 居中漂浮广告


Posted in Javascript onMarch 21, 2010

程序源码

var floatAd = {}; 
floatAd.getScrollTop = function(node) { 
var doc = node ? node.ownerDocument : document; 
return doc.documentElement.scrollTop || doc.body.scrollTop; 
}; 
floatAd.getScrollLeft = function(node) { 
var doc = node ? node.ownerDocument : document; 
return doc.documentElement.scrollLeft || doc.body.scrollLeft; 
}; 
floatAd.getBrowser = function() { 
var d = document.documentElement; 
return { 
width: window.innerWidth || (d && d.clientWidth) || document.body.clientWidth, 
height: window.innerHeight || (d && d.clientHeight) || document.body.clientHeight 
} 
}; 
floatAd.extend = function(destination, source) { 
for(var property in source) { 
destination[property] = source[property]; 
} 
return destination; 
}; 
/* 默认属性扩展 */ 
floatAd.setOptions = function(options) { 
this.options = { 
delay: 20, // 调整速率 
fadeTime: 1 // 自动消失时间 
}; 
return this.extend(this.options, options || {}); 
}; 
/* 类初始化 */ 
floatAd.init = function(id, options) { 
var _this = this; 
this.extend(this, this.setOptions(options)); 
this.control = document.getElementById(id); 
var _callback = function() { // fadeIn完成后的回调函数 
_this.timer = window.setInterval(function() { _this.scroll() }, _this.delay); // 滚动定位 
window.setTimeout(function() { _this.fadeOut() }, _this.fadeTime * 1000); // 在固定时间内消失 
} 
this.fadeIn(_callback); 
window.onresize = function() { _this.setCenter(); } 
}; 
/* 定时滚动 */ 
floatAd.scroll = function() { 
this.start = parseInt(this.control.style.top, 10); 
this.end = parseInt(this.getScrollTop() + this.getBrowser().height - this.control.clientHeight, 10); 
if(this.start != this.end) { 
this.amount = Math.ceil(Math.abs(this.end - this.start) / 15); /* 递减公式(this.start无限增大,整个分子无限减小,整个值就无限趋近于0) */ 
this.control.style.top = parseInt(this.control.style.top, 10) + ((this.end < this.start) ? -this.amount : this.amount) + 'px'; 
} 
}; 
/* 目标居中并处于最底部 */ 
floatAd.setCenter = function() { 
this.top = this.getScrollTop() + floatAd.getBrowser().height; 
this.left = (this.getScrollLeft() + floatAd.getBrowser().width - this.control.clientWidth) / 2; 
this.control.style.top = this.top + 'px'; 
this.control.style.left = this.left + 'px'; 
}; 
/* fadeIn */ 
floatAd.fadeIn = function(callback) { 
var _this = this, _top = 0; 
this.control.style.display = 'block'; // *要提前显示.不然无法取得clientWidth 
this.setCenter(); 
var _timer = window.setInterval(function() { 
_this.control.style.top = _this.getScrollTop() + _this.getBrowser().height - (++_top) + 'px'; 
if(_top >= _this.control.clientHeight) { 
window.clearInterval(_timer); 
callback && callback(); 
} 
}, 2); 
}; 
/* fadeOut */ 
floatAd.fadeOut = function() { 
var _this = this, _num = 0, _top = _this.control.clientHeight; 
window.clearTimeout(this.timer); 
var _timer = window.setInterval(function() { 
if(_top <= 0) { 
window.clearInterval(_timer); 
_this.control.style.display = 'none'; 
} else { 
_this.control.style.top = _this.getScrollTop() + _this.getBrowser().height - (--_top) + 'px'; 
} 
}, 2); 
this.control.style.top = (parseInt(this.control.style.top, 10) + 100) + 'px'; 
}; 
var newAd = 'start'; 
document.getElementById('show').onclick = function() { 
if(newAd == 'start') { 
newAd = floatAd.init('ad', { fadeTime: 10 }); 
} 
}

程序原理
整个广告运行具有四步动作.
1. 初始化时隐藏于页面最底部.
2. 自底向上升起.直到整个广告漂浮出来
3. 启动检测.滚动时保持广告始终处于页面中间最底部.
4. 到达自定义间隔时间.广告自动渐隐.
整个实现最重要的就是控制广告距离文档(非窗口)最顶部的距离.(scrollTop + browser.clientHeight).这里提供了获取这几个值的代码.
获取scrollTop, scrollLeft
注意Chrome和Safari即使在标准doc模式下的根文档也是document.body而不是document.documentElement
floatAd.getScrollTop = function(node) { 
var doc = node ? node.ownerDocument : document; 
return doc.documentElement.scrollTop || doc.body.scrollTop; 
}; 
floatAd.getScrollLeft = function(node) { 
var doc = node ? node.ownerDocument : document; 
return doc.documentElement.scrollLeft || doc.body.scrollLeft; 
};

获取可视窗口的宽高
floatAd.getBrowser = function() { 
var d = document.documentElement; 
return { 
width: window.innerWidth || (d && d.clientWidth) || document.body.clientWidth, 
height: window.innerHeight || (d && d.clientHeight) || document.body.clientHeight 
} 
};

代码思路流程
初始化(init) -----> 设置居中并隐藏底部(setCenter) -----> 渐显(fadeIn) -----> 渐显完毕.调用回调函数_callback ----->
开始倒计时渐隐时间(setTimeout(fadeOut, time)), 并绑定实时检测函数(scroll) -----> 到达自定义时间隐藏广告(fadeOut)
使用说明
实例化函数.传入广告容器ID.设置默认属性.
默认属性有:
delay: 20, // 调整速率 
fadeTime: 1 // 自动消失时间(s) 
var newAd = 'start'; 
document.getElementById('show').onclick = function() { 
if(newAd == 'start') { 
newAd = floatAd.init('ad', { fadeTime: 10 }); 
} 
}

这里为了演示方便.所以当点击按钮时候才初始化广告.也可以在window.onload的时候就载入广告.
演示下载地址 居中显示的漂浮广告代码
Javascript 相关文章推荐
js的alert样式如何更改如背景颜色
Jan 22 Javascript
jquery选择器之层级过滤选择器详解
Jan 27 Javascript
png在IE6 下无法透明的解决方法汇总
May 21 Javascript
javaScript中with函数用法实例分析
Jun 08 Javascript
JavaScript中循环遍历Array与Map的方法小结
Mar 12 Javascript
老生常谈javascript的类型转换
Oct 12 Javascript
javascript入门之window对象【新手必看】
Nov 22 Javascript
node.js利用mongoose获取mongodb数据的格式化问题详解
Oct 06 Javascript
js如何找出字符串中的最长回文串
Jun 04 Javascript
简单学习5种处理Vue.js异常的方法
Jun 17 Javascript
解决Vue的项目使用Element ui 走马灯无法实现的问题
Aug 03 Javascript
TypeScript 使用 Tuple Union 声明函数重载
Apr 07 Javascript
jquery checkbox,radio是否选中的判断代码
Mar 20 #Javascript
javascript中的new使用
Mar 20 #Javascript
javascript 操作select下拉列表框的一点小经验
Mar 20 #Javascript
js 格式化时间日期函数小结
Mar 20 #Javascript
window.location.hash 属性使用说明
Mar 20 #Javascript
对 lightbox JS 图片控件进行了一下改造, 使其他支持复杂的图片说明
Mar 20 #Javascript
js 强制弹出窗口代码研究-又一款代码
Mar 20 #Javascript
You might like
PHP制作图形验证码代码分享
2014/10/23 PHP
基于ThinkPHP5.0实现图片上传插件
2017/09/25 PHP
PHP使用两个栈实现队列功能的方法
2018/01/15 PHP
利用js(jquery)操作Cookie的方法说明
2013/12/19 Javascript
Nodejs极简入门教程(三):进程
2014/10/27 NodeJs
jQuery.extend 函数及用法详细
2015/09/06 Javascript
基于Jquery实现万圣节快乐特效
2015/11/01 Javascript
JavaScript的Number对象的toString()方法
2015/12/18 Javascript
jQuery中deferred对象使用方法详解
2016/07/14 Javascript
nodejs搭建本地http服务器教程
2017/03/13 NodeJs
Node.js中 __dirname 的使用介绍
2017/06/19 Javascript
JS解析url查询参数的简单代码
2017/08/06 Javascript
微信小程序实现分享到朋友圈功能
2018/07/19 Javascript
JavaScript事件冒泡与事件捕获实例分析
2018/08/01 Javascript
jQuery轮播图实例详解
2018/08/15 jQuery
python轻松实现代码编码格式转换
2015/03/26 Python
详细讲解用Python发送SMTP邮件的教程
2015/04/29 Python
python在非root权限下的安装方法
2018/01/23 Python
基于OpenCV python3实现证件照换背景的方法
2019/03/22 Python
python使用opencv对图像mask处理的方法
2019/07/05 Python
django框架创建应用操作示例
2019/09/26 Python
django框架forms组件用法实例详解
2019/12/10 Python
Flask和pyecharts实现动态数据可视化
2020/02/26 Python
Python+unittest+requests 接口自动化测试框架搭建教程
2020/10/09 Python
梅西酒窖:Macy’s Wine Cellar
2018/01/07 全球购物
索尼巴西商店:Sony巴西
2019/06/21 全球购物
Cynthia Rowley官网:全球领先的生活方式品牌
2020/10/27 全球购物
在weblogic中发布ejb需涉及到哪些配置文件
2012/01/17 面试题
七匹狼男装广告词
2014/03/21 职场文书
投资合作协议书
2014/04/17 职场文书
给校长的建议书300字
2014/05/16 职场文书
2015年度团总支工作总结
2015/04/23 职场文书
学校2015年纠风工作总结
2015/05/15 职场文书
行政复议决定书
2015/06/24 职场文书
Python实现位图分割的效果
2021/11/20 Python
SQLServer中exists和except用法介绍
2021/12/04 SQL Server