В основном я пытаюсь исправить странную привычку Jquery Tools 1.2.6 Scrollable прокручивать последний элемент, если количество элементов неравномерно делится на размер прокрутки.
Другими словами, если у меня есть виджет, содержащий 11 элементов, и он настроен на отображение 2 за раз, и каждый раз, когда нажимается следующая кнопка для прокрутки к следующим 2 элементам, когда дело доходит до одиннадцатого элемента, он будет прокручиваться, поэтому отображается одиннадцатый элемент, но с пустым пространством справа, где был бы двенадцатый элемент, если бы он был один. По сути, прокручивая следующие 2 в представлении, несмотря на отсутствие второго элемента
Здесь у меня есть jsFiddle, демонстрирующий мое исправление: http://jsfiddle.net/natepers/6kmuE/21/
Мне удалось заставить его остановиться на последнем элементе, сбросив scroll-size
на оставшееся количество элементов меньше, чем scroll-size
;
Проблема в том, что я не могу вернуться к первому элементу.
Вот javascript:
var scrollable = $(".scrollable").data("scrollable");
var size = scrollable.getConf().size;
// Catch any requests for items at the end of the list
scrollable.onSeek(function(event, index) {
var self_size = this.getSize();
// Last vsisible item
var last = index + size;
// How many to the last item
var difference = self_size - last;
// How many more than the scroll size
var remainder = index%size;
//reset scroll size for each request
scrollable.getConf().size = size;
// If next request has items but less than the scroll size
if ( remainder == 0 && difference < size && difference > 0 ) {
// Set the scroll size to th enumber of items left
scrollable.getConf().size = difference;
}
//If we're at the end
if (index++ === self_size - size) {
// Set disabled style on next button
$("a.next").addClass("disabled");
}
//If the items are not evenly divided by the scroll size we know we're at the end
if (remainder != 0) {
// Set scroll size to the what's left
scrollable.getConf().size = remainder;
}
});
// Stop scrolling at last item
scrollable.onBeforeSeek(function(event, index) {
var self_index = this.getIndex();
var self_size = this.getSize();
var last = self_index + size;
//If the last visible item is the last item
if (last == self_size) {
// If the next requested item is >= the last item do nothing
if (index > self_index) { return false; }
}
});
Спасибо за любые предложения или помощь.