Я пытаюсь настроить пользовательский интерфейс приложения и, по существу, иметь два списка (listA и listB)... list A имеет гиперссылки, которые при щелчке должны автоматически прокручивать listB в конкретный соответствующий элемент в спискеB. На данный момент я бы решил, что он просто прокручивается до TOP EDGE элемента, но в идеале он будет прокручиваться, чтобы элемент находился в центре (по вертикали) спискаB.
heres скрипка, которая показывает, что я пытался, и она работает при первом щелчке, но любой последующий щелчок создает неустойчивые результаты:
эксперимент/демонстрация скрипки
Я считаю, что моя проблема связана с этой строкой кода в примере скрипта - где Im пытается выполнить прокрутку:
$('#listingB').animate({
scrollTop: (($('#listingB_item_' + $(this).data('num')).offset().top - $("#listingB").offset().top) )
}, 'slow');
как я могу сделать эту работу так, чтобы каждый щелчок приводил к прокрутке listB к соответствующему элементу?
JSFiddle: рабочий код
ваша первая проблема, переходя сверху на второй щелчок, потому что вам нужно отменить поведение, если его второй щелчок в строке. и вам также нужно добавить $("#listingB").scrollTop()
значения анимации, $("#listingB").scrollTop()
прокруткой в B, приводит к тому, что ваш расчет не будет работать должным образом. laslty, если вам нужно показать центр элемента, вы должны вычислить его высоту и добавить половину этого значения в scrollTop. вот как вы должны это сделать:
var i;
var clicked;
for(var i = 0; i < 200; i++) {
$('#listingB').append('<div id="listingB_item_' + i +'" class="items" data-num="'+ i +'"></div>');
$('#listingB_item_' + i).html('item number ' + i);
$('#listingA').append('<div id="listingA_item_' + i +'" class="items1" data-num="'+ i +'"></div>');
$('#listingA_item_' + i).html('item number ' + i);
}
$('.items1').click(
function() {
if($(this).data('num') != clicked)
{
clicked = $(this).data('num');
$('#listingB').animate({scrollTop: (($('#listingB_item_' + $(this).data('num')).offset().top - $("#listingB").offset().top) + $("#listingB").scrollTop() + ((parseInt($(".items").css("padding-top")) + parseInt($(".items").css("height"))) / 2) + 'px' )}, 'slow');
}
}
);
Используйте #IdOfDivYouWantToScrollTo
с параметром href, установленным на #IdOfDivYouWantToScrollTo
<a href="#yourDivId">This link will scroll to the div</a>
<div id="yourDivId">Hello</div>