2

这是当前可用的 javascript 图像旋转器。相信它最初是用 Dreamweaver 创建的。继承项目。

试图弄清楚如何将链接添加到以下函数。只使用了 3 张图片,每张图片都需要一个单独的链接。提前致谢!

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2]; x.onclick=function(){window.location.href=a[i+3]}; }
}
// Comma separated list of images to rotate 
var imgs = new Array('images/swap1.jpg','images/swap2.jpg','images/swap3.jpg');
imgLinks = new Array('http://example.com','http://scifit.com/proseries/proseries.shtml','http://example.com');
// delay in milliseconds between image swaps 1000 = 1 second 
var delay = 8000;
var counter = 0;

function preloadImgs(){
  for(var i=0;i<imgs.length;i++){
    MM_preloadImages(imgs[i]);
  }
}

function randomImages(){
  if(counter == (imgs.length)){
    counter = 0;
  }
  MM_swapImage('rotator', '', imgs[counter++]);
  setTimeout('randomImages()', delay);
}
4

1 回答 1

3

更新答案:请改用此代码。我已经重写了我的原始答案,因为它存在一些问题。将整个 Dreamweaver 插入的代码替换为:

function MM_preloadImages() { //v3.0
    var d=document;
    if(d.images){
        if(!d.MM_p) d.MM_p=new Array();
        var i,j=d.MM_p.length,a=MM_preloadImages.arguments;
        for(i=0; i<a.length; i++)
            if (a[i].indexOf("#")!=0){
                d.MM_p[j]=new Image;
                d.MM_p[j++].src=a[i];
            }
    }
}

function MM_swapImgRestore() { //v3.0
    var i,x,a=document.MM_sr;
    for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v4.01
    var p,i,x;
    if(!d) d=document;
    if((p=n.indexOf("?"))>0&&parent.frames.length) {
        d=parent.frames[n.substring(p+1)].document;
        n=n.substring(0,p);
    }
    if(!(x=d[n])&&d.all) x=d.all[n];
    for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
    for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
    if(!x && d.getElementById) x=d.getElementById(n);
    return x;
}

function MM_swapImage() { //v3.0
    var i,j=0,x,a=MM_swapImage.arguments;
    document.MM_sr=new Array;
    for(i=0;i<(a.length-2);i+=3) {
        console.log(a);
        if ((x=MM_findObj(a[i]))!=null){
            document.MM_sr[j++]=x;
            if(!x.oSrc) x.oSrc=x.src;
            x.src=a[i+2];
            x.onclick=function(){
                window.location.href=a[i];
            };            
        }
    }
}
// Comma separated list of images to rotate 
var imgs = new Array('images/swap1.jpg','images/swap2.jpg','images/swap3.jpg');
imgLinks = new Array('http://scifit.com/proseries/proseries.shtml','http://scifit.com/proseries/proseries.shtml','http://scifit.com/proseries/proseries.shtml');
// delay in milliseconds between image swaps 1000 = 1 second 
var delay = 8000;
var counter = 0;

function preloadImgs(){
    for(var i=0;i<imgs.length;i++){
        MM_preloadImages(imgs[i]);
    }
}

function randomImages(){
    if(counter == (imgs.length)){
        counter = -1;
    }
    counter++;
    MM_swapImage('rotator', '', imgs[counter], imgLinks[counter]);
    setTimeout('randomImages()', delay);
}

然后,在您的 BODY 标签中,您可能会看到如下内容:

<body onload="preloadImgs() ...

将其更改为:

<body onload="preloadImgs();randomImages();">

这将强制第一次调用randomImages,这会导致初始图像受在 中完成的工作的约束MM_swapImage。您获取undefinedURL 的原因是因为在我的这行代码中:

x.onclick=function(){ ...

a[i+3]当我应该呼吁的时候,我正在呼吁a[i]


从语义的角度来看,这绝不是一个很好的答案,但它确实有效。

于 2013-07-22T20:18:18.807 回答