Как заставить scrollIntoView() работать при первом нажатии (Angular 6)?

Предыдущее решение аналогичного вопроса StackOverflow сосредоточено на Jquery, и для angular 6/Javascript не найдено возможного решения.

В настоящее время я использую scrollIntoView() с плавным поведением для прокрутки к динамически созданному div с использованием выхода маршрутизатора, но он прокручивается только после второго щелчка, есть ли что-то не так в моем коде или его можно достичь в первый клик ?

HTML:

<div>
  <mat-card-title (click) = "articleNavigation(documents._id)">{{documents.title}}</mat-card-title>
</div>
<div #test style = "width:50%; margin-left: auto; margin-right: auto;">
  <router-outlet></router-outlet>
</div>

тс:

articleNavigation(documentId) {
 this.router.navigate(['./document' , documentId], { relativeTo: this.route });
 this.test.nativeElement.scrollIntoView({behavior: 'smooth'});
}

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

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
1 139
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуй это :

setTimeout(() => {
    this.test.nativeElement.scrollIntoView({behavior: 'smooth'});
});

После прокрутки есть ли способ прокрутить блокировку этого div? Пробовал overflow: hidden, у меня не сработало.

Madhavan Sundararaj 26.02.2019 01:22

Вы можете попробовать это: ScrollLock

Cyril 26.02.2019 01:44

Или это: ссылка на сайт

Cyril 26.02.2019 02:32

Не работает, в любом случае, можно ли ускорить прокрутку в scrollIntoView?

Madhavan Sundararaj 26.02.2019 03:48

Другие вопросы по теме