scrollIntoView () работает в консоли, но не в коде сайта - PullRequest
2 голосов
/ 19 января 2020

У меня есть div, который содержит таблицу для вкладок в навигации по моему сайту. У меня есть div, настроенный на переполнение, когда в мобильном телефоне, как это:

enter image description here

Я хочу, чтобы div прокручивал к, в настоящее время скрытой, активной вкладке автоматически как это:

enter image description here

В другом вопросе SA было предложено использовать scrollIntoView. Протестировал его в консоли, и он отлично работает:

document.getElementById("active_tab").scrollIntoView({block: "end"})

Я даже использовал jQuery версию scrollintoview:

$('#active_tab').scrollintoview();

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

enter image description here

Пробовал это в Chrome и Safari. Я что-то упускаю из виду? Я не пытаюсь прокрутить всю страницу - только тот div, который скрыт переполнением. Очень странно, что он работает напрямую в консоли, но не в моем коде direct, а для JS и JQ. Насколько я знаю, нет никакого другого JS et c, связанного с этим div и c.

1 Ответ

2 голосов
/ 19 января 2020

Трудно сказать, что происходит, не видя этого в прямом эфире из первых рук (можете ли вы дать ссылку на живой сайт или сделать демо-версию jsfiddle?), Но я сделаю квалифицированное предположение;

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

Вы можете проверить, так ли это, вызвав код внутри setTimeout


Редактировать

Вызов setTimeout(fn, 0) вызовет fn немедленно, но в очереди. Поскольку это, кажется, исправило ваш isse, это означает некоторую другую задачу, то есть уже поставлена ​​в очередь , но еще не совсем запущена, но влияет на ширину навигационной панели.

Однако невозможно скажем точно, что не видя код, работающий из первых рук. Чтобы узнать себя, вы можете использовать процесс исключения :

Например, попробуйте , удалив setTimeout снова, и удалите значки и посмотрите, что произойдет. Если проблема не устранена, попробуйте добавить значки обратно и вместо них удалить номера уведомлений и т. Д. c.

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