2010-07-15 3 views
0

С моим кодом я могу получить div для прокрутки 4 изображений, но если вы посмотрите на код, я должен продолжать добавлять «.next», чтобы заставить его прокручиваться до другого изображения. Я не хочу определять количество изображений для прокрутки в jquery, я хочу, чтобы jquery продолжал просматривать div на столько же изображения, как у меня, прокрутите их все, а затем прокрутите назад. Просто взгляните на мой код. Я не хочу использовать другой плагин, потому что я почти выполнил то, что хочу делать с несколькими строки кода по сравнению с плагинами с несколькими килобайтами.JQuery: сохраните выбор следующего изображения без меня, чтобы поставить «.next(). Next(). Next() и т. Д.

ps: Не знаю, зачем нужен '-165px', но при этом он идеально подходит для прокрутки с изображения на картинку.

Jquery:

Jquery:

$(document).ready(function(){ 
    $('.rotate_container').everyTime(10, function(){ 
     $('.rotate_container').animate({scrollTop: $('img').offset().top - 165}, 2000).delay(1000) 
     .animate({scrollTop: $("img").next().offset().top - 165}, 2000).delay(1000)     
     .animate({scrollTop: $("img").next().next().offset().top - 165}, 2000).delay(1000) 
     .animate({scrollTop: $("img").next().next().next().offset().top - 165}, 2000).delay(1000) 
    }); 
}); 

Любые идеи?

+0

Не могли бы вы вставить html-код? – cji

+0

. и «каждый раз» является частью плагина timers.js, который я нашел, он зацикливается, поскольку я не знал, как это сделать сам. –

ответ

2

Я не проверял, но это, кажется, как он будет работать

$(document).ready(function(){ 
    var container = $('.rotate_container'); 
    var images = container.find('img'); 
    container.everyTime(10, function(){ 
     images.each(function() { 
      container.animate({scrollTop: $(this).offset().top - 165}, 2000).delay(1000); 
     }); 
    }); 
}); 
+0

вот ответ, который я искал, ты потрясающий. Эй, если я могу спросить, почему две переменные в начале? Я думал, что они в значительной степени просто для повторного использования кода, но вы используете только «контейнер» и «изображения» один раз. Есть ли еще одна причина? ускоряет ли он код или что-то еще? спасибо человеку, я очень ценю вашу помощь. –

+0

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

+0

Да, всегда полезно кэшировать объекты jQuery для повторного использования. Мне приходилось многократно возвращать и переставлять код так, что теперь я начинаю с кэширования. Кроме того, вы использовали '$ ('. Rotate_container')' дважды, поэтому стоило усилий кэшировать. Я подумаю о вашем паузном вопросе и вернусь к вам. – Stephen

0

Мое решение требует от вас поставить один дополнительный div внутри контейнера и одно правило CSS. Это происходит следующим образом:

<script type="text/javascript"> 
$(document).ready(function(){ 
    var top = 0; 
    var up = true; 
    var wrap = $(".rotate_container > div ") // shortcut :) 

    function slide() { 
     wrap.animate({ "top" : top+"px" }, 400); 

     if(Math.abs(top) > wrap.height()){ // if all inner_wrap is outside container 
      up = false; 
     } 
     else if(top >= 0) { 
      up = true 
     } 
     if(up) top -= 165; 
     else top += 165; 

     setTimeout(slide, 500) // call function slide after 500 ms 
    } 
    setTimeout(slide, 500) // call function slide after 500 ms 
}); 
</script> 

<style type="text/css"> 
.rotate_container { 
    max-height:292px; 
    max-width:760px; 
    height:292px; 
    width:760px; 
    overflow:hidden; 
    padding:0; 
    margin:0;} 

.rotate_container > div { 
    position: relative; 
    top: 0; left: 0; 
} 

.rotate_container img { 
    height:292px; 
    width:760px;} 
</style> 


<div class="rotate_container grid_12"> 
    <div id="inner_wrap"> 
     <img src="{{ MEDIA_URL }}/employlogo.png" class="top" /> 
     <img src="{{ MEDIA_URL }}/employlogo.png" class="middle" /> 
     <img src="{{ MEDIA_URL }}/employlogo.png" class="midbottom" /> 
     <img src="{{ MEDIA_URL }}/employlogo.png" class="bottom" /> 
     <img src="{{ MEDIA_URL }}/employlogo.png" class="verybottom" /> 
    </div> 
</div> 

Ну, это некрасиво, но это работает. Сначала я неправильно понял ваш фрагмент, извините.

+0

эй он работает, и он маленький, приятный. еще один вопрос, если я могу, как бы я изменил эту строку, чтобы вместо того, чтобы начинать прокручивать назад вверх до вершины постепенно, она отстреливает вас до самого верха в одной гладкой анимации? ....... ........... "else top + = 165;" –

+0

напишите 'else top = 0;' вместо 'else top + = 165;'. Или 'else {top = 0; wrap.animate ({"top": top + "px"}, 2000); setTimeout (слайд, 2000); вернуть; } ', если вы хотите, чтобы эта анимация занимала больше времени. – cji

0

Можете проверить jCarousel или его младший брат, jCarouselLite, который выполняет прокрутку изображения с легкостью.

Для решения вышеизложенного вы можете назначить первую переменную img переменной и затем увеличить ее при обратном вызове. В следующем коде предупреждение выход «Второй»:

<div>First</div> 
<div>Second</div> 
<script type="text/javascript"> 
$(document).ready(function(){ 
    var test = $('div'); 
     test = test.next(); 
     alert(test.html()); 
}); 
</script> 

Таким образом, чтобы изменить код:

$(document).ready(function(){ 
    var img = $('.rotate_container img'); 
    $('.rotate_container').everyTime(10, function(){ 
     $('.rotate_container').animate({scrollTop: img.offset().top - 165}, 2000,null,function() { img = img.next(); }).delay(1000) 
     .animate({scrollTop: img.offset().top - 165}, 2000,null,function() { img = img.next(); }).delay(1000) 
     .animate({scrollTop: img.offset().top - 165}, 2000,null,function() { img = img.next(); }).delay(1000) 
      .animate({scrollTop: img.offset().top - 165}, 2000,null,function() { img = img.next(); }).delay(1000) 
    }); 
}); 

т.д.

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

0

Рекурсия. Напишите функцию, чтобы делать то, что вы хотите (я бы помог с определенным кодом, но я не знаю, что вы собираетесь делать). Возьмите функцию в первом изображении. Сделайте то, что вы хотите в этой функции, и перед тем, как закрыть функцию, вызовите функцию, в которой вы находитесь, и отправьте ее .next().

+0

Все, что я хочу, это скроллер изображений, который показывает 1 изображение в течение нескольких секунд, затем перекатывается вверх и появляется следующее изображение. Здесь я нашел именно то, что собираюсь построить. http://papermashup.com/demos/jquery-slideshow/ -but с кодом, который у меня выше, он работает нормально, единственная проблема, я имею в том, что я должен сказать это в коде jquery точно, сколько изображений прокрутите вниз, обратите внимание, что последние 3 строки одинаковы, но с каждым добавлением «.next()« Я не знаю, как сделать так, чтобы скрипт продолжал смотреть вниз на изображения. Сейчас он проходит только через то, сколько я определяю перед собой. –