Вертикально скользящий контент div

0

У меня есть такая структура:

   <div id="cont">
     <div class="entry">
       <div class="t_time">16:40</div>
       <div class="t_label">Some text</div>
     </div>
     <div class="entry">
       <div class="t_time">16:40</div>
       <div class="t_label">Some text</div>
     </div>
     <div class="entry">
       <div class="t_time">16:40</div>
       <div class="t_label">Some text</div>
     </div>
     <div class="entry">
       <div class="t_time">16:40</div>
       <div class="t_label">Some text</div>
     </div>
     ... may be more "entry" divs
   </div>

Я хочу прокрутить все классы entry вверх/вниз, как шатер. Проблема в том, что все плагины jQuery, которые я нашел, не работают должным образом, они скользят весь cont div или перемещают классы entry но странно и нежелательно.

У вас есть хороший плагин? или какой-то код, который вы уже создали для этого?

Заранее спасибо!

РЕДАКТИРОВАТЬ

Контейнер #cont должен оставаться там, где она началась и не двигаться, только entry DIV, которые находятся в нем. Роб предложил использовать другой div для их переноса, а затем переместить его соответствующим образом. Дело в том, что я хочу вызвать что-то вроде области выделения только тогда, когда разделители записей переполняют родительскую высоту (не проблема здесь), и я хочу, чтобы она начиналась в начале div (что означает, не будет снова покажите WHOLE div, только переполненные entry divs), а затем покажите только последний элемент div, который скрыт, потому что они переполнены. и тогда вся анимация будет повторяться (с этой точки зрения, я хотел бы скользить весь контент div бесконечно). Знать любой плагин, который это делает?

  • 0
    Опишите «странно и нежелательно». Кроме того, вы хотите сдвинуть их по щелчку или автоматически?
  • 0
    @acdcjunior автоматически, я не знаю, как описать это.
Теги:

2 ответа

0

Хорошо, вы не можете это описать, но у меня все равно будет пунт!

Возможно, вам не хватает видового экрана вокруг cont div. То есть то, что определяет размер окна, на котором вы хотите видеть.

Я бы подумал о добавлении другого div. Например

<div id="contViewport">
  <div id="cont">
     <div class="entry">
...

Затем вы можете установить свойства contViewport, чтобы вы видели только немного. Например

#contViewport {
    height:100px;
    overflow:hidden;
    border: 1px solid black;
}

И затем вы можете добавить JQuery для прокрутки этого окна просмотра по строкам этого ответа:

Прокрутите вниз до Div на загрузку страницы (jQuery)

Я собрал простой пример того, что я имею в виду здесь:

http://jsfiddle.net/KeayW/

  • 0
    Привет! Спасибо за ответ! Я не хочу быть грубым, но это не то, что я ищу. Я ищу текстовый слайдер, как marquee поэтому он всегда будет прокручиваться автоматически
  • 0
    Ну, очевидно, у меня на самом деле нет вашего приложения, поэтому я не знаю, что добавляет контент в конец div. Но если вы думаете об этом, то что бы ни добавляло контент внизу, можно вызвать scrollToBottom ()
Показать ещё 3 комментария
0

Я понятия не имею, что ты хочешь, но ты вдохновил меня на скрипку. Здесь функция, которая будет прокручивать cont div от нижней части страницы вверху:

function scrollUp(){
    // Get the window height
    var windowHeight = $(window).height();
    // Get a handle on the container
    var cont = $('#cont');
    // Get the container height
    var contHeight = cont.height();
    // Set the container to be below the viewport
    cont.css({top:windowHeight});
    // Animate the container to move up over 15 seconds, then restart the animation
    cont.animate({top:'-=' + (windowHeight + contHeight)}, 15000, scrollUp);
}

См. Этот рабочий jsFiddle, чтобы увидеть, как он работает, и CSS.

EDIT: см. Комментарии в этом ответе для обновленного jsFiddle. Это решение не так цельно, как мне бы хотелось, и там много циклов, но он должен сделать трюк!

function scrollUp(){
    // Get a handle on the container
    var cont = $('#cont');

    // Get the container height
    var contHeight = cont.height();

    // Get a handle on the child elements
    var entries = cont.find('.entry');

    // Records the heights of each entry div
    var heights = [];
    var i = 0;
    for(; i < entries.length; i++){
        heights.push($(entries[i]).outerHeight());    
    }

    // Calculate the total height of all the entries
    var totalHeight = 0;
    for(i = 0; i < heights.length; i++){
        totalHeight += heights[i];   
    }

    // If it doesnt fit, scroll!
    if(totalHeight > contHeight){
        // Change css so that entries will scroll
        entries.css('position','absolute');

        // Set the entries to be below the viewport based on height of elements above
        for(i = 0; i < entries.length; i++){
            var previousEntryHeights = 0;
            for(var j = 0; j < i; j++){
                previousEntryHeights += heights[j];
            }

            $(entries[i]).css({top:(contHeight + previousEntryHeights)});        
        }

        // Set the entries to scroll up based on height of elements below
        for(i = 0; i < entries.length; i++){
            var nextEntryHeights = 0;
            for(var j = i; j < entries.length; j++){
                nextEntryHeights += heights[j];
            }
            $(entries[i]).animate({top:-nextEntryHeights}, 15000, scrollUp);   
        }
    }
}

// Set the marquee in motion
scrollUp();
  • 0
    Это все ближе! Есть только одна вещь, которую я, возможно, забыл объяснить. Контейнер #cont должен оставаться там , где она началась и не двигаться, только entry DIV - х , которые находятся в нем. Роб предложил использовать другой div, чтобы обернуть их, а затем переместить его соответствующим образом. Дело в том, что я хочу вызывать что-то вроде выделения, только когда entry div превышают рост своего родителя. и я хочу, чтобы он начинал в начале, а затем только раскрывал последние entry div, которые скрыты, потому что они переполнены. и тогда вся анимация повторится. Знаете какой-нибудь плагин, который это делает?
  • 0
    Хорошо, это должно делать то, что вы хотите: JSFIDDLE

Ещё вопросы

Сообщество Overcoder
Наверх
Меню