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中查找不以XX字符结尾的单词示例代码
Oct 15 Javascript
jquery常用方法及使用示例汇总
Nov 08 Javascript
Bootstrap编写导航栏和登陆框
May 30 Javascript
javascript作用域、作用域链(菜鸟必看)
Jun 16 Javascript
详解BootStrap中Affix控件的使用及保持布局的美观的方法
Jul 08 Javascript
又一款js时钟!transform实现时钟效果
Aug 15 Javascript
基于JavaScript实现自定义滚动条
Jan 25 Javascript
详解React开发中使用require.ensure()按需加载ES6组件
May 12 Javascript
AngularJs用户输入动态模板XSS攻击示例详解
Apr 21 Javascript
详解vue-cli3 中跨域解决方案
Apr 10 Javascript
微信小程序实现侧边分类栏
Oct 21 Javascript
vue 中几种传值方法(3种)
Nov 12 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
实现dedecms全站URL静态化改造的代码
2007/03/29 PHP
Uncaught exception com_exception with message Failed to create COM object
2012/01/11 PHP
qq登录,新浪微博登录接口申请过程中遇到的问题
2014/07/22 PHP
MacOS 安装 PHP的图片裁剪扩展Tclip
2015/03/25 PHP
PHP面向对象继承用法详解(优化与减少代码重复)
2016/12/02 PHP
php使用PDO获取结果集的方法
2017/02/16 PHP
THINKPHP截取中文字符串函数实例代码
2017/03/20 PHP
php实现的三个常用加密解密功能函数示例
2017/11/06 PHP
PHP 枚举类型的管理与设计知识点总结
2020/02/13 PHP
PHP 实现重载
2021/03/09 PHP
Knockout text绑定DOM的使用方法
2013/11/15 Javascript
前台js调用后台方法示例
2013/12/02 Javascript
Ajax提交与传统表单提交的区别说明
2014/02/07 Javascript
jQuery实现文本展开收缩特效
2015/06/03 Javascript
浅谈$('div a') 与$('div&gt;a')的区别
2016/07/18 Javascript
JS实战篇之收缩菜单表单布局
2016/12/10 Javascript
详解vue mixins和extends的巧妙用法
2017/12/20 Javascript
每天学点Vue源码之vm.$mount挂载函数
2019/03/11 Javascript
js中数组常用方法总结(推荐)
2019/04/09 Javascript
详解从0开始搭建微信小程序(前后端)的全过程
2019/04/15 Javascript
vue element中axios下载文件(后端Python)
2019/05/10 Javascript
vue使用prop可以渲染但是打印台报错的解决方式
2019/11/13 Javascript
Vue使用虚拟dom进行渲染view的方法
2019/12/26 Javascript
加速vue组件渲染之性能优化
2020/04/09 Javascript
jQuery 选择器用法实例分析【prev + next】
2020/05/22 jQuery
[05:09]第二届DOTA2亚洲邀请赛决赛日比赛集锦:iG 3:0 OG夺冠
2017/04/05 DOTA
python+matplotlib绘制3D条形图实例代码
2018/01/17 Python
使用python实现画AR模型时序图
2019/11/20 Python
关于Keras模型可视化教程及关键问题的解决
2020/01/24 Python
keras中的backend.clip用法
2020/05/22 Python
python 通过 pybind11 使用Eigen加速代码的步骤
2020/12/07 Python
python 求两个向量的顺时针夹角操作
2021/03/04 Python
纯CSS3实现地球自转实现代码(图文教程附送源码)
2012/12/26 HTML / CSS
会计电算化个人自我评价
2013/11/17 职场文书
2014年旅游局法制宣传日活动总结
2014/11/01 职场文书
一劳永逸彻底解决pip install慢的办法
2021/05/24 Python