1

我有一个元素在 HTML 页面上显示图像。此元素的源是 JavaScript 数组中的许多不同图像之一。我已经有一个用于循环播放图像、创建幻灯片效果的脚本,但现在我想用按钮手动浏览图像。

到目前为止,这是我的代码,但是单击按钮时我没有得到任何响应。

function nextup() 
{
    imgs = []; 
    imgs[0] = "/snakelane/assets/images/thumb/_1.jpg";  imgs[10] = "/snakelane/assets/images/thumb/_19.jpg"; 
    imgs[1] = "/snakelane/assets/images/thumb/_2.jpg";  imgs[11] = "/snakelane/assets/images/thumb/_20.jpg"; 
    imgs[2] = "/snakelane/assets/images/thumb/_3.jpg";  imgs[12] = "/snakelane/assets/images/thumb/_21.jpg";
    imgs[3] = "/snakelane/assets/images/thumb/_4.jpg";  imgs[13] = "/snakelane/assets/images/thumb/_22.jpg";
    imgs[4] = "/snakelane/assets/images/thumb/_5.jpg";  imgs[14] = "/snakelane/assets/images/thumb/_23.jpg";    
    imgs[5] = "/snakelane/assets/images/thumb/_6.jpg";  imgs[15] = "/snakelane/assets/images/thumb/_24.jpg";
    imgs[6] = "/snakelane/assets/images/thumb/_7.jpg";  imgs[16] = "/snakelane/assets/images/thumb/_25.jpg";
    imgs[7] = "/snakelane/assets/images/thumb/_8.jpg";  imgs[17] = "/snakelane/assets/images/thumb/_26.jpg"; 
    imgs[8] = "/snakelane/assets/images/thumb/_9.jpg";  imgs[18] = "/snakelane/assets/images/thumb/_27.jpg";
    imgs[9] = "/snakelane/assets/images/thumb/_32.jpg"; imgs[19] = "/snakelane/assets/images/thumb/_28.jpg"; 

    var pic = document.getElementById("picbox");

    for(i =0; i < imgs.length; i++) {

        var current = indexOf(pic.src);
        var next = Math.round(current + 1);
        pic.src = imgs[next];
    }
}

谁能告诉我我的代码有什么问题或提出更好的方法?

4

1 回答 1

2

您使用的方法存在多个问题。看看下面修改后的功能。如果您需要任何解释,请告诉我。

以下代码将使用包含图像 URL 的数组,img然后在点击时按顺序分配给标签。享受!

在这里您可以尝试查看输出。

function nextup(){

 //Initialized img array with 10 images, you can do it any way you want to.

 var imgs = []; 
 for(i=0;i<10;i++){
      imgs[i] = "http://lorempixel.com/output/cats-q-c-100-100-"+(i+1)+".jpg";
 }    

 //Fetch the pic DOM element by ID

var pic = document.getElementById("picbox");

//Know what is position of currently assigned image in array.

 var current = imgs.indexOf(pic.src);
 var next = 0; 
 //Handle case if no image is present, the initial case.
 if(current!=-1){
  next = (current + 1)%(imgs.length);
 }

 //Assign the next src
 pic.src = imgs[next];

}
//Scoped outside to call the function first time on load.

nextup();

我在您的代码中发现了以下问题:

  1. 您尝试在indexOf未指定必须在其中执行搜索的数组的情况下使用。想象一下,学校的校长要求某人去找约翰是否在教室里,但没有指定具体的教室。
  2. 对于遍历数组,您使用了一个next变量,如果您需要无限循环,这可能是一个好主意。但是在这里,由于我们限制为 10 或 20 张图像,我们需要确保如果当前选择的图像是最后一张,我们会发现它next变为 21(假设总共 20 张图像。)这将尝试访问一个变量出界。

因此我使用了modoperator %。对于 JavaScript 中的引用,5%10将 return 515%10将 return5等等。在此处阅读有关mod运营商的更多信息。

于 2013-08-24T14:14:39.423 回答