程序源码
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的时候就载入广告.
更多js 居中漂浮广告相关文章请关注PHP中文网!

选择Python还是JavaScript应基于职业发展、学习曲线和生态系统:1)职业发展:Python适合数据科学和后端开发,JavaScript适合前端和全栈开发。2)学习曲线:Python语法简洁,适合初学者;JavaScript语法灵活。3)生态系统:Python有丰富的科学计算库,JavaScript有强大的前端框架。

JavaScript框架的强大之处在于简化开发、提升用户体验和应用性能。选择框架时应考虑:1.项目规模和复杂度,2.团队经验,3.生态系统和社区支持。

引言我知道你可能会觉得奇怪,JavaScript、C 和浏览器之间到底有什么关系?它们之间看似毫无关联,但实际上,它们在现代网络开发中扮演着非常重要的角色。今天我们就来深入探讨一下这三者之间的紧密联系。通过这篇文章,你将了解到JavaScript如何在浏览器中运行,C 在浏览器引擎中的作用,以及它们如何共同推动网页的渲染和交互。JavaScript与浏览器的关系我们都知道,JavaScript是前端开发的核心语言,它直接在浏览器中运行,让网页变得生动有趣。你是否曾经想过,为什么JavaScr

Node.js擅长于高效I/O,这在很大程度上要归功于流。 流媒体汇总处理数据,避免内存过载 - 大型文件,网络任务和实时应用程序的理想。将流与打字稿的类型安全结合起来创建POWE

Python和JavaScript在性能和效率方面的差异主要体现在:1)Python作为解释型语言,运行速度较慢,但开发效率高,适合快速原型开发;2)JavaScript在浏览器中受限于单线程,但在Node.js中可利用多线程和异步I/O提升性能,两者在实际项目中各有优势。

JavaScript起源于1995年,由布兰登·艾克创造,实现语言为C语言。1.C语言为JavaScript提供了高性能和系统级编程能力。2.JavaScript的内存管理和性能优化依赖于C语言。3.C语言的跨平台特性帮助JavaScript在不同操作系统上高效运行。

JavaScript在浏览器和Node.js环境中运行,依赖JavaScript引擎解析和执行代码。1)解析阶段生成抽象语法树(AST);2)编译阶段将AST转换为字节码或机器码;3)执行阶段执行编译后的代码。

Python和JavaScript的未来趋势包括:1.Python将巩固在科学计算和AI领域的地位,2.JavaScript将推动Web技术发展,3.跨平台开发将成为热门,4.性能优化将是重点。两者都将继续在各自领域扩展应用场景,并在性能上有更多突破。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

禅工作室 13.0.1
功能强大的PHP集成开发环境

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

SublimeText3 Linux新版
SublimeText3 Linux最新版

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具