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

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

  • Размещаем в нём кнопку и присваиваем ей собственный класс: btn-sonneto-primary

  • Фон у кнопки убираем полностью — оставляем её прозрачной.

  • Внутри кода можно настроить параметры эффекта конфетти:
  1. цвета — меняются в строке const TCDcolorStringary = '#FF3B3B, #FFD93B, #3BFF65, ...';
  2. размер частиц — редактируются в width, height и в переменной tcsizeary
  3. количество конфетти — регулируется в цикле for (let iary = 0; iary < 80; iary++)
  4. радиус разлёта — меняется в значении 200 у переменных destXary и destYary
  5. скорость анимации — регулируется в параметре duration: Math.random() * 1000 + 500

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

Модификатор добавляет анимацию вылета цветных кружков (или изображений) при клике на кнопку.

Кнопка с частицами

81508286
id:
Теги

Модификация

#

CSS

#

Кнопки

#
Скопировано!
Скопировать код
<style>
.sonnetconfettiary {
position: absolute;
width: 4px; /* ← базовый размер частицы (менять тут) */
height: 4px; /* ← базовый размер частицы */
border-radius: 50%; /* ← радиус: 50% = кружочки, 0% = квадратики */
opacity: 0;
pointer-events: none;
z-index: 1000;
}

/* ???? Если использовать картинки вместо цветов */
.sonnetconfetti-imgary {
position: absolute;
width: 20px; /* ← размер картинок */
height: 20px;
opacity: 0;
pointer-events: none;
z-index: 1000;
}
</style>

<script>
(function() {
/* ???? Цвета конфетти — список через запятую */
const TCDcolorStringary = '#FF3B3B, #FFD93B, #3BFF65, #3BD9FF, #A93BFF, #FF6B9A';
const TCDcolorsary = TCDcolorStringary.split(',').map(color => color.trim());

const TCDuseary = false; // true = использовать картинки, false = использовать цвета
const TCDrotary = false; // true = добавлять вращение
const TCDimgStringary = '#000000'; // сюда можно подставить ссылки на картинки
const TCDimgary = TCDimgStringary.split(',').map(url => url.trim());

/* ???? Селектор кнопки — на какую кнопку вешаем эффект */
document.querySelectorAll('.btn-sonneto-primary').forEach(button => {
button.addEventListener('click', function(e) {
const buttonRectary = button.getBoundingClientRect();
const buttonXary = buttonRectary.left + window.scrollX;
const buttonYary = buttonRectary.top + window.scrollY;
const ticlickXary = e.clientX - buttonRectary.left;
const ticlickYary = e.clientY - buttonRectary.top;

/* ???? Количество частиц (80) — можно уменьшить или увеличить */
for (let iary = 0; iary < 80; iary++) {
createConfettiary(buttonXary + ticlickXary, buttonYary + ticlickYary, TCDuseary, TCDrotary);
}
});
});

/* ✨ Создание частицы */
function createConfettiary(x, y, TCDuseary, TCDrotary) {
let sonnetconfettiary;

if (TCDuseary) {
/* ???? Картинка */
sonnetconfettiary = document.createElement('img');
sonnetconfettiary.src = TiCodegetRandomImageary();
sonnetconfettiary.classList.add('sonnetconfetti-imgary');
} else {
/* ???? Цветной кружочек */
sonnetconfettiary = document.createElement('div');
sonnetconfettiary.classList.add('sonnetconfettiary');
sonnetconfettiary.style.backgroundColor = TiCodegetRandomColorary();
}

document.body.appendChild(sonnetconfettiary);

/* ???? Случайный размер частицы */
const tcsizeary = TCDuseary ? 1 : Math.random() * 1 + 5;
/* ↑ "5" = минимальный размер кружочка.
Можно увеличить, например 10–15, если хочешь крупные конфетти. */

sonnetconfettiary.style.width = `${tcsizeary}px`;
sonnetconfettiary.style.height = `${tcsizeary}px`;
sonnetconfettiary.style.left = `${x - tcsizeary / 2}px`;
sonnetconfettiary.style.top = `${y - tcsizeary / 2}px`;

/* ???? Диапазон разлёта (200px) — меняй для большего радиуса */
const destXary = (Math.random() - 0.5) * 200;
const destYary = (Math.random() - 0.5) * 200;

/* ???? Анимация движения */
const keyframesary = [
{ transform: `translate(0, 0)${TCDrotary ? ' rotate(0deg)' : ''}`, opacity: 1 },
{ transform: `translate(${destXary}px, ${destYary}px)${TCDrotary ? ` rotate(${Math.random() * 360}deg)` : ''}`, opacity: 0 }
];

const animationtiary = sonnetconfettiary.animate(keyframesary, {
duration: Math.random() * 1000 + 500, /* ⏱ скорость (500–1500 мс) */
easing: 'ease-out'
});

animationtiary.onfinish = () => sonnetconfettiary.remove();
}

/* ???? Случайный цвет */
function TiCodegetRandomColorary() {
return TCDcolorsary[Math.floor(Math.random() * TCDcolorsary.length)];
}

/* ???? Случайная картинка */
function TiCodegetRandomImageary() {
return TCDimgary[Math.floor(Math.random() * TCDimgary.length)];
}
})();
</script>

<script>
/* ???? Служебный скрипт (можно не трогать) */
(function TCDupdType() {
const TildahtmlBclok = document.currentScript;
if


ildahtmlBclok) {
const recordElement = TildahtmlBclok.closest('.r[data-record-type]');
if (recordElement) {
recordElement.setAttribute('data-record-type', Math.random().toString(36).substring(2, 12));
}
}
})();
</script>(T
Базовые настройки
  • Эффект добавляет анимацию вылета цветных кружков (или изображений) при клике на кнопку с классом btn-sonneto-primary

  • Цвета конфетти задаются в переменной TCDcolorStringary (несколько цветов через запятую)

  • Размер частиц можно изменить в стилях sonnetconfettiary (width, height) или в скрипте через параметр tcsizeary

  • Радиус скругления (border-radius) управляет формой: 50% = кружки, 0% = квадраты

  • Количество частиц задаётся в цикле for (let iary = 0; iary < 80; iary++) — число 80 можно уменьшить или увеличить

  • Радиус разлёта определяется в const destXary и const destYary — по умолчанию 200px

  • Длительность анимации задаётся в duration: Math.random() * 1000 + 500 (от 500 до 1500 мс)

  • Если включить TCDrotary = true, частицы будут дополнительно вращаться

  • Если включить TCDuseary = true, вместо цветных кружков будут использоваться картинки из TCDimgStringary

  • Эффект работает с любыми кнопками, где указан класс btn-sonneto-primary, поэтому можно применять к разным CTA-элементам
Технические советы
  • Если на странице много кнопок с этим эффектом, количество частиц лучше ограничить (например, 30–40), чтобы не нагружать браузер

  • Для использования картинок вместо цветов указывай ссылки на изображения в TCDimgStringary, разделяя их запятыми. Рекомендуется использовать PNG или SVG с прозрачным фоном

  • При больших размерах частиц (20px и больше) может появляться «рваная» анимация в Safari — лучше тестировать отдельно

  • Если конфетти перекрывает элементы интерфейса, можно уменьшить z-index у sonnetconfettiary

  • Эффект не блокирует работу кнопки: событие клика выполняется штатно. Если нужно отключить редирект или действие по кнопке, обработчик можно дополнить e.preventDefault()

  • Можно комбинировать эффект с hover-анимациями самой кнопки (цвет фона, текста и обводки), они не конфликтуют
Подключение скриптов

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

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

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