Использование «this» в jquery после вызова .next ()

0

Я делаю простой цикл прокрутки изображений, первое изображение проходит через экран просто отлично, но ничего не следует, я использую "это" неправильно? Код:

var width = $(window).width();
var height = $(window).height();

var size = (height + width)/2;

$( document ).ready(function()
{  
    $('#pictureFrame').children('img').each(function(){$(this).css('left', '100%')});
});
window.onload = function(){startSlideshow($('#pictureFrame > img'))};
function startSlideshow(myobj) {
    $(myobj).next().animate({left: "-=" + (width + 2000)},{
        duration: 30000,
        queue: false,
        easing: 'linear',
        complete: function() {
            $(myobj).css('left', '100%')
        }
    });
    time = ($(this).width()* 10)/(width + 2000);
    setTimeout(startSlideshow($(this)),time); 
}

HTML:

<div id="pictureFrame">    
     <img class="slideshow" src="img1.jpg">
     <img class="slideshow" src="img2.jpg">
     <img class="slideshow" src="img3.jpg">
     <img class="slideshow" src="img4.jpg">    
 </div>
  • 1
    Что если вы используете: startSlideshow($('#pictureFrame > img:first')) ??? В вашем коде $(myobj) - это все изображения, а не только одно. И вам нужно проксифицировать контекст на время ожидания. Кстати, ваш синтаксис тайм-аута здесь неправильный
  • 1
    startSlideshow есть window как его this объект. Это, вероятно, не то, что вы хотели.
Показать ещё 8 комментариев
Теги:

1 ответ

3
Лучший ответ

Я думаю, что что-то вроде этого ближе к тому, что вы хотите:

window.onload = function() {
    startSlideshow($('#pictureFrame > img:first'))
};

function startSlideshow(myobj) {
    myobj.animate({left: "-=" + (width + 2000)},{
        duration: 30000,
        queue: false,
        easing: 'linear',
        complete: function() {
            $(myobj).css('left', '100%')
        }
    });
    var next = myobj.next();
    if (!next.length) {
        next = myobj.siblings().first();
    }
    time = ($(this).width()* 10)/(width + 2000);
    setTimeout(function() {
        startSlideshow(next)
    }, time);
}

Каждый вызов startSlideshow переходит к следующему изображению в DIV. Когда он закончится, он вернется к первому.

  • 0
    По какой-то причине это не будет повторяться во второй раз, и setTimeout() не будет работать. все изображения начинают двигаться одновременно, даже если я использую целое число, например, 5, а не time .
  • 0
    Теперь по какой-то причине это только начало работать; однако цикл воспроизводится только один раз. Если обратный вызов из первой анимации не был вызван до повторного вызова анимации, это аннулирует обратный вызов и просто снова перейдет к анимации?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню