求助:封装了一个漂浮对联广告JAVASCRIPT类,设置onclick事件不生效,请问JAVASCRIPT类是怎样处理onclick事件的
各位专家:
由于工作需要,最主要的是为方便代码的管理,最近参考了一些专家的贴子,做了一个漂浮对联广告的JAVASCRIPT类.功能是基本实现了,但在增加一个关闭按钮时,onclick事件不生效,在网上找了好多资料,都找不到合适的。因为网上的对联广告很少是封装成JAVASCRIPT类的。郁闷之下,来这里求救,请各位施主,有心出智慧,有心而无力帮忙顶下该贴。谢谢!!另外附上我写的JAVASCRIPT类,需要的可以参考。代码如下:
<Script Language=Javascript>
<!--
//漂浮对联广告JS封装类(Author:colinmok Time:2008-04-24日)
function SmileAdver_Class(){
var leftImageArray = new Array(); //保存左边的广告图片数组
var rightImageArray = new Array(); //保存右边的广告图片数组
var leftPos,rightPos; //leftPos = 左边广告的距左边栏位置(px) rightPos = 右边广告的距右边栏位置(px)
var leftTop,rightTop; //leftTop = 左边广告的距顶边栏位置(px) rightTop = 右边广告的距顶边栏位置(px)
var lastScrollY=0;
leftPos = rightPos = 1; //默认为10
leftTop = rightTop = 1; //默认为150
this.setLeftPos = function(value){
if(isNaN(value)){value = 10;} //非数字则默认为10
leftPos = value;
}
this.setRightPos = function(value){
if(isNaN(value)){value = 10;} //非数字则默认为10
rightPos = value;
}
this.setLeftTop = function(value){
if(isNaN(value)){value = 1} //非数字则默认为150
leftTop = value;
}
this.setRightTop = function(value){
if(isNaN(value)){value = 1;} //非数字则默认为150
rightTop = value;
}
//添加左边的图片广告 addLeftImage(链接,图片地址,链接目标,图片提示,图片宽度,图片高度)
this.addLeftImage = function(href,image,target,title,width,height){
var imageArray = getImageArray(href,image,target,title,width,height);
if(imageArray != null){
leftImageArray[leftImageArray.length] = imageArray;
}
}
//添加右边的图片广告 addRightImage(链接,图片地址,链接目标,图片提示,图片宽度,图片高度)
this.addRightImage = function(href,image,target,title,width,height){
var imageArray = getImageArray(href,image,target,title,width,height);
if(imageArray != null){
rightImageArray[rightImageArray.length] = imageArray;
}
}
//内部添加广告图片使用,如果没有图片地址,则返回一个null值,否则返回一个数组
function getImageArray(href,image,target,title,width,height){
if(image == undefined){return null;} //没有图片地址,不添加
if(target == undefined || target == ""){target = "_blank"}; //默认为_blank打开方式
target = " target=\"" + target + "\"";
if(title == undefined){ //广告图片title提示
title = "" ;
}else{
title = " title=\"" + title + "\"";
}
//链接以www.开头则自动加上http:// (否则链接时会链接错误)
if(href.toLowerCase().substring(0,4) == "www."){
href = "http://" + href;
}
if(image.toLowerCase().substring(0,4) == "www."){
image = "http://" + image;
}
return new Array(href,image,target,title,width,height);
}
//内部显示图片横幅所用 showImageDiv(div的名称,div的摆放方向(left,right),div的摆放位置,div层距顶部的位置,显示的图片数组变量)
function showImageDiv(div,pos,posPX,topPx,imageArray){
var i;
var extendname;
document.write("<div id=\"" + div + "\" style=\"" + pos + ":" + posPX + "px;POSITION:absolute;TOP:" + topPx + "px;\">");
for(i=0; i< imageArray.length; i++){
//20080424日colinmok修改
extendname=getExtendName(imageArray[i][1]);
if(extendname=='swf'||extendname=='SWF'){
document.write(
'<button style="width:'+imageArray[i][4]+'px;height:'+imageArray[i][5]+
'px;background:transparent;border:0px;padding:0px;cursor:hand;margin:0px;" onfocus="this.blur();" onclick="window.open(\''+imageArray[i][0]+'\');">' +
'<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+
'codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0"'+
'width="'+ imageArray[i][4] +'"'+
'height="'+ imageArray[i][5] +'">'+
'<param name="movie" value="'+ imageArray[i][1] +'">'+
'<param name="quality" value="high">'+
'<param name="wmode" value="opaque" />'+
'<embed src="'+ imageArray[i][1] +'" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="'+ imageArray[i][4] +'" height="'+ imageArray[i][5] +'">'+
'</embed>'+
'</object>'+
'</button>');
}else{
document.write("<a href=\"" + imageArray[i][0] + "\" "+ imageArray[i][2]+ imageArray[i][3] + "><img src=\""+ imageArray[i][1] + "\" border=\"0\" "+ imageArray[i][3] + "></a>");
}
document.write("<br/><a href='#' onClick='hide();' alt='关闭对联广告'>关闭</a>");
if(i != imageArray.length-1){
document.write("<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tr><td height=10></td></tr></table>");
}
}
document.write("</div>");
}
//滚动广告对联图片
this.scroll = function(){
showImageDiv("smilediv1","left",leftPos,leftTop,leftImageArray);
showImageDiv("smilediv2","right",rightPos,rightTop,rightImageArray);
window.setInterval(scrollImage,1);//滚动
}
this.scrollImg= function(){
scrollImage();
}
//内部使用用来滚动广告图片
function scrollImage(){
var diffY,percent;
diffY=document.body.scrollTop;
percent=.1*(diffY-lastScrollY);
if(percent>0)percent=Math.ceil(percent);
else percent=Math.floor(percent);
document.all.smilediv1.style.pixelTop+=percent;
document.all.smilediv2.style.pixelTop+=percent;
lastScrollY=lastScrollY+percent;
}
//采用正则表达式,来去除两边的空格,只需以下代码(colinmok增加20080424)
String.prototype.trim = function(){
return this.replace(/(^\s*)|(\s*$)/g,"");
}
//外部使用:赋值时,截取广告的图片或动画的扩展名(colinmok增加20080424)
this.setExtendName=function(value){
var strUrl;
strUrl=value.trim();
var pointNum=strUrl.lastIndexOf(".");
var tempstr=strUrl.substr(pointNum+1,strUrl.length);
extendName=tempstr;
}
//内部使用:截取广告的图片或动画的扩展名(colinmok增加20080424)
function getExtendName(value){
var strUrl;
strUrl=value.trim();
var pointNum=strUrl.lastIndexOf(".");
var tempstr=strUrl.substr(pointNum+1,strUrl.length);
return tempstr;
}
//关闭对联广告(colinmok增加20080424)
//function hide()
//SmileAdver_Class.prototype.hide=function()
//this.hide=function()
SmileAdver_Class.prototype.hide=function()//注意:此处关闭对联广告用,但没生效,不道是啥原因,请大家帮忙解决下。---2008-04-25 colinmok求救
{
alert('隐藏函');
document.getElementById('smilediv1').style.visibility='hidden';
document.getElementById('smilediv2').style.visibility="hidden";
}
}
///////////////////////////////////////////类结束////////////////////////////////////////////////////////////////
/////////类的使用示例代码(测试用)////////////////////////////////////////////////
var SmileAdver = new SmileAdver_Class();
SmileAdver.setLeftPos(5);
SmileAdver.setRightPos(5);
SmileAdver.setLeftTop(400);
SmileAdver.setRightTop(400);
SmileAdver.addLeftImage("http://www.baidu.com","flash.swf","","测试","100","200");
SmileAdver.addRightImage("http://www.baidu.com","logo.gif","","测试","100","200");
SmileAdver.scroll();
-->
</Script>
说明:该文件为测试文件,保存为htm即可测试,上面的各参数说明:广告链接,广告源地址,在那个窗口打开(为空即在新窗口打开),图片广告时为alt标题(动画时用不上),图片宽度,图片高度。分数不多,就20分,请高手不要嫌弃。谢谢!
[解决办法]
看看:
<Script Language=Javascript>
<!--
//漂浮对联广告JS封装类(Author:colinmok Time:2008-04-24日)
function SmileAdver_Class(){
var leftImageArray = new Array(); //保存左边的广告图片数组
var rightImageArray = new Array(); //保存右边的广告图片数组
var leftPos,rightPos; //leftPos = 左边广告的距左边栏位置(px) rightPos = 右边广告的距右边栏位置(px)
var leftTop,rightTop; //leftTop = 左边广告的距顶边栏位置(px) rightTop = 右边广告的距顶边栏位置(px)
var lastScrollY=0;
leftPos = rightPos = 1; //默认为10
leftTop = rightTop = 1; //默认为150
this.setLeftPos = function(value){
if(isNaN(value)){value = 10;} //非数字则默认为10
leftPos = value;
}
this.setRightPos = function(value){
if(isNaN(value)){value = 10;} //非数字则默认为10
rightPos = value;
}
this.setLeftTop = function(value){
if(isNaN(value)){value = 1} //非数字则默认为150
leftTop = value;
}
this.setRightTop = function(value){
if(isNaN(value)){value = 1;} //非数字则默认为150
rightTop = value;
}
//添加左边的图片广告 addLeftImage(链接,图片地址,链接目标,图片提示,图片宽度,图片高度)
this.addLeftImage = function(href,image,target,title,width,height){
var imageArray = getImageArray(href,image,target,title,width,height);
if(imageArray != null){
leftImageArray[leftImageArray.length] = imageArray;
}
}
//添加右边的图片广告 addRightImage(链接,图片地址,链接目标,图片提示,图片宽度,图片高度)
this.addRightImage = function(href,image,target,title,width,height){
var imageArray = getImageArray(href,image,target,title,width,height);
if(imageArray != null){
rightImageArray[rightImageArray.length] = imageArray;
}
}
//内部添加广告图片使用,如果没有图片地址,则返回一个null值,否则返回一个数组
function getImageArray(href,image,target,title,width,height){
if(image == undefined){return null;} //没有图片地址,不添加
if(target == undefined || target == ""){target = "_blank"}; //默认为_blank打开方式
target = " target=\"" + target + "\"";
if(title == undefined){ //广告图片title提示
title = "" ;
}else{
title = " title=\"" + title + "\"";
}
//链接以www.开头则自动加上http:// (否则链接时会链接错误)
if(href.toLowerCase().substring(0,4) == "www."){
href = "http://" + href;
}
if(image.toLowerCase().substring(0,4) == "www."){
image = "http://" + image;
}
return new Array(href,image,target,title,width,height);
}
//内部显示图片横幅所用 showImageDiv(div的名称,div的摆放方向(left,right),div的摆放位置,div层距顶部的位置,显示的图片数组变量)
function showImageDiv(div,pos,posPX,topPx,imageArray){
var i;
var extendname;
document.write(" <div id=\"" + div + "\" style=\"" + pos + ":" + posPX + "px;POSITION:absolute;TOP:" + topPx + "px;\">");
for(i=0; i < imageArray.length; i++){
//20080424日colinmok修改
extendname=getExtendName(imageArray[i][1]);
if(extendname=='swf'||extendname=='SWF'){
document.write(
' <button style="width:'+imageArray[i][4]+'px;height:'+imageArray[i][5]+
'px;background:transparent;border:0px;padding:0px;cursor:hand;margin:0px;" onfocus="this.blur();" onclick="window.open
(\''+imageArray[i][0]+'\');">' +
' <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+
'codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0"'+
'width="'+ imageArray[i][4] +'"'+
'height="'+ imageArray[i][5] +'">'+
' <param name="movie" value="'+ imageArray[i][1] +'">'+
' <param name="quality" value="high">'+
' <param name="wmode" value="opaque" />'+
' <embed src="'+ imageArray[i][1] +'" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-
shockwave-flash" width="'+ imageArray[i][4] +'" height="'+ imageArray[i][5] +'">'+
' </embed>'+
' </object>'+
' </button>');
}else{
document.write(" <a href=\"" + imageArray[i][0] + "\" "+ imageArray[i][2]+ imageArray[i][3] + "> <img src=\""+ imageArray[i][1] + "\"
border=\"0\" "+ imageArray[i][3] + "> </a>");
}
document.write(" <br/> <a href='#' onClick='hide();' alt='关闭对联广告'>关闭 </a>");
if(i != imageArray.length-1){
document.write(" <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\"> <tr> <td height=10> </td> </tr> </table>");
}
}
document.write(" </div>");
}
//滚动广告对联图片
this.scroll = function(){
showImageDiv("smilediv1","left",leftPos,leftTop,leftImageArray);
showImageDiv("smilediv2","right",rightPos,rightTop,rightImageArray);
window.setInterval(scrollImage,1);//滚动
}
this.scrollImg= function(){
scrollImage();
}
//内部使用用来滚动广告图片
function scrollImage(){
var diffY,percent;
diffY=document.body.scrollTop;
percent=.1*(diffY-lastScrollY);
if(percent>0)percent=Math.ceil(percent);
else percent=Math.floor(percent);
document.all.smilediv1.style.pixelTop+=percent;
document.all.smilediv2.style.pixelTop+=percent;
lastScrollY=lastScrollY+percent;
}
//采用正则表达式,来去除两边的空格,只需以下代码(colinmok增加20080424)
String.prototype.trim = function(){
return this.replace(/(^\s*) ¦(\s*$)/g,"");
}
//外部使用:赋值时,截取广告的图片或动画的扩展名(colinmok增加20080424)
this.setExtendName=function(value){
var strUrl;
strUrl=value.trim();
var pointNum=strUrl.lastIndexOf(".");
var tempstr=strUrl.substr(pointNum+1,strUrl.length);
extendName=tempstr;
}
//内部使用:截取广告的图片或动画的扩展名(colinmok增加20080424)
function getExtendName(value){
var strUrl;
strUrl=value.trim();
var pointNum=strUrl.lastIndexOf(".");
var tempstr=strUrl.substr(pointNum+1,strUrl.length);
return tempstr;
}
//关闭对联广告(colinmok增加20080424)
//function hide()
//SmileAdver_Class.prototype.hide=function()
//this.hide=function()
SmileAdver_Class.prototype.hide=function()//注意:此处关闭对联广告用,但没生效,不道是啥原因,请大家帮忙解决下。---2008-04-25 colinmok
求救
{
alert('隐藏函');
document.getElementById('smilediv1').style.visibility='hidden';
document.getElementById('smilediv2').style.visibility="hidden";
}
}
///////////////////////////////////////////类结束////////////////////////////////////////////////////////////////
/////////类的使用示例代码(测试用)////////////////////////////////////////////////
var SmileAdver = new SmileAdver_Class();
SmileAdver.setLeftPos(5);
SmileAdver.setRightPos(5);
SmileAdver.setLeftTop(400);
SmileAdver.setRightTop(400);
SmileAdver.addLeftImage("http://www.baidu.com","flash.swf","","测试","100","200");
SmileAdver.addRightImage("http://www.baidu.com","logo.gif","","测试","100","200");
SmileAdver.scroll();
-->
</Script>