Эффект плавной прокрутки при переходе на ссылку #якорь?
При нажатии на ссылку вида #anchor плавная прокрутка работает, при русскоязычной ссылке вроде #якорь - нет
Сайт на ВордПресс, тема астра.
Пробовал отдельным плагином jQuerySmoothScroll - та же проблема. Так понимаю, что код скролла не заточен под русский язык. Как это можно исправить?
Дополнительно:
как так? под русский язык заточен 1с, вроде бы ))
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Русский якорь сам по себе допустим, но на практике плавная прокрутка часто ломается из-за JS-плагинов, которые ищут якорь регуляркой только по латинице, или из-за несовпадения кодировки в
hrefиid. Самый надежный вариант: использовать латинские ID, а текст ссылки оставить русским.<a href="#delivery">Доставка</a> <section id="delivery"> ... </section><a href="#delivery">Доставка</a> <section id="delivery"> ... </section>
Если нужно поддержать уже существующие русские якоря, используйте JS с
decodeURIComponent()иCSS.escape():document.addEventListener('click', function (event) { const link = event.target.closest('a[href^="#"]'); if (!link) { return; } const rawHash = link.getAttribute('href'); if (!rawHash || rawHash === '#') { return; } const id = decodeURIComponent(rawHash.slice(1)); const target = document.getElementById(id); if (!target) { return; } event.preventDefault(); target.scrollIntoView({ behavior: 'smooth', block: 'start' }); });document.addEventListener('click', function (event) { const link = event.target.closest('a[href^="#"]'); if (!link) { return; } const rawHash = link.getAttribute('href'); if (!rawHash || rawHash === '#') { return; } const id = decodeURIComponent(rawHash.slice(1)); const target = document.getElementById(id); if (!target) { return; } event.preventDefault(); target.scrollIntoView({ behavior: 'smooth', block: 'start' }); });
Для современных браузеров часто достаточно CSS:
html { scroll-behavior: smooth; }
Но если тема Astra или плагин уже перехватывает клики по якорям, его скрипт может мешать. Тогда отключите лишний smooth-scroll-плагин и оставьте один контролируемый вариант. Для SEO и поддержки сайта латинские якоря обычно проще: меньше проблем с копированием ссылок, кодировкой и сторонними скриптами.
Перед внедрением на рабочем сайте проверьте решение на копии или хотя бы сделайте резервную копию изменяемого файла. После правки включите отображение ошибок, откройте проблемную страницу в обычном и приватном окне, проверьте консоль браузера и логи PHP. Если задача связана с WordPress, WooCommerce или ACF, дополнительно проверьте поведение после очистки кэша и после выхода из админки: часть ошибок видна только для незалогиненного пользователя.
Если код работает только в одном шаблоне, лучше не оставлять его разрозненно в нескольких файлах. Вынесите повторяемую логику в функцию, небольшой плагин или template part, а в шаблоне оставьте только вызов. Так проще поддерживать решение после обновления темы, плагинов и PHP.