Простое циклическое слайд-шоу с ссылкой next / prev



Я более или менее новичок в Jquery и начать с него
Я попытался сделать кликабельное циклическое слайд-шоу, основанное на этом.
Пока все хорошо. Код работает (см. ниже).
Мои вопросы:





  1. Нет ли более простого способа написать код? Я как бы повторяю один и тот же код для prev и next.



  2. Когда я нажимаю на ссылки next / prev и начинается анимация - и во время анимации я нажимаю снова, то иногда изображение мерцает или появляется быть ошибкой.
    Есть ли способ заставить анимацию закончиться, прежде чем она отреагирует на мой щелчок.



Javascript:



    $(function() {

$('#prev').click(function() {
var $active = $('#slideshow IMG.active');
var $prev = $active.prev();
$active.addClass('last-active');

if($active.is(":first-child")){$prev = $("IMG:last-child");}
$prev.css({opacity: 0.0})
.addClass('active')
.animate({opacity: 1.0}, 1000, function() {
$active.removeClass('active last-active');
});

});


$('#next').click(function() {
var $active = $('#slideshow IMG.active');
var $next = $active.next();
$active.addClass('last-active');

if($active.is(":last-child")){$next = $("IMG:first-child");}
$next.css({opacity: 0.0})
.addClass('active')
.animate({opacity: 1.0}, 1000, function() {
$active.removeClass('active last-active');
});

});

});


CSS:



    #slideshow {position:relative; height:350px; opacity:1.0;}
#slideshow IMG {position:absolute; top:0; left:0; z-index:8; opacity:0.0;}
#slideshow IMG.active {z-index:10; opacity:1.0;}
#slideshow IMG.last-active {z-index:9;}
#next {color:#0000ff; cursor:pointer;}
#prev {color:#0000ff; cursor:pointer;}


HTML:



    <div id="slideshow">
<img src="image1.jpg" class="active" />
<img src="image2.jpg" />
<img src="image3.jpg" />
<img src="image4.jpg" />
</div>
<div id="next">NEXT</div>
<div id="prev">PREV</div>
488   2  

2 ответов:

Http://jsfiddle.net/kPD4n/

Вот так.

1) добавьте один и тот же класс для кнопок "NEXT" и "PREV", а затем проверьте, какой из них нажат.
2) добавлено .стоп (0,1), чтобы перейти к концу анимации.

Все еще немного глючит...

Ну, каждый раз, когда я сталкиваюсь с необходимостью создания какого-то цикла, я использую jQuery Cycle PlugIn. Возможно, это не ответ на ваш вопрос об оптимизации, но я думаю, что каждый должен был взглянуть на плагин цикла.

И, как вы можете видеть здесь, на демонстрационной странице, Вы можете очень легко использовать кнопки next/prev. Так же, как

$('#slideshow').cycle({ 
    fx:     'fade', 
    speed:  'fast', 
    timeout: 0, 
    next:   '#next', 
    prev:   '#prev' 
});

И ваш HTML-код может оставаться таким же.

Comments

    Ничего не найдено.