Как непрерывно прокручивать контент в DIV, используя jQuery? - PullRequest
6 голосов
/ 09 апреля 2010

Aim

Цель состоит в том, чтобы иметь контейнер DIV с фиксированной высотой и шириной и иметь содержимое HTML в этом DIV, автоматически непрерывно прокручивать вертикально.

Вопрос В основном я создал код ниже, используя jQuery для прокрутки (перемещения) дочернего DIV по вертикали вверх, пока он не выходит за пределы родительского поля, где анимация затем завершается, что вызывает обработчик события, который сбрасывает позицию дочернего DIV и запускает процесс снова .

Это работает нормально, поэтому содержимое прокручивается вверх, оставляя пустое пространство, а затем снова начинается снизу и прокручивается вверх.

Проблема, с которой я столкнулся, заключается в том, что для этого необходимо, чтобы контент выглядел так, как если бы он непрерывно повторялся, см. Диаграмму ниже, чтобы лучше объяснить это, есть ли способ сделать это? (Я не хочу использовать сторонние плагины или библиотеки, кроме jQuery):

альтернативный текст http://www.cameroncooke.com/playground/scrolling-example.gif

Что у меня до сих пор

HTML:

<div id="scrollingContainer">

  <div class="scroller">

    <h1>This is a title</h1>

    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse at orci mi, id gravida tellus. Integer malesuada ante sit amet enim pulvinar congue. Donec pulvinar dolor et arcu posuere feugiat id et felis.</p>

    <p>More content....</p>   

  </div>

</div>

CSS:

#scrollingContainer{
  height: 300px;
  width: 300px;
  overflow: hidden;
}

#scrollingContainer DIV.scroller{
  position: relative;
}

JavaScript:

/**
* Scrolls the content DIV
*/
function scroll() {

  if($('DIV.scroller').height() >  $('#scrollingContainer').height()) {

    var t = $('DIV.scroller').position().top + $('DIV.scroller').height();

    /* Animate */
    $('DIV.scroller').animate(
    {
      top: '-=' + t + 'px'
    }
    , 4000, 'linear', animationComplete);
  }
}

function animationComplete() {
  $(this).css('top', $('#scrollingContainer').height());
  scroll();
}

Ответы [ 4 ]

3 голосов
/ 09 апреля 2010

Вам нужно будет продублировать ваш элемент контента и выровнять их так, чтобы они были вертикально рядом друг с другом, и прокрутить их в тандеме. Ваша текущая прокрутка должна сработать, переход будет невидимым, потому что он должен перепрыгнуть с вершины нижнего элемента на вершину верхнего элемента, то есть на ту же часть. Я бы поместил обе копии содержимого (вы можете просто .clone получить его для получения другой копии) в контейнер и прокрутил бы его, чтобы вам не пришлось беспокоиться о перемещении двух элементов.

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

1 голос
/ 09 апреля 2010

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

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

Попробуйте это:

$('.upBut').bind('click',function(){
    $('.articleWrapper').prepend($('.article:last')).children('.article:first').css({display:'none'}).show('slow');
});
$('.downBut').bind('click',function(){
    //$('.articleWrapper').append($('.article:first')).children('.article:last').css({display:'none'}).show('slow');
    $('.article:first').hide('slow',function(){$(this).appendTo('.articleWrapper').show('slow');});
});
$('.upBut').hover(function(){$(this).css("background-image", "url(images/up_green.png)");},function(){$(this).css("background-image", "url(images/up_red.png)");});
$('.downBut').hover(function(){$(this).css("background-image", "url(images/down_green.png)");},function(){$(this).css("background-image", "url(images/down_red.png)");});

Рабочий пример можно посмотреть здесь: http://www.timeswellness.com/index.aspx?page=others&rightnav=false&do=CancerDay

0 голосов
/ 09 апреля 2010

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

...