setTimeout для анимации изображений таблиц

#javascript #settimeout

#javascript #settimeout

Вопрос:

У меня есть некоторый код, который изменяет изображения в таблице. Работает нормально, пока я не попытаюсь установить таймер, чтобы замедлить его и сделать так, чтобы казалось, что они как бы разворачиваются, а не просто «защелкиваются» на месте. Любая помощь с благодарностью. Код ниже:

 function showImage(){
    for(i=0; i<SIZE; i  ) {
        var showImage = document.getElementById(i);
        showImage.src = i '.png';
    }
    setTimeout(showImage(),700);
}
  

Комментарии:

1. и в чем проблема с вашим текущим кодом?

2. в любом случае .. ваша функция ShowImage никогда не завершится, как только вы ее введете, поскольку вы вызываете ее снова и снова изнутри

3. Как сказал @DTH, вам нужно передать определение (имя) функции в setTimeout, а не выполнять его. Итак, напишите setTimeout(showImage,700);

Ответ №1:

Редактировать: поместите код внутри немедленно вызываемого выражения функции:

 function showImage(){
    for(i=0; i<SIZE; i  ){
        (function(i){
            setTimeout(function(){
                var img= document.getElementById('image'   i);
                img.src = i   '.png';
            }, i * 100);
        })(i);
    }
}
  

Комментарии:

1. Спасибо, но спецификация назначения запрашивает использование setTimeout для развертывания изображений. У меня он работает нормально в другой функции для таймера обратного отсчета, но не доволен этим (без сомнения, по уважительной причине).

2. Я изменил ответ. Надеюсь, это поможет.

Ответ №2:

Ваша функция будет вызываться снова и снова, поскольку вы разместили вызов функции для самой себя внутри функции. Попробуйте это (не проверено)

 function showImages()
{
    for(i=0; i<SIZE; i  ) {
        setTimeout(function() {
         showImage(i);
        }, 700)      
    }        
}

function showImage(i)
{
  var showImage = document.getElementById(i);
  showImage.src = i '.png';    
}
  

Если это не сработает, попробуйте настроить свой код, вставив вывод в консоль браузера следующим образом внутри вашего цикла и в вашей функции ShowImage (i):

 console.log("insert what you want to output here");
  

В Chrome (и других браузерах) нажмите клавишу F12, чтобы вызвать отладчик, и убедитесь, что у вас выбрана вкладка консоль. Теперь вы должны иметь возможность отлаживать свои скрипты с помощью ведения журнала.

Комментарии:

1. Спасибо, но я все еще не могу заставить ни одно из них работать. Я также вызываю функцию с помощью кнопки onClick.

2. @shep попробуйте вывести свою переменную ShowImage, чтобы убедиться, что результат в порядке. Также используйте свой код здесь и там, чтобы быть уверенным, что вы попадаете в свою функцию и т.д.

3. @shep: попробуйте это с моим обновленным кодом… Я допустил глупую ошибку 🙂

4. Спасибо за вашу помощь, я попробовал обновить ваш код, но сигары по-прежнему нет. Хотя я понимаю, о чем ты говоришь. Я мог бы попытаться атаковать его другим способом. Или просто уроните его и нанесите удар по маркировке.

5. @shep: добавил еще кое-что к ответу, чтобы помочь вам отлаживать с помощью консоли браузера. Это поможет вам определить, вызываются ли ваши функции и / или проблема заключается в чем-то совершенно другом..