Задать вопрос
Web_Mukhammad
@Web_Mukhammad
frontend-разработчик

Как решить проблему с focus()?

Добрый день.

Есть скрипт, который при нажатии на тег<a href="#mobile-search">Click</a>, плавно перебрасывает на input, у которого id совпадает с href=".".

Но когда добавляют такой код
$mobileFooterInput.focus(); //строка этого кода закомментирована в js
(устанавливает у input фокус), то перебрасывание происходит резко.

Подскажите пожалуйста, как сделать перебрасывание на input плавным?
  • Вопрос задан
  • 69 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
RAX7
@RAX7
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
monochromer
@monochromer
DIVeloper
<a href="#subscribe">enter your email</a>
<input id="subscribe" type="text">

html {
  scroll-behavior: smooth;
}

Ответ написан
Комментировать
zkrvndm
@zkrvndm
Архитектор решений
Если вам нужна плавная прокрутка до элемента используйте функцию scrollIntoView(), пример использования ниже:
document.querySelector('#mobile-search').scrollIntoView({behavior: 'smooth'});

Вместо #mobile-search можете прописать и использовать абсолютно любой CSS-селектор - например можете вписать селектор input[name="email"] и прокрутка все равно будет работать, так как она осуществляется через JavaScript.

Код для прокрутки можно привязать к нужной вам кнопке следующим образом:
<a onclick="document.querySelector('#mobile-search').scrollIntoView({behavior: 'smooth'});" href="#mobile-search">Прокрутить</a>

Атрибут onclick запускает код внутри себя, при клике на сам элемент. Соответственно, можете вместо ссылок, спокойно использовать любые другие элементы в качестве кнопок, допустим li или button.

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

Войдите, чтобы написать ответ

Похожие вопросы
Rocket Смоленск
от 80 000 до 130 000 ₽
div. Ставрополь
от 40 000 до 90 000 ₽
Wanted. Санкт-Петербург
До 220 000 ₽