简体   繁体   English

一个不起作用的简单javaScript代码@ _ @

[英]A simple javaScript code that dosen't work @_@

OK, here is the thing, I wrote a simple code for a slide show, it works and it's as I expected and that's it: 好的,这就是问题,我为幻灯片编写了一个简单的代码,它的工作原理和我预期的一样,就是这样:

var slideShowImage = document.getElementById("slideShowImage");
var images = ["_Images/Image_01.jpg","_Images/Image_02.jpg","_Images/Image_03.jpg","_Images/Image_04.jpg","_Images/Image_05.jpg","_Images/Image_06.jpg","_Images/Image_07.jpg"];
var imageIndex = 0;

function changeImage (){
    slideShowImage.setAttribute ("src",images[imageIndex]);
    imageIndex++;
    if (imageIndex >= images.length){
            imageIndex = 0;
        }   
    }

setInterval (changeImage,3000);

But as I'm still learning javaScript I thought to change the logic to taste myself, and I rewrote the code, but it doesn't work, I have no idea why... Hopefully someone can enlighten me with why it doesn't... 但是,当我还在学习javaScript时,我想改变逻辑来尝试自己,我重写了代码,但它不起作用,我不知道为什么...希望有人可以启发我为什么它没有...

var imageId = document.getElementById("slideShowImage");
var imageNumber = 1;
var imageName = "_Images/Image_0"+imageNumber+".jpg";

function changeImage (){
    imageId.setAttribute("Src",imageName);
    imageNumber++;
    if (imageNumber==7){
        imageNumber=1;
        }
    }
setInterval(changeImage,1000);

in second approach the var imageName is assigned to a static value ie "_Images/Image_0"+imageNumber+".jpg", as per the first answer you need to recalculate the value of this variable. 在第二种方法中,将var imageName分配给静态值,即“_Images / Image_0”+ imageNumber +“。jpg”,根据您需要重新计算此变量值的第一个答案。

instead you can write imageName as function which returns the calculated value 相反,您可以将imageName写为返回计算值的函数

var imageName = function(){ return "_Images/Image_0"+imageNumber+".jpg"; }

and call inside changeImage 并在changeImage内部调用

function changeImage (){
    imageId.setAttribute("Src",imageName());
    imageNumber++;
    if (imageNumber==7){
        imageNumber=1;
        }
    }
var imageName = "_Images/Image_0"+imageNumber+".jpg";

You need to update imageName each time the number changes. 每次数字更改时,您都需要更新imageName Otherwise this string is fixed to Image_01.jpg. 否则此字符串将固定为Image_01.jpg。

Your imageName variable is never being updated. 您的imageName变量永远不会更新。 You have to update it on each chageImage call. 您必须在每次chageImage调用时更新它。

var imageId = document.getElementById("slideShowImage");
var imageNumber = 1;
var imageName = "_Images/Image_0"+imageNumber+".jpg";

function changeImage (){
    imageNumber++;
    imageName = "_Images/Image_0"+imageNumber+".jpg";
    imageId.setAttribute("Src",imageName);
    if (imageNumber==7){
        imageNumber=1;
    }
}
setInterval(changeImage,1000);

The error you've made is that the image name in your version is not evaluated once per iteration. 您所犯的错误是每次迭代都不会评估版本中的图像名称。

var imageId = document.getElementById("slideShowImage");
var imageNumber = 1;
setInterval(function() {
  imageId.setAttribute("src","_Images/Image_0"+imageNumber+"jpg");
  imageNumber++;
  if (imageNumber == 7) imageNumber = 1;
},1000);

This will result in your code actually working. 这将导致您的代码实际工作。 I took the image path and brought it in the function so it gets evaluated on each iteration, which was the main bug. 我采用了图像路径并将其带入函数中,以便在每次迭代时对其进行评估,这是主要的错误。

Bear in mind, your images will not load instantly; 请记住,您的图像不会立即加载; Setting them to 1s per transition is unwise. 将它们设置为每次转换1次是不明智的。 In practice, you want to preload all of them in the background somewhere invisible, which guarantees instant recall. 在实践中,你想要在背景中预先加载所有这些隐形的东西,这样可以保证即时回忆。

you can replase your code imageId.setAttribute("Src",imageName); 你可以替换你的代码imageId.setAttribute(“Src”,imageName); with the follwoing imageId.src = imageName; 与follwoing imageId.src = imageName;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM