Сайты
Чат-боты
Приложения
Tilda
на Tilda
Липкий (sticky) блок

Как сделать интерактивную карту на Tilda

Видеоинструкция (для тех, кому неудобно работать с текстом)
Как сделать липкий (sticky) блок в Tilda: подробное руководство
Иногда в дизайне сайта нужно, чтобы часть контента оставалась на виду, пока пользователь прокручивает страницу. Это так называемый липкий (sticky) блок. Чаще всего его используют для фиксации заголовка, призыва к действию или ключевой информации рядом с прокручивающимся списком преимуществ, галереей или этапами работы.

В этой инструкции я подробно и по шагам расскажу, как реализовать такой функциональный и стильный элемент на платформе Tilda.

Принцип работы и структура блока (фото )
Прежде чем переходить к настройкам, важно правильно выстроить структуру. Важное замечание для мобильной версии.
Если вы не уверены в своих дизайнерских навыках, для мобильной версии лучше отключить фиксацию и расположить все элементы друг за другом в один столбец.

  1. Добавьте на страницу новый Zero-блок и очистите его стандартное содержимое.
  2. Разделите блок на две условные части:
  • Левая колонка (фиксированная): Здесь будут элементы, которые останутся на месте при прокрутке. Например, главный заголовок, описание и кнопка.
  • Правая колонка (прокручиваемая): Здесь разместите контент, который будет скроллиться. Это могут быть карточки с преимуществами, изображения, отзывы или любой другой список.
  • Мою версию можно увидеть на изображении 1.6.
Вся работа в моем примере ведётся по настройке фиксации ведется исключительно с элементами в левой колонке . На элементы в правой части никакие дополнительные настройки применять не нужно.

Пошаговая инструкция по настройке фиксации (фото)
Шаг 1: Активация фиксации для элементов
Начнем с первого элемента, который нужно зафиксировать (например, с заголовка).
  1. Кликните на элемент (заголовок).
  2. В открывшейся панели настроек перейдите в раздел «Анимация» → «Базовая анимация».
  3. Найдите параметр «Фиксация» (в английской версии — Fixing).
  4. В выпадающем меню выберите опцию, к примеру,  «Поверху окна» (или Top of screen). Можно выбрать любую, но покажу на примере данной настройки.
После выбора типа фиксации станут активны два дополнительных параметра: «Смещение триггера» и «Расстояние». Именно они отвечают за точное поведение элемента при прокрутке. (Изображение 1.7)
Расчет и настройка «Смещения триггера»
Смещение триггера — это расстояние от верхней границы экрана, при достижении которого элемент «прилипнет» и начнет фиксированно двигаться вместе со скроллом.
Чтобы его рассчитать, нам нужно знать, на каком расстоянии от верха экрана должен находиться элемент в момент фиксации.
Как это сделать на практике:
  1. Включите горизонтальную направляющую в редакторе Tilda (это поможет точно измерить расстояния) (фото ).
  2. Определите позицию вашего элемента по оси Y. Допустим, ваш заголовок находится на отметке 311 пикселей.
  3. Решите, на каком расстоянии от верха экрана он должен зафиксироваться. Например, вы хотите, чтобы это произошло, когда до верха экрана останется 60 пикселей.
  4. Рассчитайте смещение триггера: Позиция элемента Y (311px) - Желаемое расстояние от верха (60px) = 251px.
  5. Введите полученное значение (251) в поле «Смещение триггера».
Повторите эту операцию для всех фиксируемых элементов, учитывая их исходное положение друг относительно друга.
  • Пример для второго элемента (описание): Если описание находится на 100px ниже заголовка (на отметке 411px), его смещение триггера будет: 411px - 60px = 351px.
  • Пример для третьего элемента (кнопка): Если кнопка на отметке 602px, ее смещение триггера: 602px - 60px = 542px
Настройка параметра «Расстояние»
Параметр «Расстояние» определяет, как далеко будет «ехать» ваш фиксированный элемент вниз при прокрутке, после чего он перестанет быть фиксированным и останется на месте.
  1. Решите, в какой точке страницы должна закончиться анимация фиксации. Например, после прокрутки на 2600 пикселей.
  2. Для каждого из фиксированных элементов (заголовка, описания, кнопки) установите в поле «Расстояние» одно и то же значение — 2600.
  • Важно: Для всех трех элементов расстояние должно быть одинаковым, чтобы они двигались и останавливались синхронно, как единая группа.
Проверка результата
После того как вы настроили все параметры, обязательно сохраните проект и опубликуйте его. Откройте страницу в новом окне и прокрутите ее, чтобы убедиться, что:
  1. Элементы левой колонки фиксируются в нужный момент.
  2. Они плавно движутся вместе со скроллом.
  3. Анимация фиксации корректно завершается в заданной точке (в нашем примере — после 2600px).
Важное замечание для мобильной версии
На мобильных устройствах с их ограниченным экраном сложные sticky-блоки могут работать нестабильно или плохо выглядеть. Если вы не уверены в своих дизайнерских навыках, для мобильной версии лучше отключить фиксацию и расположить все элементы друг за другом в один столбец.

На этом все, ниже представлена дополнительная модификация, которую необязательно использовать.

Часть 2. (Необязательно) Динамическая нумерация разделов при скролле: оживляем контент на Tilda
В предыдущей части статьи мы разбирали, как создавать простой sticky-блоки на Tilda. Сейчас пойдем дальше и добавим интерактивности — сделаем так, чтобы заголовок менялся в зависимости от того, какой раздел сайта вы просматриваете.

Представьте: вы скроллите Sticky блок, переходите от элемента к ,элементу, а, к примеру, в нашей заголовке красиво меняются цифры — "1", "2", "3" и так далее. Это не только выглядит современно, но и помогает пользователю ориентироваться в структуре вашего контента. Я выбрал для примера заголовки: "/01", "/02", "/03", "/04", "/05" (более подробно в видео)
Мы добавим на страницу специальный код (изображения 2.1 - 2.2).

<script>
(function(){

  const TRIGGER_OFFSET = 60;
  const TOTAL_PATH     = 5000; // общая длина пути (px)
  const STEPS = [
    { px:   0,  val: "/01" },
    { px: 800,  val: "/02" },
    { px: 1800, val: "/03" },
    { px: 2800, val: "/04" },
    { px: 3800, val: "/05" },
  ];
  function isDesktop() {
    return window.innerWidth >= 1200;
  }
  function pickVal(scrolled){
    let v = STEPS[0].val;
    for (let i = 0; i < STEPS.length; i++){
      if (scrolled >= STEPS[i].px) v = STEPS[i].val; else break;
    }
    return v;
  }

  function init(){
    // Можно вешать .count на .tn-elem ИЛИ на .tn-atom — скрипт сам найдёт текстовый узел
    const nodes = Array.from(document.querySelectorAll('.count')).map(root=>{
      const atom = root.querySelector('.tn-atom') || root;
      return { root, atom, startY: 0, lastVal: null };
    });
    if (!nodes.length) return;

    function recomputeStart(){
      nodes.forEach(it=>{
        // Калибруем ноль от САМОГО элемента-счётчика
        const rect  = it.root.getBoundingClientRect();
        const absTop = rect.top + window.scrollY;     // абсолютный top элемента в документе
        it.startY = absTop - TRIGGER_OFFSET;          // момент, когда он «прилипнет» к top+offset
      });
    }

    let ticking = false;
    function onScroll(){
      if (ticking) return;
      ticking = true;
      requestAnimationFrame(()=>{
        const y = window.scrollY;
        nodes.forEach(it=>{
          const scrolled = Math.max(0, Math.min(TOTAL_PATH, y - it.startY));
          const val = pickVal(scrolled);
          if (val !== it.lastVal){
            it.atom.textContent = val;
            it.lastVal = val;
          }
        });
        ticking = false;
      });
    }

    recomputeStart();
    window.addEventListener('scroll', onScroll, { passive: true });
    window.addEventListener('resize', () => { recomputeStart(); onScroll(); });

    onScroll();
    // На случай, если Tilda поменяет размеры/позиции после загрузки
    setTimeout(()=>{ recomputeStart(); onScroll(); }, 300);
  }

  if (document.readyState === 'complete' || document.readyState === 'interactive'){
    init();
  } else {
    document.addEventListener('DOMContentLoaded', init);
  }
})();
</script>
Задаем динамическому элементу (заголовку) класс "count" (изображение 2.3)
  • Строка "const TRIGGER_OFFSET = 60;" - Начало срабатывания в px. Отсчёт, когда блок в 60px от верха.Чем меньше число — тем раньше начнётся анимация.
  • В блоке STEPS настройка расстояния изменения элемента (заголовок) и новое значение. На нашем примере на расстоянии 800px от верха - заголовок становится " /02" .
Данный код не является универсальным решением "на все случаи жизни". Скорее всего, вам потребуется адаптировать его под конкретную структуру вашего сайта. Особое внимание уделите расстояниям в блоке STEPS и значениям заголовков — замените их на те, которые соответствуют вашим разделам.Не стесняйтесь экспериментировать с настройками! Попробуйте разные значения прокрутки и форматы надписей, чтобы найти оптимальный вариант для вашего контента. Помните, что идеальные параметры зависят от высоты ваших разделов и общей композиции блока.