2013-07-02 2 views
1

Итак, я немного новичок в jQuery, но у меня есть опыт нескольких месяцев. Мой вопрос идет так.Создание слайдера изображения jQuery с анимацией

Я построил слайдер изображения, который проходит через div и анимирует фотографии, «скользящие вправо налево», когда я нажимаю кнопку «СЛЕДУЮЩИЙ». Моя проблема, однако, меняет его на «сползать влево» вправо, когда я нажимаю предыдущую кнопку.

В моем коде я пытался двигаться мой анимировать запас-left.fadeOut заявление в если БТН имеет класс следующий условно, и замена его .queue(function), .css(function), .animate(function) и несколько других, но ничего не кажется, работает, и я не могу оставить его в верхней строке, потому что он влияет на предыдущее условие, которое я хочу работать в обратном направлении, что моя следующая кнопка идет.

Я был очень застрял на этом в течение нескольких недель, и я продолжаю возвращаться к этой точке, которая работает на полпути. Может кто-нибудь направить меня в правильном направлении. Я в тупике.

Вот что у меня есть.

<body> 
    <section class="photos"> 
     <div class="slider"> 
      <div class="photo"> 
       <img src="images/photoOne.png"> 
      </div> 
      <div class="photo hidden"> 
       <img src="images/photoTwo.png"> 
      </div> 
      <div class="photo hidden"> 
       <img src="images/photoThree.png"> 
      </div> 
     </div> 


    <div class="buttons"> 
     <a href="#" class="btn prev">Previous</a> 
     <a href="#" class="btn next">Next</a> 
    </div> 
</section> 
</body> 

<script src="jquery-1.9.1.js"></script> 

<script> 
var activePhoto = 0; 

$('.btn').click(function() { 

var $btn = $(this); 

$photoBox.eq(activePhoto).animate({ 
"margin-left": "-=744px"}, "fast").fadeOut(function() { 

    if ($btn.hasClass('next')) { 
     if (activePhoto == $photoBox.length - 1) { 
      activePhoto = 0; 
     } else { 
      activePhoto++; 
     } 

     $photoBox.eq(activePhoto - 1).css({ 
      "margin-left": "+=744px" 
     }); 

     $photoBox.eq(activePhoto).css({ 
      "margin-left": "+=744px" 
     }); 

     $photoBox.eq(activePhoto).fadeIn().animate({ 
      "margin-left": "-=744px" 
     }, "fast"); 

    } else if ($btn.hasClass('prev')) { 

     if (activePhoto == 0) { 
      activePhoto = $photoBox.length - 1; 
     } else { 
      activePhoto--; 
     } 
    } 

}); 

}); 

</script> 

Как я уже сказал, это прекрасно работает, как это, когда я щелкаю дальше, но заставить его делать противоположное, когда я нажимаю предыдущий дает мне проблемы. Если это имеет смысл, это то, что я пытался сделать с моим jQuery.

<script> 
var activePhoto = 0; 

$('.btn').click(function() { 

var $btn = $(this); 

$photoBox.eq(activePhoto).queue(function() { 
    if ($btn.hasClass('next')) { 

     if (activePhoto == $photoBox.length - 1) { 
      activePhoto = 0; 
     } else { 
      activePhoto++; 
     } 

     $photoBox.eq(activePhoto - 1).animate({ 
      "margin-left": "-=744px"}, "fast").fadeOut(); 

     $photoBox.eq(activePhoto - 1).css({"margin-left": "+=744px"}); 

     $photoBox.eq(activePhoto).css({"margin-left": "+=744px"}); 

     $photoBox.eq(activePhoto).fadeIn().animate({"margin-left": "-=744px"}, "fast"); 

    } else if ($btn.hasClass('prev')) { 

     if (activePhoto == 0) { 
      activePhoto = $photoBox.length - 1; 
     } else { 
      activePhoto--; 
     } 

     $photoBox.eq(activePhoto + 1).animate({"margin-left": "+=744px"}, "fast").fadeOut(); 

     $photoBox.eq(activePhoto + 1).css({"margin-left": "-=744px"}); 

     $photoBox.eq(activePhoto).css({"margin-left": "-=744px"}); 

     $photoBox.eq(activePhoto).fadeIn().animate({"margin-left": "+=744px"}, "fast"); 

    } 
}); 

}); 

</script> 

Я надеюсь, что имеет смысл :)

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

http://jsfiddle.net/jay_dub/dtdZc/

http://jsfiddle.net/jay_dub/naKub/

+1

Если вы публикуете вопросы, пожалуйста, убедитесь, что ваш код имеет отступ, и что вы добавляете какое-то форматирование, иначе его действительно трудно прочитать. Является ли это прямой копией и прошлым кода js? Потому что этот код имеет несоответствующий '});' в конце, который будет синтаксической ошибкой и будет препятствовать запуску вашего кода. –

+0

Я пропустил новую строку после того, как «Вот что я до сих пор». Поэтому некоторый код html не отображается. Я попытался исправить, но мое редактирование было отклонено;). Поэтому, пожалуйста, добавьте новую строку самостоятельно, чтобы весь html-код был показан снова, извините за мою ошибку во время редактирования. –

+0

Я забыл добавить функцию btn click и мою переменную для кнопки и исправил форматирование, чтобы HTML отображался снова. –

ответ

2

Ну, я в основном тратить час подготовки это для вас, так что я надеюсь, что вы цените его :)

То, что вы хотите сделать, это сделать точно такой же в обратном направлении для если вы нажимаете предыдущий:

$(".btn_next").click(function() 
    { 
      $(".slider").animate({ 
      "margin-left": "+=-100px" 
      }, "fast"); 
    }); 

$(".btn_prev").click(function() 
    { 
      $(".slider").animate({ 
      "margin-left": "+=100px" 
      }, "fast"); 
      current--; 
    }); 

Но как реализовать это?

Ну, я подготовил живой пример для вас: http://jsfiddle.net/qPPL8/5/

Постарайтесь понять, что именно я там делать и почему это работает.

Если вы это сделаете, вы можете использовать тот же самый метод для своего кода.

ПРИМЕЧАНИЕ: Я немного усовершенствовал код, чтобы включить тот факт, что можно «заканчивать фотографии». Вы можете видеть, как я это сделал с if statements в JsFiddle.

Я надеюсь, что ответит на ваш вопрос.

+0

Я ценю помощь, но это не совсем то, что я ищу. По нескольким причинам, первый заключается в том, что петля слайд-изображения неправильно, а вторая заключается в том, что у меня есть подпись, чтобы идти вместе с фотографией, которая работает одинаково одним кликом. Мне нравится то, что вы сделали, и задал мне вопрос, и вы можете увидеть, куда я иду. По существу, я пытаюсь сделать мою предыдущую кнопку сдвинуть изображение справа от заголовка, вытереть новое изображение слева от надписи и сдвинуть его над надписью. –

+0

вот ссылка на мою скрипку http://jsfiddle.net/jay_dub/dtdZc/ –

+0

И вот проблема, с которой я сталкиваюсь, когда пытаюсь изменить ее. http://jsfiddle.net/jay_dub/naKub/ –

0

ОК :) Я понял!

Поскольку я имел два класса по моим кнопкам я использовал взял вашу идею расколоть их в качестве такого

$('.next').click(function() { 
    var $btn = $(this); 
    var $photoBox = $('.slider').find('.photo'); 
$photoBox.eq(activePhoto).animate({"margin-left": "-=744px"}, "fast").fadeOut(function() { 

с первой половины условного оператора и

$('.prev').click(function() { 
    var $btn = $(this); 
    var $photoBox = $('.slider').find('.photo'); 
$photoBox.eq(activePhoto).animate({"margin-left": "+=744px"}, "fast").fadeOut(function() { 

со второй половиной из условного утверждения, которое почти сработало, но математика по-прежнему была выключена для предыдущей кнопки и не переписывала правильную фотографию, поэтому мне нужно было вычесть меньше, чем общее количество фотографий (т. е. 3 фотографии так -2) и все работало блестяще! Потрясающие!

+0

Итак, вы можете принять мой ответ как «ответ»? Это нормально, если вы отправляете вопрос, а кто-то ведет вас к ответу «спасибо», выбрав свой ответ как «ответ» (нажав зеленую кнопку рядом с ответом) –

+0

Кроме того, если вы внимательно посмотрите на мой код, вы видите, что я сделал то же самое с 3 и -2, но я мягко закодировал его, а не hardcoded. –

+0

Кроме того, если вы хотите еще больше поблагодарить кого-то, вы можете «отменить» их ответ. Делая это, вы дадите им баллы за то, что они дали хороший ответ, и если вы дополнительно принимаете их ответ как «ответ», то вы также присуждаете им очки за решение проблемы. Например: я поддержал ваш ответ, поэтому поэтому у вас сейчас 6 человек. Надеюсь, это поможет вам начать работу на Stack :) –

Смежные вопросы