公开一段开放js代码!是关于浮动广告解决方案的

ybcola 2005-04-05 10:02:12
此代js脚本解决了通用浮动广告发布的问题,但是因为用了settimeout,cpu的资源使用太大,特别是在调用多次Lman_floatAdv之后(发布多个浮动广告),我有一个设想就是只需要一个settimeout计时,而把多个浮动广告加到了个链表中,每次timeout之后读出链表上的广告信息看是否需要移动,希望各位指点一二,不吝啬你手中的代码,为小弟指出一个正解高效的解决方案!

//=================================================
// LightMan浮动广告客户端程序
// vision.001.2005.3.20
// 程序设计:LightMan(YBCola)
//==================================================
//使用说明:(1)直接调用LMan_FloatAdv主函数(程序入口)
//调用函数名:LMan_FloatAdv
//调用参 数:id:浮动层id
// ADFile:浮动广告内容
// ADHeight:高度
// ADWidth:宽度
// ADScroll:滚动
// ADOx:浮动广告位置确定原点x坐标,相对窗口百分比,取值范围0--100
// ADOy:浮动广告位置确定原点y坐标,相对窗口百分比,取值范围0--100
// ADLeft:相对原点坐标x坐标
// ADTop:相对原点坐标y坐标
// ADFile2:浮动广告鼠标移上后交换内容
// ADExpCornor:交换内容的扩展角,0随机,1左上,2右上,3左下,4右下
// step:浮动步长,0为可静止
// speed:移动速度,毫移计算,即speed毫秒移动step长
// autoclose:自动关闭时间,以秒计算
// (2)定义图层后,调用LMan_FloatAdvMove函数
// 可通过设置图层的autoclose设置自动关闭时间(单位m)
// 设置Lmove移动步长,如果没设Lmove则不能移动,(必设项)
//调用函数名:LMan_FloatAdvMove
//调用参 数:LayerID:图层ID
// speed:移动速度ms
// ADScroll:是否自动滚动
// direct:起始方向角度(弧度)
//=====================================================
//入口函数开始
//全局访问
function LMan_FloatAdv(id,ADFile,ADHeight,ADWidth,ADScroll,ADOx,ADOy,ADLeft,ADTop,ADFile2,ADExpCornor,step,speed,autoclose,dispclose){
var Htmlstr;
var aname=navigator.appName;
var WindowW=document.body.clientWidth;
var WindowH=document.body.clientHeight;
var Oleft=Math.floor(WindowW*ADOx/100)+ADLeft;
var Otop=Math.floor(WindowH*ADOy/100)+ADTop;
if (aname == "Netscape")
{
Htmlstr="<layer id=\""+id+"\" top=\""+Otop+"\" left=\""+Oleft+"\" width=\""+ADWidth+"\" height=\""+ADHeight+"\" Lmove='"+step+"' ADOx='"+ADOx+"' ADOy='"+ADOy+"' ADLeft='"+ADLeft+"' ADTop='"+ADtop+"' autoclose='"+autoclose+"' autotimer='0' onmouseover=\"this.Lmove=\'0\'\" onmouseout=\"this.Lmove=\'"+step+"\'\">"+ADFile+"</layer>";
}
else
{
Htmlstr="<div id=\""+id+"\" style='position: absolute;width:"+ADWidth+"px;height:"+ADHeight+"px;top:"+Otop+"px;left:"+Oleft+"px;visibility:visible;z-index: 1' Lmove='"+step+"' ADOx='"+ADOx+"' ADOy='"+ADOy+"' ADLeft='"+ADLeft+"' ADTop='"+ADTop+"' autoclose='"+autoclose+"' autotimer='0' onmouseover=\"this.Lmove=\'0\'\" onmouseout=\"this.Lmove=\'"+step+"\'\">"+ADFile+"</div>";
}
document.write(Htmlstr);
LMan_FloatAdvMove(id,speed,ADScroll,0);
}
//====================================
//交换函数开始
function Expcoror(ADName,ADTitle,ADHref,ADFile,ADHeight,ADWidth,ADFile2,ADHeight2,ADWidth2,dispclose){

}
//====================================
//图层移动函数开始
//参数:图层ID,移动速度ms,是否自动滚动,方向角度(弧度)
//全局访问
function LMan_FloatAdvMove(LayerID,speed,ADScroll,direct,stl,stt){
var aname=navigator.appName;
var bodyobj=document.body;
var ll=new Chip(LayerID);
if (aname == "Netscape") var objstr="document."+LayerID; else var objstr="document.all."+LayerID;
var step=parseInt(eval(objstr+".Lmove"));
if (aname == "Netscape"){
lstrns=objstr+".visibility=\"hide\"";
lstrne=objstr+".visibility=\"show\"";
var settime=objstr+".visibility==\"show\"";
}else{
lstrns=objstr+".style.display=\"none\"";
lstrne=objstr+".style.display=\"\"";
var settime=objstr+".style.display==\"\"";
}
if (!ADScroll){
eval(lstrns);
WinH=bodyobj.scrollHeight;
WinW=bodyobj.scrollWidth;
if(bodyobj.clientHeight>WinH) WinH=bodyobj.clientHeight;
if(bodyobj.clientWidth>WinW) WinW=bodyobj.clientWidth;
eval(lstrne);
stl=0;
stt=0;
var stel=WinW,stet=WinH;
}
else{
//滚动条拖动处理
stl=isNaN(stl)?0:stl;
stt=isNaN(stt)?0:stt;
if (stl!=bodyobj.scrollLeft||stt!=bodyobj.scrollTop){
LMan_FLoatOSBEvent(LayerID,speed,ADScroll,direct,ll.l-stl,ll.t-stt);
return 0;
}
WinH=bodyobj.clientHeight;
WinW=bodyobj.clientWidth;
stl=bodyobj.scrollLeft;
stt=bodyobj.scrollTop;
var stel=stl+WinW,stet=stt+WinH;
}
if (ll.l<=stl||ll.t<=stt||ll.l+ll.w>=stel||ll.t+ll.h>=stet){
direct=makecornor(LayerID,stl,stt,stel,stet);
}
AddY=-Math.floor(Math.sin(direct)*step)+ll.t;
AddX=Math.floor(Math.cos(direct)*step)+ll.l;
//错误设计代码
//if (AddY<stt) AddY=stt;
//if (AddX<stl) AddX=stl;
//if (AddY>stet-ll.h) AddY=stet-ll.h;
//if (AddX>stel-ll.w) AddX=stel-ll.w;
LMan_setLocation(objstr,AddX,AddY);
if (ll.ctime>0){
LMan_settimer(objstr+".autotimer",speed);
if (ll.timer>ll.ctime*1000) eval(lstrns);
}
if(eval(settime))
setTimeout("LMan_FloatAdvMove('"+LayerID+"',"+speed+","+ADScroll+","+direct+","+stl+","+stt+")",speed);
}
//=====================================
//设置时间计数器,时间计数器为图层autotimer属性
//LMan_FloatAdvMove私有访问
function LMan_settimer(objstr,time){
var num=eval(objstr);
num=(isNaN(num)?0:num)+time;
eval(objstr+"="+num);
}
//=====================================
//滚动条滚动处理事件代码
//LMan_FloatAdvMove私有访问
function LMan_FLoatOSBEvent(LayerID,speed,ADScroll,direct,lwl,lwt){
var aname=navigator.appName;
var bodyobj=document.body;
if (aname == "Netscape") var objstr="document."+LayerID; else var objstr="document.all."+LayerID;
var MyLayer=new Chip(LayerID);
var scrl=bodyobj.scrollLeft;
var scrt=bodyobj.scrollTop;
if (MyLayer.step==0){
var WindowW=document.body.clientWidth;
var WindowH=document.body.clientHeight;
lwl=Math.floor(WindowW*MyLayer.ox/100)+MyLayer.x;
lwt=Math.floor(WindowH*MyLayer.oy/100)+MyLayer.y;
}
var lenx=scrl+lwl-MyLayer.l,leny=scrt+lwt-MyLayer.t;
var movx=((lenx)>0?1:-1)*Math.floor(Math.sqrt(Math.abs(lenx*.6)));
var movy=((leny)>0?1:-1)*Math.floor(Math.sqrt(Math.abs(leny*.6)));
if(Math.abs(movx)<1)(movx=lenx>0?1:lenx)<0?-1:lenx;
if(Math.abs(movy)<1)(movy=leny>0?1:leny)<0?-1:leny;
LMan_setLocation(objstr,MyLayer.l+movx,MyLayer.t+movy);
if(MyLayer.l!=scrl+lwl||MyLayer.t!=scrt+lwt){
setTimeout("LMan_FLoatOSBEvent('"+LayerID+"',"+speed+","+ADScroll+","+direct+","+lwl+","+lwt+")",speed)
if (MyLayer.ctime>0) LMan_settimer(objstr+".autotimer",speed);
}
else{
LMan_FloatAdvMove(LayerID,speed,ADScroll,direct,scrl,scrt);
}
}
//================================================
//移动方向角度产生子程序,产生一个弧度值
//参数:图层id,x原点,y原点,x高,y高
//全局访问
function makecornor(LayerID,stl,stt,stel,stet){
var direct;
var ll=new Chip(LayerID);
var pi=3.1415926;
if(ll.l+ll.w>=stel&&ll.t>stt&&ll.t+ll.h<stet)
direct=pi/2+pi*Math.random();
else if(ll.l<=stl&&ll.t>stt&&ll.t+ll.h<stet)
if (Math.random()>.5) direct=pi*3/2+pi/2*Math.random(); else direct=pi/2*Math.random();
else if(ll.t<=stt&&ll.l>stl&&ll.l+ll.w<stel)
direct=pi+pi*Math.random();
else if(ll.t+ll.h>=stet&&ll.l>stl&&ll.l+ll.w<stel)
direct=pi*Math.random();
else if(ll.t<=stt&&ll.l<=stl)
direct=pi*3/2+pi/2*Math.random();
else if(ll.t<=stt&&ll.l+ll.w>=stel)
direct=pi+pi/2*Math.random();
else if(ll.t+ll.h>=stet&&ll.l<=stl)
direct=pi/2*Math.random();
else if(ll.t+ll.h>=stet&&ll.l+ll.w>=stel){
direct=pi/2+pi/2*Math.random();}
else
direct=2*pi*Math.random();
return direct;
}
...全文
250 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
lawyu 2005-04-05
  • 打赏
  • 举报
回复
支持一下
shufa 2005-04-05
  • 打赏
  • 举报
回复
good
spirit729 2005-04-05
  • 打赏
  • 举报
回复
支持一下
TSD 2005-04-05
  • 打赏
  • 举报
回复
MARK
mayi545 2005-04-05
  • 打赏
  • 举报
回复
看看
echina 2005-04-05
  • 打赏
  • 举报
回复
支持一下
ybcola 2005-04-05
  • 打赏
  • 举报
回复
//===================================================
//获取图层属性
//全局访问
function Chip(chipname){
var aname=navigator.appName;
this.named=chipname;
if (aname == "Netscape"){
this.w=parseInt(eval("document."+chipname+".width"));
this.h=parseInt(eval("document."+chipname+".height"));
this.t=parseInt(eval("document."+chipname+".top"));
this.l=parseInt(eval("document."+chipname+".left"));
this.ox=parseInt(eval("document."+chipname+".ADOx"));
this.oy=parseInt(eval("document."+chipname+".ADOy"));
this.x=parseInt(eval("document."+chipname+".ADLeft"));
this.y=parseInt(eval("document."+chipname+".ADTop"));
this.step=parseInt(eval("document."+chipname+".Lmove"));
this.ctime=parseInt(eval("document."+chipname+".autoclose"));
this.timer=parseInt(eval("document."+chipname+".autotimer"));
}
else{
this.w=parseInt(eval("document.all."+chipname+".style.width"));
this.h=parseInt(eval("document.all."+chipname+".style.height"));
this.t=parseInt(eval("document.all."+chipname+".style.top"));
this.l=parseInt(eval("document.all."+chipname+".style.left"));
this.ox=parseInt(eval("document.all."+chipname+".ADOx"));
this.oy=parseInt(eval("document.all."+chipname+".ADOy"));
this.x=parseInt(eval("document.all."+chipname+".ADLeft"));
this.y=parseInt(eval("document.all."+chipname+".ADTop"));
this.step=parseInt(eval("document.all."+chipname+".Lmove"));
this.ctime=parseInt(eval("document.all."+chipname+".autoclose"));
this.timer=parseInt(eval("document.all."+chipname+".autotimer"));
}
this.t=isNaN(this.t)?0:this.t;
this.l=isNaN(this.l)?0:this.l;
this.h=isNaN(this.h)?0:this.h;
this.w=isNaN(this.w)?0:this.w;
this.ox=isNaN(this.ox)?0:this.ox;
this.oy=isNaN(this.oy)?0:this.oy;
this.x=isNaN(this.x)?0:this.x;
this.y=isNaN(this.y)?0:this.y;
this.step=isNaN(this.step)?0:this.step;
this.ctime=isNaN(this.ctime)?0:this.ctime;
this.timer=isNaN(this.timer)?0:this.timer;
}
//==============================================
//设置图层位置
//全局访问
function LMan_setLocation(objstr,AddX,AddY){
var aname=navigator.appName;
if (aname == "Netscape"){
eval(objstr+".top ="+AddY);
eval(objstr+".left="+AddX);
}
else{
eval(objstr+".style.pixelLeft="+AddX);
eval(objstr+".style.pixelTop ="+AddY);
}
}
jzywh 2005-04-05
  • 打赏
  • 举报
回复
hao
wtgewtg 2005-04-05
  • 打赏
  • 举报
回复
太好了 我一会也要共享一个
ybcola 2005-04-05
  • 打赏
  • 举报
回复
大家研究了都你们的代码贴出来共享一下,谢了!
Bulemaple 2005-04-05
  • 打赏
  • 举报
回复
研究下先!
comstep 2005-04-05
  • 打赏
  • 举报
回复
不错,有注释。研究~
heyong5527 2005-04-05
  • 打赏
  • 举报
回复
支持,拷下来,有时间研究下
lookatliu 2005-04-05
  • 打赏
  • 举报
回复
支持,拷下来,有时间研究下

87,915

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧