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 相关文章推荐
开发跨浏览器javascript常见注意事项
Jan 01 Javascript
javascript循环变量注册dom事件 之强大的闭包
Sep 08 Javascript
js中for in的用法示例解析
Dec 25 Javascript
鼠标移到图片上变大显示而不是放大镜效果
Jun 15 Javascript
jQuery实现简单下拉导航效果
Sep 07 Javascript
jQuery取得iframe中元素的常用方法详解
Jan 14 Javascript
JavaScript关于提高网站性能的几点建议(一)
Jul 24 Javascript
AngularJS指令与控制器之间的交互功能示例
Dec 14 Javascript
详解angular element()方法使用
Apr 08 Javascript
BootStrap的双日历时间控件使用
Jul 25 Javascript
vue-cli3 karma单元测试的实现
Jan 18 Javascript
Vue实现根据hash高亮选项卡
May 27 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
《破坏领主》销量已超100万 未来将继续开发新内容
2020/03/08 其他游戏
php中filter函数验证、过滤用户输入的数据
2014/01/13 PHP
codeigniter上传图片不能正确识别图片类型问题解决方法
2014/07/25 PHP
php采用curl实现伪造IP来源的方法
2014/11/21 PHP
PHP使用flock实现文件加锁的方法
2015/07/01 PHP
php array_udiff_assoc 计算两个数组的差集实例
2016/11/12 PHP
js限制文本框为整数和货币的函数代码
2010/10/13 Javascript
jQuery EasyUI API 中文文档 - Form表单
2011/10/06 Javascript
JS中怎样判断undefined(比较不错的方法)
2014/03/27 Javascript
jQuery简单操作cookie的插件实例
2016/01/13 Javascript
深入理解Javascript中的自执行匿名函数
2016/06/03 Javascript
Knockoutjs 学习系列(一)ko初体验
2016/06/07 Javascript
Bootstrap Metronic完全响应式管理模板之菜单栏学习笔记
2016/07/08 Javascript
javascript设计模式之策略模式学习笔记
2017/02/15 Javascript
vue mint-ui 实现省市区街道4级联动示例(仿淘宝京东收货地址4级联动)
2017/10/16 Javascript
微信小程序实现下拉菜单切换效果
2020/03/30 Javascript
详解react-refetch的使用小例子
2019/02/15 Javascript
超轻量级的js时间库miment使用解析
2019/08/02 Javascript
在vue中实现echarts随窗体变化
2020/07/27 Javascript
前端使用crypto.js进行加密的函数代码
2020/08/16 Javascript
jQuery实现朋友圈查看图片
2020/09/11 jQuery
python使用chardet判断字符串编码的方法
2015/03/13 Python
Python使用Tkinter实现机器人走迷宫
2018/01/22 Python
python  Django中的apps.py的目的是什么
2018/10/15 Python
Python里字典的基本用法(包括嵌套字典)
2019/02/27 Python
python字符串循环左移
2019/03/08 Python
10张动图学会python循环与递归问题
2021/02/06 Python
html5 自定义播放器核心代码
2013/12/20 HTML / CSS
Clarks其乐鞋荷兰官网:Clarks荷兰
2019/07/05 全球购物
法学专业毕业生自荐信范文
2013/12/18 职场文书
领导的自我鉴定
2013/12/28 职场文书
职工运动会邀请函
2014/02/02 职场文书
教堂婚礼主持词
2014/03/14 职场文书
公司周年庆典标语
2014/10/07 职场文书
2016年三八红旗手先进事迹材料
2016/02/26 职场文书
文案策划岗位个人自我评价(范文)
2019/08/08 职场文书