Странное поведение scrollTop с .offset (). Top - PullRequest
0 голосов
/ 25 сентября 2019

Я использую OnsenUI framework, но в основном это просто HTML-код, который работает в браузере так же, как и в мобильном.

Разметка выглядит так:

<ons-page id="main-page">
    <div class="page__content">

        <div class="container">

            <div class="cat-header-tab-001">Title</div>
            <div class="tab-001">Content</div>

            <div class="cat-header-tab-002">Title</div>
            <div class="tab-002">Content</div>

            <div class="cat-header-tab-003">Title</div>
            <div class="tab-003">Content</div>
        </div>
    </div>
</ons-page>

page__content - это прокручиваемый контейнер.

Когда я нажимаю на ссылку (липкий заголовок), которая должна прокручиваться кконкретный div, он отлично работает с :

document.getElementById('cat-header-'+tab_id).scrollIntoView();

Проблема в том, что он не плавный, и я не могу дать ему смещение с scrollIntoView().

Поэтому я попытался использовать:

$('#main-page .page__content').animate({
    scrollTop: $('#cat-header-'+tab_id).offset().top
});

И этот также работает , но есть странная проблема.Если я нажимаю на ссылку один раз, она нормально прокручивается.Если я снова нажму на ссылки, они прокрутятся в другое место на странице.Если я щелкну в третий раз, он прокрутится вниз.Я предполагаю, что он каким-то образом вычисляет смещение каждый раз, когда я нажимаю, и поскольку page__content прокручивает, он вычисляет оттуда снова неверно.

Есть ли способ, чтобы предотвратить неправильный переход при повторном нажатии на ссылку?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...