В вашем обработчике .ready()
создайте список номеров элементов:
var len = posts.length
var $ul = $('<ul id="navItems">');
for (var i=0; i<len; i++) {
$('<li data-item="' + i+ '">' + (i+1) + '</li>')
.click(function(e) {
// go to this item when you click
// get the item num using $(this).data('item');
})
.appendTo($ul);
}
$ul.insertAfter($('#prev'));
Вы можете стилизовать список с помощью css, чтобы сделать его горизонтальным:
#navItems { list-style: none; display: inline-block; }
#navItems li { display: inline-block; width: 15px; height: 15px; }
#navItems li { zoom: 1; } // for old IE
Вот fiddle для игры.
Реализация щелчка
Вот фрагмент кода для реализации прокрутки при нажатии на"item".
Должно быть немного проще сохранить идентификатор соответствующего .item
в атрибуте data-itemid
, после чего мы делаем то, что хотим: -)
for (var i=0; i<len; i++) {
// save the item id and not just the index
$('<li data-itemid="' + posts[i].id + '">' + (i+1) + '</li>')
.click(function(e) {
// get the data from data-itemid attibute
var itemid = $(this).data('itemid');
// use your scrollToPosition method
// with our 'itemid' we can get the element using the ID selector
scrollToPosition($('#' + itemid));
})
.appendTo($ul);
}
}
Я также обновил скрипку.
Несколько замечаний о вашем коде
На самом деле у вас есть два обработчика ready
в вашем коде.Одно явное вверху $(document).ready()
и $(function() {...})
.На самом деле они оба работают на событии ready
, поэтому вы должны оставить только одно.Он работает с двумя, но делает ваш код менее управляемым.
Всегда делайте так: сначала объявляйте ваши переменные с помощью var
, затем ваши локальные функции и затем делайте то, что вы должны делать.Уважая настолько, насколько это возможно, этот холст поможет вам прочитать ваш код, потому что вы ожидаете, что что-то будет там или там.
Префикс вашей переменной jquery с $
: var $posts = $('.item');
.Когда вы затем видите переменную, вы знаете, что она содержит (или должна) по ее имени.
jQuery о цепочках.
Вместо этого:
var next = $('#next');
next.click(function(e) {...});
Сделайте это:
var $next = $('#next').click(...).addClass(...).show();
var $prev = $('#prev').click(...).toggle((position > 0));