Прокрутка списка на кнопках (Margin)

Есть несколько вариантов прокрутки, но все используют на изменение атрибут стилей. Прокрутка горизонтальная или вертикальная не имеет разницы. Изменение только входных и выходных параметров. При прокрутке как правило изменяют стиль margen, давайте рассмотрим этот вариант. Не забываем подключить jQuery.

 

Структура нашего списка:

<div class="block_lenta" style="height: 100px; overflow: hidden;">
    <ul class="lenta">
        <li>произвольный текст в списке 1</li>
        <li>произвольный текст в списке 2</li>
        <li>произвольный текст в списке 3, он может быть разной длины</li>
        <li>произвольный текст в списке 4</li>
        <li>произвольный текст в списке 5</li>
        <li>произвольный текст в списке 6, он может быть разной длины</li>
        <li>произвольный текст в списке 7</li>
        <li>произвольный текст в списке 8</li>
        <li>произвольный текст в списке 9, он может быть разной длины</li>
        <li>произвольный текст в списке 10</li>
    </ul>
</div>
<span id="up_lenta">кнопка вверх</span>
<span id="down_lenta">кнопка вниз</span>

Список у нас есть теперь получим данные для обсчета.

    var slideHeight = parseInt($('.block_lenta').css('height')); //высота видемой области
    var lentaMargin = parseInt($('.lenta').css('margin-top')); // отступ с верху списка, если он есть
    var lentaPosition = lentaMargin; // начальная позиция
    var lentaHeight = parseInt($('.lenta').css('height')); // Высота списка
    var lentaElements = parseInt($('.lenta li').length); // Колличество элементов
    var lentaStep = Math.round(lentaHeight / lentaElements); // Шаг прокрутки

Теперь сама функция по прокрутке списка:

function lentaSkrol(){
    lentaPosition = ($(this).attr('id') == 'up_lenta') ? //определяем какая кнопка была нажата
        (lentaPosition - lentaStep) : (lentaPosition + lentaStep); // Если ввнрх, то отнимаем (чтобы поднять), вниз пребовляем (чтобы опустить)
    $('.lenta').animate({'margin-top':(lentaPosition)}); // применяем новую позицию
    lentaActive(); // активируем действие кнопки
};

Теперь необходимо задействовать сами кнопки

 function lentaActive(){ //Проверяем на положение позиции списка и соответственно включаем или выключаем кнопки
    if(lentaPosition <= (slideHeight - lentaHeight)){
        if($("#up_lenta").hasClass("up_active")){
            $("#up_lenta").unbind("click", lentaSkrol).removeClass("up_active")};
    }else{
            if(!$("#up_lenta").hasClass("up_active"))
            $("#up_lenta").bind("click", lentaSkrol).addClass("up_active")
    };
                
    if(lentaPosition >= lentaMargin){
        if($("#down_lenta").hasClass("down_active")){
            $("#down_lenta").unbind("click", lentaSkrol).removeClass("down_active")};
    }else{
        if(!$("#down_lenta").hasClass("down_active"))
            $("#down_lenta").bind("click", lentaSkrol).addClass("down_active")
    };
};

Все эти действия необходимо выполнять после после загрузки страницы, поэтому необходимо все это вставить в:

$(document).ready(function(){
    var ....
    var ....
    function lentaSkrol(){.....};
    function lentaActive(){.....};
    lentaActive();
};

Теперь все. Пример для просмотра лежит здесь.