jQuery Карусель не повторяется - PullRequest
1 голос
/ 10 января 2012

Я пытаюсь создать карусель для своего сайта и не могу заставить слайды переместиться в конец списка, поэтому это непрерывный поток без пробелов.Вот код:

<div class="maskleft"></div>
<div class="maskright"></div>

<div class="slideshow">
    <div class="views-row views-row-1 views-row-odd views-row-first">
        <div class="panel-text">text</div>  
        <div class="views-field views-field-field-image-feature">
            <img typeof="foaf:Image" src="" alt="" />
        </div> 
        <img typeof="foaf:Image" src="" alt="" />
    </div>

    <div class="views-row views-row-2 views-row-even">
        <div class="panel-text">text</div>  
        <div class="views-field views-field-field-image-feature">
            <img typeof="foaf:Image" src="" alt="" />
        </div> 
        <img typeof="foaf:Image" src="" alt="" />
    </div>

    <div class="views-row views-row-3 views-row-odd">
        <div class="panel-text">text</div>  
        <div class="views-field views-field-field-image-feature">
            <img typeof="foaf:Image" src="" alt="" />
        </div> 
        <img typeof="foaf:Image" src="" alt="" />
    </div>

    <div class="views-row views-row-4 views-row-even views-row-last">
        <div class="panel-text">text</div>  
        <div class="views-field views-field-field-image-feature">
            <img typeof="foaf:Image" src="" alt="" />
        </div> 
        <img typeof="foaf:Image" src="" alt="" />
    </div>
</div>

JQuery:

function slideChange() {
    var $slider = $('.slideshow');

    var $next = $slider.next().length ? $slider.next() : $('.slideshow'); 

    $next.animate({marginLeft: '-=1024'}, 1000, function() {
    });
}

$(document).ready(function() {
    setInterval( "slideChange()", 5000 );
});

Живой сайт разработчика здесь: http://dev.shoeboxdesign.co.uk/

Ответы [ 2 ]

0 голосов
/ 10 января 2012

Если я вас правильно понял, вы хотите добавить первый слайд в конец слайд-шоу, чтобы у вас был постоянный поток, а не переход назад к началу.Предполагая, что это правильно, мы нашли важное ключевое слово: append .

Вы должны фактически сделать первый слайд и добавить его к последнему слайду.Делайте это на каждом шаге анимации.В итоге получается что-то вроде этого.

function slideChange() {
    var $slider = $('.slideshow');
    var $first = $slider.first();

    $slider.append($first); // Append a copy of the first slide to the last one
    $slider.animate({marginLeft: '-=1024'}, 1000, function() {
        $first.remove(); // Remove the first slide we just copied. So we virtually swapped the slide from the first to the last place
        $slider.css({marginLeft: '+=1024'}); // Reset the margin
    });

}

Это решение не проверено, но должно сработать.Но я все еще вижу некоторые проблемы в вашем коде.

Вы хотите использовать эту функцию только для этого слайдера?Если ваш ответ «да», вы должны обязательно дать своему ползунку #id, а не .class селектор.И поскольку вы больше нигде не будете использовать свою функцию, нет необходимости в общедоступной функции.Вы можете сделать это анонимно, что экономит некоторые ресурсы.

setInterval(function() {
    /* Your stuff goes here */
}, 5000);
0 голосов
/ 10 января 2012
  1. У вас есть только одна div, которая движется, зачем вам этот код:

    var $next = $slider.next().length ? $slider.next() : $('.slideshow'); 
    
  2. Вам нужно сбросить стиль marginLeft, когда вы достигнете конца слайд-шоу:

    if (... check the end of slideshow ...) { // could be calculation of the widht, count of slides, etc.
        $slider.css({marginLeft: '0'});
    }
    
...