基于JavaScript实现符合W3C标准的随机漂浮图片广告
作者:异步漫步时间:2026-10-29 19:58:13浏览:521
本文分享符合W3C标准的JavaScript随机漂浮图片广告代码,解决DOCTYPE声明后失效问题。提供两种实现方案,并详细讲解如何通过设置Flash的wmode属性解决广告被遮挡的层级问题,兼容主流浏览器。
符合W3C标准的漂浮广告实现
网络上存在大量此类代码,但往往不符合W3C标准。在头部添加<!DOCTYPE html>等声明后,原有的漂浮效果通常会失效。下面分享一段符合标准的漂浮代码,帮助读者避免繁琐的代码改造工作。
第一种实现方案:
具体代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset=" utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>漂浮广告代码</title>
<style type="text/css">
#thediv
{
z-index:100;
position:absolute;
top:43px;
left:2px;
height:100px;
width:100px;
background-color:red;
}
</style>
<script type="text/javascript">
var xPos=300;
var yPos=200;
var step=1;
var delay=8;
var height=0;
var Hoffset=0;
var Woffset=0;
var yon=0;
var xon=0;
var pause=true;
var interval;
function changePos()
{
width=document.documentElement.clientWidth;
height=document.documentElement.clientHeight;
Hoffset=thediv.offsetHeight;
Woffset=thediv.offsetWidth;
thediv.style.left=(xPos+document.body.scrollLeft+document.documentElement.scrollLeft)+"px";
thediv.style.top=(yPos+document.body.scrollTop+document.documentElement.scrollTop)+"px";
if(yon)
{
yPos=yPos+step;
}
else
{
yPos=yPos-step;
}
if(yPos<0)
{
yon=1;
yPos=0;
}
if(yPos>=(height-Hoffset))
{
yon=0;
yPos=(height - Hoffset);
}
if(xon)
{
xPos=xPos + step;
}
else
{
xPos=xPos - step;
}
if(xPos < 0)
{
xon = 1;
xPos = 0;
}
if(xPos >= (width - Woffset))
{
xon = 0;
xPos = (width - Woffset);
}
}
function start()
{
thediv.visibility="visible";
interval=setInterval('changePos()',delay);
}
function pause_resume()
{
if(pause)
{
clearInterval(interval);
pause = false;
}
else
{
interval = setInterval(changePos,delay);
pause = true;
}
}
window.onload=function()
{
thediv.style.top=yPos;
start();
}
</script>
</head>
<body>
<div id="thediv"></div>
</body>
</html>
上述代码满足了设计要求,红色div块可在网页中随机漂浮,且兼容各类浏览器。此处不再赘述实现细节,如有问题欢迎留言讨论。
JS随机漂浮广告具体实例
第二种方案:JS随机漂浮广告具体实例
代码如下:
<!--随机漂浮广告开始-->
<div id="float" style="position:absolute; z-index:3;(我建议大家把这里设为100,这样浮动图就不会被遮住了) left: 512px; width: 83px; top: 9px; height: 53px;">
<img src="piaofu.gif" width="100" height="50"> </div>
<script type="text/javascript">
<!--随机漂浮广告 -->
var xPos=0,yPos=0;//x,y轴坐标
var xon=0;//图片在x轴移动方向
var yon=0;//图片在y轴移动方向
var step=1; //移动距离
var img=document.getElementByIdx_x("float");//图片层
function floatP()
{
var width=document.body.clientWidth;//浏览器宽度
var height=document.body.clientHeight;//浏览器高度
var Hoffset=img.offsetHeight;//图片高度
var Woffset=img.offsetWidth;//图片宽度
img.style.left=xPos+document.body.scrollLeft;//图片距离浏览器左侧位置
img.style.top=yPos+document.body.scrollTop;//图片距离浏览器顶端位置
if(yon==0){
yPos=yPos+step;//图片在y轴方向上下移动
}else{
yPos=yPos-step;
}
if(yPos<0){//飘到顶端,沿y轴向下移动
yon=0;
yPos=0;
}
if(yPos>=(height-Hoffset)){//飘到低端,沿y轴向上移动
yon=1;
yPos=(height-Hoffset);
}
if(xon==0){//x轴向右移动
xPos=xPos+step;
}else{
xPos=xPos-step;//x轴向左移动
}
if(xPos<0){//飘到左侧时沿x轴向右移动
xon=0;
xPos=0;
}
if(xPos>=(width-Woffset)){//飘到右侧时沿x轴向左移动
xon=1;
xPos=(width-Woffset);
}
setTimeout("floatP()",30);//定时调用。
}
window.onload=floatP();
</script>
代码如下:
<script>
var x = 50,y = 60 //浮动层的初始位置,分别对应层的初始X坐标和Y坐标
var xin = true, yin = true //判断层的X坐标和Y坐标是否在在控制范围之内,xin为真是层向右移动,否则向左;yin为真是层向下移动,否则向上
var step = 1 //层移动的步长,值越大移动速度越快
var delay = 10 //层移动的时间间隔,单位为毫秒,值越小移动速度越快
var obj=document.getElementByIdx_x("float") //捕获id为ad的层作为漂浮目标
function floatAD() {
var L=T=0 //层移动范围的左边界(L)和上边界(T)坐标
var R= document.body.clientWidth-obj.offsetWidth //层移动的右边界
var B = document.body.clientHeight-obj.offsetHeight //层移动的下边界
obj.style.left = x + document.body.scrollLeft //更新层的X坐标,实现X轴方向上的运动;document.body.scrollLeft为文档区域的滚动条向右拉的距离,以保证在滚动条右拉时层仍在可见范围内
obj.style.top = y + document.body.scrollTop //更新层的Y坐标,实现Y轴方向上的运动;document.body.scrollTop为文档区域的滚动条向下拉的距离,以保证在滚动条下拉时层仍在可见范围内
x = x + step*(xin?1:-1) //通过判断层的范围决定层在X轴上的运动方向
if (x < L) { xin = true; x = L} //层超出左边界时的处理
if (x > R){ xin = false; x = R} //层超出右边界时的处理
y = y + step*(yin?1:-1) //通过判断层的范围决定层在Y轴上的运动方向
if (y < T) { yin = true; y = T } //层超出上边界时的处理
if (y > B) { yin = false; y = B } //层超出下边界时的处理
}
var itl= setInterval("floatAD()", delay) //每delay秒执行一次floatAD函数
obj.onmouseover=function(){clearInterval(itl)} //层在鼠标移上时清除上面的间隔事件,实现层在的鼠标移上时停止运动的效果
obj.onmouseout=function(){itl=setInterval("floatAD()", delay)} //层在鼠标移开时开始间隔事件,实现层在的鼠标移开时继续运动的效果
</script>
本站友情提醒大家注意以下事项:
解决Flash与漂浮广告的层级冲突
在网页中同时插入Flash和浮动广告时,可能会发现浮动广告在触及Flash区域时会被遮挡至下方。如何解决这一问题?方法很简单。
只需在Flash代码位置加入以下语句即可解决:
<param name="wmode" value="opaque">
示例如下:
假设以下是Flash所在的代码位置:
代码如下:
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" width="780" height="165">
<param name="movie" value="banner1.swf">
<param name="quality" value="high">
<param name="menu" value="false">
<param name="wmode" value="opaque"><!--主要是这句-->
<embed src="banner1.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="780" height="165"></embed>
</object>
作者最新文章
D3.js 比例尺与坐标轴的配置详解
2026-11-05 16:54:46
JavaScript怎么遍历对象的Symbol键和不可枚举属性
2026-11-05 13:13:39
封装一个健壮的JS字符串判空工具函数
2026-11-05 12:16:14
JavaScript合并数组的三种常用方法:concat、扩展运算符与push
2026-11-05 11:22:29
JavaScript立即执行函数(IIFE)是什么及基本语法
2026-11-05 10:51:19
