Скроллер содержимого на jQuery

Скроллер содержимого на jQuery

Сегодня будет учиться делать вот такой симпотичный скроллер содержимого. Для этого нам понадобиться замечательный фреймворк jQuery, плагин mousewheel.js и немного терпения.

Этот клевый скрипт сделали ребята из Флоуплеера.

Возможности

  • горизонтальный и вертикальный скроллинг;
  • возможность установить количество видимых элементов;
  • возможность скролить мышкой (в том числе и колесиком мыши) и стрелками с клавиатуры (требуется плагин mousewheel.js);
  • создание навигационных клавиш без программирования;
  • встроенные действия: next, prev, nextPage, prevPage, seekTo, begin, end.

Поддержка браузерами

  • Firefox 1.5/2.0+;
  • Internet Explorer 5.5/6.0/7.0+;
  • Safari 2.0+;
  • Opera 9.0+.

Примеры

Понравилось? Теперь давайте посмотрим, как реализовать первый пример.

HTML

<div id="scrollable">	
<div class="navi">
<span class="active" page="0"></span><span page="1"></span><span page="2"></span> </div>
<a class="prev"></a>
<div class="items">
<a>1</a> <a>2</a> <a>3</a> <a>4</a> <a>5</a>
<a>6</a> <a>7</a> <a>8</a> <a>9</a> <a>10</a>
<a>11</a> <a>12</a> <a>13</a> <a>14</a> <a>15</a>
</div>
<a class="next"></a>
</div>

JavaScript

$("#scrollable").scrollable({items:'.items',horizontal:true});

CSS


#scrollable {
background-color:#efefef;
border:1px solid #ddd;
padding:10px 8px;
width:550px;
height:65px;
}

/* контейнер для элементов, которые мы будет скролить */
div.items {
height:66px;
margin-left:8px;
float:left;
width:478px !important;
}



/* стиль элемента */
div.items a {
display:block;
float:left;
margin-right:8px;
width:88px;
height:66px;
background:url(img/item.gif) 0 0 no-repeat;
font-size:50px;
color:#ccc;
line-height:66px;
text-decoration:none;
text-align:center;
cursor:pointer;
}

div.items a:hover {
color:#999;
}

div.items a.active {
background-position:-174px 0;
color:#555;
cursor:default;
}


/* кнопки вперед и назад */
a.prev, a.next {
display:block;
width:30px;
height:30px;
float:left;
background-repeat:no-repeat;
margin:15px 0 0 0;
}

a.prev {
background:url(img/button-left.gif);
}

a.prev:hover {
background:url(img/button-left-over.gif);
}

a.next {
background:url(img/button-right.gif);
}

a.next:hover {
background:url(img/button-right-over.gif);
}


/* верхняя навигация */
div.navi {
position:relative;
top:-30px;
left:310px;
margin-left:-50px;
width:50px;
height:0px;
}


/* элементы верхней навигации */
div.navi span {
width:8px;
height:8px;
float:left;
margin:3px;
background:url(img/dots.png) 0 0 no-repeat;
cursor:pointer;
}

div.navi span:hover {
background-position:0 -8px;
}

div.navi span.active {
background-position:0 -16px;
}

Сейчас вы увидели как сделать такой же скроллер. Давай посмотрим остальные возможности скрипта.

Полный синтаксис

Ниже идет список всех возможностей (и значений по умолчанию).

// выберите один или несколько элементов для скроллинга
$("JQUERY SELECTOR").scrollable({

// дефолтное количество видимых эелементов 5
size: 5,

// по умолчания ставиться вертикалльный скроллинг
horizontal:false,

// время одного прокручивани]
speed: 300,

/*
селектор для кнопки перемотки назад
*/
prev:'.prev',

// это для кпопки вперед
next:'.next',

/*
селектор для верхней навигации
*/
navi:'.navi',

// имя html элемента внутри верхней навигации (точки)
naviItem:'span',


// CSS класс для активного элемента верхней навигации
activeClass:'active',

/*
Элементы, который мы будет скролить, выбираются этим селектором
*/
items: '.items',

// функция, которая вызывается при скроллинге элементов
onSeek: null

});

Использование навигации

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

Рассмотрим такой пример. У нас есть 4 кнопки, кликая по которым вы будете прокручивать список элементов сразу на несколько штук. Количество таких элементов будет зависить от количества элементов внутри скрола.

<div class="navi">
<span page="0" class="active"></span>
<span page="1"></span>
<span page="2"></span>
<span page="3"></span>
</div>

Использование API

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

// выбираем элемент для скрола
var el = $("div.scrollable");

// шаг сперед
el.scrollable("next", [speed]);

// шаг назад
el.scrollable("prev", [speed]);

// страница вперед
el.scrollable("nextPage", [speed]);

// страница назад
el.scrollable("prevPage", [speed]);

// переход на конкретную страницу
el.scrollable("setPage", 1, [speed]);

// 2 шага вперед
el.scrollable("move", 2, [speed]);

// переход на конкретный элемент
el.scrollable("seekTo", 2, [speed]);

// переход к первому элементу
el.scrollable("begin", [speed]);

// и к последнему
el.scrollable("end", [speed]);

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

Расскажите друзьям

Оцените статью:
  • 1
  • 2
  • 3
  • 4
  • 5

Комментарии — 60

Artman
клевый плагин. спасибо за урок!
#
Artman
Octane
По ссылкам [скроллинг плейлистаk и [скроллинг с навигацией по табамk ошибка 404.
Octane
И почему-то в моем посте вместо кавычек ёлочек Alt+0171 и Alt+0187 появились символы [ и k.
Grin
Спасибо, Octane, исправил
#
Grin
Владислав Мёдов
При нажатии на картинку ( http://vremenno.net/js/jquery-scrolling-plugin/ ) - пустая страница открывается.
Вадим
Это начинает мне нравится. Спасибо, прям мысли угадываете. :D
PRestige
Вы как сговорились сегодня? Все сегодня о нем пишут, весь рунет :)
Steward
Вот интересно - я один на странице с плейлистом вертикального скроллера не вижу и должен догадаться что там больше трёх песен? А на скроллере с табами всё так ужасно дёргается... шо писец - если такое заказчику показать - пошлют далеко и надолго.
Андрей
Спасибо, полезная статья. Измените "вот такой симпотичный скроллер"
#
Андрей
pepelsbey
Всё бы ничего, но вот только использование подсказки в виде точек абсолютно не к месту. Основной смысл этих точек показывать сколько элементов есть в сете и на каком их них ты находишься. Т.е. смысл от них есть только тогда, когда единомоментно виден только один элемент сета. А что мы видим в первом примере? 15 элементов и всего 3 точки. Как я должен понять, в какой момент я вышел за первую треть сета, а как, что зашёл во вторую? В остальном красиво, но сильно лагает, особенно при вертикальной прокрутке. Вместе со скроллом мыши тащится и сама страница.
Octane
Ага при прокрутке тормозит. Да ещё на рабочем компьютере Microsof Mouse с аналоговым скроллом, который за одно движение всю эту менюшку прокручивает :D да еще и браузер начинает в этот момент притормаживать. Я бы вообще убрал эти точки и реакцию на скроллер, а так как элемент интерфейса клёвая штука :) р.s. добро пожаловать в «dmoz» :-)
Денис Чистяков
Спасибо, отличный скроллинг, как раз на днях искали, но воспользовались [дефолтнымk из jQuery UI. Вот только [спрайтk с навигационными точками в IE6 глючит ) вылезает вся картинка.
#
Денис Чистяков
Grin
pepelsbey, тут все просто. точки сверху это как страницы в блоге. Каждая точка листает на 5 (сколько видно за раз) элементов. Это как на блоге - перемотка, к примеру, на 10 постов
#
Grin
bukvoed
Скроллер не очень впечатлил, а вот за флоуплейер спасибо большое!
sergy
ОТличная вещь, как раз пригодится с табами)
#
sergy
pepelsbey
> точки сверху это как страницы в блоге Страницы в блоге сгруппированы текущей страницей, поэтому вам понятно какой пост открывает сет/страницу, а какой закрывает. А тут длинная простынка и как я должен ориентироваться? Правильно только разделив количество элементов на количество точек. Вот только зачем вы заставляете меня думать? ;)
Grin
pepelsbey, ну да, возможно эта фича не везде удобна )
#
Grin
Zodios
Как по мне использование точек как раз уместно. Ведь если я захочу перейти скажем на страницу 74 зачем мне перелистывать все страницы?. Что не понравилось - большой размер кнопок и то что количество кнопок следовало б сделать кратным 10, тогда легче понимать на какую точку нужно нажать для перехода.
Ghz
В архиве с примером не хватает scrollable.js.
#
Ghz
Shend
Привет! Спасибо за прекрасный блог :) Возник у меня один вопрос насчет скроллера. Если вынести кнопки прокручивания (prev и next) за div "scrollable", то они уже перестают действовать :( Можно исправить? Помогите, пожалуйста.
#
Shend
Начинающий
Здравствуйте! Спасибо за хороший пример! У меня есть один вопросик. Я вставляю данный скролл в php страницу. Как сделать так, чтобы при нажатии на одну из картинок генерировалась страница с соотвествующей информацией, и при этом на новой странице состояние скролла не менялось? У меня получается, что при загрузке новой страницы скролл формируется заново и нажатый пункт/рисунок пропадает :(. В принципе это логично, но как это обойти без использования фреймов?
Заранее благодарен!
#
Начинающий
kil
кул. насчет "не хватает scrollable.js" - выходим на страницу присера и добавляем к строке запроса "scrollable.js" вот те и нужный текст файла :)
с вертикальным скролом - реально глюковато...
и насчет скрипта как такового... я не силен в js - давно не писал на нем... но вот решил вспомнить и прифигел (стока всего, конечн не флэш, но чувствую скоро не за горами :) объясните как использовать этот плагин: просто подключил и передал в функцию классы элементов которые каждый за свое отвечают или нужно прописывать события на каждый элемент просто с сылкой внутри обработчика на этот плагин?
#
kil
Grin
kil, нужно просто написать вот так:
$("#scrollable").scrollable({items:'.items',horizontal:true});

Тут элемент с id scrollable - внешний контейнер, элементы с классом .items - то, что мы будем скролить. Все остальные элементы управления имеют уже зарезервированные в скрипте классы (например, navi), по которым к ним сами привяжутся события.
#
Grin
dr.archik
Реально ли уменьшить размер jquery.js - библиотеки для этого плагина ?
Тут функций то на пару килобайт !
Если реально то кто подскажет в каком месте почистить ?
#
dr.archik
Grin
dr.archik, можно проследить какие классы используются (рекурсивно) и удалить ненужные.
#
Grin
faster
кка ато в ИЕ он странно работает, отдельно еще более менее сносно, а когда вставил в сйат - не кролит, и scrollable контейнер кривой, ктонить сталкивался с этим?
#
faster
serg
скролл хороший, слов нет, но я пытаюсь его вставить на сайт во фрейм и не работает. Люди добрые подскажите про нюансы вставки этого скрипта во фрейм. Спасибо.
#
serg
Shaman
Народ а кто подскажет - как переделать этот скрипт так чтобы полоска была в 2 ряда??
#
Shaman
Georgemus
А почему нельзя код "perv" и "next" использовать между тегом "div"???
#
Georgemus
Елена
У меня все эти ittems выстроились столбиками безо всякой прокрутки. не работает
#
Елена
Grin
Елена, попробуйте еще раз полностью скопировать код. У нас же все работает
SleaD
Воспроизвел ситуацию описанную Еленой. Запускал в IE и Firefox. Пример не пашет.
#
SleaD
Alex
Не работает, всё также как у Елены
#
Alex
Козьма Прутков
Аналогично, не работает. Копировал код - не работает. Скачал пример - тоже.
Зачем выкладываете нерабочие примеры?
#
Козьма Прутков
Vlad Dorokhin
А можно ли подгрузить Аяксом xml добавить элементы из XML в DOM, а потом эти элементы скролить этим скроллером и менять по необходимости?
#
Vlad Dorokhin
Artemiy
Так обрадовался когда нашел этот скрипт, на столько что даже не протестировал его во всех браузерах. Поверил на слово... :( Сверстал сайт поставил, а скриптик в опере не пашет оказывается (9.64)
Мне проект директору здавать сегодня, а он как раз в Опере тестит все))
Может быть кто-нибудь уже исправлял баг?
Иван
Можно ли добавить обработку события при клике на ячейку? Хочу использовать этот плагин для показа превьюшек. Соответственно, при клике, кроме прокрутки скроллера, мне нужно выводить полный вариант изображения.
#
Иван
Денис
Я не первый раз применяю этот скрипт единственный минус не валидность кода но это в принципе дело легко поправимо)
#
Денис
Шторм
хотелось бы ширину области скроллинка динамически изменять (.items).. в связи с этим вопрос - как переопределить параметры скроллинга - например изменить параметр size с 4-х до 2-х.
#
Шторм
Шторм
и, кстати для оперы в скрипте для колеса мыши if ( $.browser.opera ) delta = -event.wheelDelta; мешает корректно работать, пришлось закомментировать эту строку)
#
Шторм
smita
Очень интересует вопрос. Можно ли задать первый видимый элемент в скролле? Т.е. чтобы первым отображался не квадрат 1, а к пример квадрат 7?
#
smita
johnyy
Подскажите, а как сделать такой скролл: http://emfire.ru/
#
johnyy
Сергей
В Opera 10 скроллинг в скрипте работает некорректно. При малейшем движении ролика лента переходит в конечное положение сразу.
Алексей
В статье часть ссылок не работает. На целевом сайте написано broken link.
#
Алексей
gps
Спасибо отличный скрипт....
#
gps
glue
Использую этот плагин совместно со $.sortable.
Подскажи плз, как переинициализировать уже отсортированный набор элементов для скролла, чтобы он не перескакивал с первого на 10 (который раньше был вторым) ?
#
glue
Михаил
Ссылки на примеры не работают.
igor
пробую вставить этот слайдер вместе с fancybox. Т.е. открывается оно а там слайдер. Так вот при открытии окна слайдер не работает, слетают события click по кнопкам вперед/назад. В чем может быть проблема? как решить?
#
igor
Эдуард
А как обстоят дела с сео и индексацией сего чуда?
Rusl
Подскажите пожалуйста как сделать так, чтобы он прокручивался автоматически???? Заранее спасибо.

p.s. Классный скроллер!
#
Rusl
Иван
Между прочим: В архиве реально нет скроллэйбл! для тех ,кто не нашёл scrollable.js он в "просмотр кода страницы" по клику на реф "scrollable.js" открывается... копируйте в блокнот и будет Вам счастье. А насчёт того, что не работает в Опере, блин, печально! У нас 30-40% потенциальных клиентов на нём сидят, лишние строчки писать :(
Ды я и сам только на firefox, IE9 и chrom проверяю.
#
Иван
Иван
Ещё минус скрипта - нельзя Jquery с js поставить два меню, одно под другим, да и вообще на странице.
Может недопонимаю что, но ВЫЛОЖИТЕ, плиз, УРОК С ЭТИМ ПРИМЕРОМ (ДВА МЕНЮ НА СКРОЛЛЕ)! ))
#
Иван
Игорь
В предлагаемом архиве нет файла scrollable.js
#
Игорь
Александр
Привет...а можно ли сделать так, чтобы когда он был в крайнем левом положении, то левая стрелочка исчезала, и тоже самое с крайним правым...
тобишь когда уже скролить некуда...то кнопочка исчезает
#
Александр
Вадим
класный скроллер, то что искал!
andand
Подскажите пожалуйста. Есть скроллер. Видимый один элемент. Как получить id этого элемента?
Максим
Спасибо за плагин.
Если не учитывать кнопки лево право плагин не адаптирован под мобильные девайсы с сенсорными экранами.
и еще хотелось бы видеть вместо точек (для навигации) ползунок потянув за который можно было бы еще быстрее скролить
Irina
в архиве не работает плагин
#
Irina
amigohol
клевый плагин. спасибо за урок!
#
amigohol

Новый комментарий

как выглядит какой тег
жирный текст <b>жирный текст</b>
курсивный тект <i>курсивный тект</i>
зачеркнутый текст <s>зачеркнутый текст</s>
подчеркнутый текст <u>подчеркнутый текст</u>
ссылка <a href="адрес">ссылка</a>
function foo() { ... }
<pre><code>function foo() { ... } </code></pre>
разрешенные теги или посмотреть как будет выглядеть
как выглядит какой тег
жирный текст <b>жирный текст</b>
курсивный тект <i>курсивный тект</i>
зачеркнутый текст <s>зачеркнутый текст</s>
подчеркнутый текст <u>подчеркнутый текст</u>
ссылка <a href="адрес">ссылка</a>
function foo() { ... }
<pre><code>function foo() { ... } </code></pre>
разрешенные теги или посмотреть как будет выглядеть

metin2 pvp metin2 pvp serverler pvp serverler