Pro
Setup
Info
Info
Включено в подписку
Настройки
[
Написать в поддержку
Telegram: @sonneto_support
Кастомизация
]
The wave effect
The wave effect
Setup
Info
Info
<style>

.btn-sonneto-primary .tn-atom, .btn-sonneto-primary .tn-atom a {
--duration: .7s;
--move-hover: -8px;
box-sizing: border-box;
-webkit-tap-highlight-color: transparent;
-webkit-appearance: none;
transition: background-color 0.3s ease-in
}


.btn-sonneto-primary .tn-atom div, .btn-sonneto-primary .tn-atom a div {
display: flex;
justify-content: center
}

.btn-sonneto-primary .tn-atom div span, .btn-sonneto-primary .tn-atom a div span {
display: block;
min-width: 5px;
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
font-style: normal
}

.btn-sonneto-primary .tn-atom:hover, .btn-sonneto-primary .tn-atom:hover {
--y: var(--move-hover);
--shadow: var(--shadow-hover);
--move: -3px
}

.btn-sonneto-primary .tn-atom:hover span, .btn-sonneto-primary .tn-atom:hover span {
-webkit-animation: move var(--duration) linear var(--d) infinite;
animation: move var(--duration) linear var(--d) infinite
}

@-webkit-keyframes move {
40% {
transform: translateY(var(--move))
}
}

@keyframes move {
40% {
transform: translateY(var(--move))
}
}

.t-col-flex {
display: flex
}
</style>

<script>
window.onload = function() {
function processElements(selector) {
let elements = document.querySelectorAll(selector);
elements.forEach(element => {
let originalText = element.textContent.trim();
let wrappedText = '<div><span>' + originalText.split('').join('</span><span>') + '</span></div>';
element.innerHTML = wrappedText;
});

let delay = 0.03;

elements.forEach(el => {
let spanElements = el.querySelectorAll('div span');
spanElements.forEach((span, index) => {
span.style.setProperty("--d", (delay * (index + 1)) + "s");
});
});
}

// элементы с кнопкой
processElements('.btn-sonneto-primary .tn-atom');

// текстовые элементы с ссылкой
processElements('.btn-sonneto-primary .tn-atom a');
};

</script>
Настройки модификации

  • Открываем Zero Block и заходим в режим редактирования.

  • Вставляем кнопку на страницу и назначаем ей класс: btn-sonneto-primary

  • Далее добавляем блок T123 и вставляем в него подготовленный код.

Модификатор для кнопок, который добавляет эффект волны.

Эффект волны для кнопки

81512056
id:
Теги

Модификация

#

CSS

#

Кнопки

#
Скопировано!
Скопировать код
Подключение скриптов
Базовые настройки
  • Для корректной работы эффекта каждую букву текста кнопки оборачивает <span> через JS, поэтому HTML текста кнопки не должен содержать вложенных элементов.

  • Анимация букв запускается при наведении (hover) на элемент .tn-atom или ссылку внутри него.

  • Используется CSS keyframes move, который сдвигает буквы вверх (translateY(var(--move))) в 40% ключевого кадра.

  • Задержка для каждой буквы задаётся индивидуально через переменную CSS --d, чтобы создать эффект волны.

  • Эффект корректно работает на кнопках и текстовых ссылках меню (.tn-atom a).

  • Если текст кнопки многострочный, важно проверять корректное отображение анимации, так как каждое <span> создаётся отдельно.

  • При большом количестве кнопок с анимацией может быть нагрузка на рендеринг → оптимально использовать для ключевых элементов.

  • Для правильного отображения кнопки важно, чтобы родительский блок имел display: flex (например, класс .t-col-flex).
Технические советы
  • Если в кнопке используется многострочный текст, важно проверять корректность позиционирования стрелки (top: 50% + transform)

  • В Safari и Firefox возможны различия в сглаживании анимации заливки — лучше тестировать на разных браузерах

  • Если кнопка используется на тёмном фоне, стоит изменить цвета стрелки (border-top/right) и текста при ховере, чтобы сохранить читаемость

  • При большом количестве кнопок с такой анимацией может быть нагрузка из-за JS-вычислений высоты → лучше один раз задать фиксированное значение –btn03h, если дизайн допускает

Для корректной работы модификации необходимо, чтобы на странице была подключена библиотека jQuery, так как скрипт использует $(document).ready() и .each().

Информация о кастомизации кода доступна только в веб-версии сайта.

Сделать это можно в разделе: Настройки сайта - Ещё - Подключить jQuery на страницах сайта.
В Zero Block скрипты рекомендуется вставлять только после полной загрузки контента страницы, чтобы все элементы блока были доступны для обработки.
Текст скопирован в буфер обмена!
Текст скопирован в буфер обмена!