Задержать выполнение javascript? Не знаю, что мне делать в этом случае

avatar
jasonhe
1 июля 2021 в 19:55
50
1
0

В принципе, я использую аккордеон в Bootstrap 5, но поскольку у меня много текста внутри тела аккордеона, закрытие первого при открытии второго занимает больше времени. Я хочу, чтобы он, возможно, задержал выполнение функции JS, чтобы он дождался полного закрытия первого заголовка аккордеона, а затем запустил функцию.

Примерно так это выглядит: https://prnt.sc/17wa079 при нажатии на заголовок 1 у меня есть onclick=goToHeader1, и это в основном просто использование scrollIntoView(), так что заголовок 1 находится в самом верху экрана. Если вы не закрываете заголовок 1 перед открытием заголовка 2, все это странно и показывает только нижнюю часть заголовка 2 вверху (где он должен показывать фактически «Заголовок 2», он показывает нижнюю часть тела заголовка 2). ) или вообще не показывает заголовок 2.

Итак, я подумал, что если бы вы могли отложить onclick="goToHeading2() вы можете подождать, пока заголовок 1 полностью закроется (дайте ему 1 или 2 секунды), затем выполните функцию goToHeading2(), и тогда это исправит это.

Просто не понял, как задержать его на 1 или 2 секунды, поэтому, если кто-нибудь может подсказать, как это сделать, было бы здорово. Или, если у кого-то есть лучший способ сделать это, это было бы еще лучше.

Источник
Nisala
1 июля 2021 в 19:57
1

onclick="setTimeout(goToHeading2, 2000)" может сработать, если я правильно понимаю ваш вопрос? w3schools.com/jsref/met_win_settimeout.asp

Ответы (1)

avatar
Shubham Kumar
1 июля 2021 в 20:54
0

Я думаю, что если вы хотите отложить свой код js, вы можете сделать это, используя :

await new Promise( resolve => setTimeout( resolve, 1000 ));
// this part of your code will be executed after 1 sec

Но я не думаю, что это хорошая идея, так как время, необходимое для запуска предыдущей функции, будет разным на разных устройствах.

Я думаю, что вы вызываете Element.scrollIntoView для полного аккордеона, будет лучше, если вы вызовете scrollIntoView только для блока accordion-header.

Кроме того, у scrollIntoView есть некоторые параметры, такие как alignToTop, которые можно использовать для получения лучших результатов.

element.scrollIntoView();
element.scrollIntoView(alignToTop); // Boolean parameter
element.scrollIntoView(scrollIntoViewOptions); // Object parameter

В вашем случае element.scrollIntoView(true); даст наилучшие результаты. Вы можете прочитать больше об этом здесь.