Задать вопрос директору
Telegram
VK
Звонок

Первый экран для сайта поставщика промышленного оборудования

Главный экран поставщика: оффер про подбор и отгрузку со склада, ссылка на подбор по параметрам, три цифры со счётчиком и панель с лентой отгрузок за день.

Живое демо — блок работает прямо здесь

Код блока

<section class="vbpp">
  <div class="vbpp-wrap">
    <div class="vbpp-main">
      <span class="vbpp-tag">Поставки промышленного оборудования с 2011 года</span>
      <h1 class="vbpp-h1">Подберём оборудование под задачу и <span>отгрузим со склада в день оплаты</span></h1>
      <p class="vbpp-lead">Компрессорное, насосное, подъёмное и складское оборудование, запасные части и расходные материалы. Работаем по договору и счёту, собираем партию с одного склада и передаём перевозчику в тот же день.</p>

      <div class="vbpp-acts">
        <a class="vbpp-btn" href="#podbor">Подобрать по параметрам</a>
        <a class="vbpp-link" href="#usloviya">Условия отгрузки и оплаты</a>
      </div>

      <ul class="vbpp-nums">
        <li><b data-num="12400">0</b><span>позиций на складе: оборудование, запчасти, расходные материалы</span></li>
        <li><b data-num="860">0</b><span>отгрузок в месяц по России и Казахстану</span></li>
        <li><b data-num="14">0</b><span>лет поставляем оборудование для производств и складов</span></li>
      </ul>
    </div>

    <aside class="vbpp-board">
      <div class="vbpp-board__top">
        <h2 class="vbpp-board__ttl">Отгрузки за сегодня</h2>
        <span class="vbpp-board__live"><i aria-hidden="true"></i>склад на связи</span>
      </div>

      <div class="vbpp-cols"><span>Позиция</span><span>Партия</span><span>Куда</span></div>
      <ul class="vbpp-feed" id="vbpp-feed"></ul>

      <p class="vbpp-note">Счёт закрыт до 15:00 по московскому времени, партия уезжает в этот же день. Оплата позже - отгрузка утром следующего рабочего дня.</p>
    </aside>
  </div>
</section>

<style>
.vbpp, .vbpp *, .vbpp *::before, .vbpp *::after { box-sizing: border-box; }
.vbpp {
  --acc: #e0721f; --acc-dark: #bd5c13; --bg: #12171c; --panel: #1a2128; --line: #2b343d;
  --ink: #eef2f5; --muted: #93a1ad; --ok: #6fbf73;
  --f: var(--t-text-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif);
  --fh: var(--t-headline-font, var(--f));
  background: var(--bg); color: var(--ink); font-family: var(--f); padding: clamp(36px, 5vw, 84px) 20px;
}
.vbpp-wrap { max-width: 1240px; margin: 0 auto; padding: 0 clamp(0px, 2vw, 40px);
  display: grid; grid-template-columns: minmax(0, 1.08fr) minmax(0, .92fr); gap: clamp(26px, 4vw, 54px); align-items: start; }
.vbpp-tag { display: inline-block; font-size: 12.5px; letter-spacing: .04em; text-transform: uppercase;
  color: var(--acc); border: 1px solid var(--line); border-radius: 999px; padding: 7px 15px; margin-bottom: 20px; }
.vbpp-h1 { font-family: var(--fh); font-size: clamp(29px, 4.1vw, 52px); line-height: 1.08; font-weight: 700; letter-spacing: -.022em; margin: 0 0 18px; }
.vbpp-h1 span { color: var(--acc); }
.vbpp-lead { font-size: clamp(15.5px, 1.3vw, 18px); line-height: 1.62; color: var(--muted); margin: 0 0 28px; max-width: 33em; }

.vbpp-acts { display: flex; flex-wrap: wrap; align-items: center; gap: 12px 22px; margin-bottom: 34px; }
.vbpp-btn, .vbpp-btn:link, .vbpp-btn:visited, .vbpp-btn:active, .vbpp-btn:focus { display: inline-flex; align-items: center; justify-content: center;
  min-height: 56px; padding: 0 30px; border-radius: 10px; font-size: 16px; font-weight: 600;
  background: var(--acc); color: #14181c !important; text-decoration: none !important; transition: background .2s ease; }
.vbpp-btn:hover { background: var(--acc-dark); color: #fff !important; }
.vbpp-link, .vbpp-link:link, .vbpp-link:visited, .vbpp-link:active, .vbpp-link:focus { font-size: 15px; color: var(--ink) !important;
  text-decoration: none !important; border-bottom: 1px solid var(--line); padding-bottom: 2px; }
.vbpp-link:hover { border-bottom-color: var(--acc); }

.vbpp-nums { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); gap: 20px; }
.vbpp-nums li { border-top: 2px solid var(--acc); padding-top: 14px; }
.vbpp-nums b { display: block; font-family: var(--fh); font-size: clamp(27px, 3.2vw, 38px); line-height: 1; font-weight: 700; letter-spacing: -.02em; }
.vbpp-nums span { display: block; font-size: 13px; line-height: 1.5; color: var(--muted); margin-top: 8px; }

.vbpp-board { background: var(--panel); border: 1px solid var(--line); border-radius: 18px; padding: clamp(20px, 2.4vw, 28px); }
.vbpp-board__top { display: flex; align-items: center; gap: 12px; margin-bottom: 18px; }
.vbpp-board__ttl { font-family: var(--fh); font-size: 19px; line-height: 1.25; font-weight: 700; margin: 0; }
.vbpp-board__live { margin-left: auto; display: inline-flex; align-items: center; gap: 7px; font-size: 12px; color: var(--muted); }
.vbpp-board__live i { width: 8px; height: 8px; border-radius: 50%; background: var(--ok); animation: vbpp-blink 2.2s ease-in-out infinite; }
@keyframes vbpp-blink { 0%, 100% { opacity: 1; } 50% { opacity: .25; } }

.vbpp-cols, .vbpp-row { display: grid; grid-template-columns: minmax(0, 1fr) 74px 96px; gap: 10px; align-items: center; }
.vbpp-cols { font-size: 11px; letter-spacing: .05em; text-transform: uppercase; color: #6d7b88; padding: 0 0 9px; border-bottom: 1px solid var(--line); }
.vbpp-cols span:nth-child(2), .vbpp-cols span:nth-child(3) { text-align: right; }
.vbpp-feed { list-style: none; margin: 0; padding: 0; min-height: 244px; }
.vbpp-row { padding: 13px 0; border-bottom: 1px solid var(--line); font-size: 14px; animation: vbpp-in .4s cubic-bezier(.22,1,.36,1); }
.vbpp-row__d { display: block; font-size: 11.5px; color: #6d7b88; margin-top: 3px; }
.vbpp-row__q, .vbpp-row__c { text-align: right; font-size: 13px; color: var(--muted); }
.vbpp-row__s { display: block; font-weight: 600; font-size: 11px; letter-spacing: .03em; color: var(--acc); margin-top: 3px; }
.vbpp-row--done .vbpp-row__s { color: var(--ok); }
@keyframes vbpp-in { from { opacity: 0; transform: translateY(-10px); } to { opacity: 1; transform: none; } }
.vbpp-note { margin: 16px 0 0; font-size: 12px; line-height: 1.55; color: #6d7b88; }

@media (max-width: 940px) { .vbpp-wrap { grid-template-columns: minmax(0, 1fr); } }
@media (max-width: 560px) {
  .vbpp-h1 { font-size: clamp(25px, 7vw, 33px); }
  .vbpp-cols, .vbpp-row { grid-template-columns: minmax(0, 1fr) 62px 84px; }
}
@media (prefers-reduced-motion: reduce) { .vbpp *, .vbpp *::before { animation: none !important; transition: none !important; } }
</style>

<script>
(function () {
  /* ЛЕНТА ОТГРУЗОК: наименование, партия, город, состояние */
  var FEED = [
    { n: 'Компрессор винтовой 7,5 кВт', d: 'с ресивером 500 л', q: '2 шт', c: 'Казань', s: 'отгружено' },
    { n: 'Насос консольный 45 куб. м/ч', d: 'с рамой и муфтой', q: '4 шт', c: 'Пермь', s: 'в сборке' },
    { n: 'Стеллаж паллетный', d: 'секция 3 яруса', q: '40 сек', c: 'Тверь', s: 'отгружено' },
    { n: 'Полуавтомат сварочный 350 А', d: 'с горелкой 3 м', q: '6 шт', c: 'Ростов', s: 'отгружено' },
    { n: 'Подшипники по каталогу', d: 'сборная партия', q: '320 шт', c: 'Липецк', s: 'в сборке' },
    { n: 'Таль электрическая 3 т', d: 'высота подъёма 12 м', q: '1 шт', c: 'Омск', s: 'отгружено' },
    { n: 'Тележка гидравлическая 2,5 т', d: 'вилы 1150 мм', q: '12 шт', c: 'Иваново', s: 'отгружено' },
    { n: 'Фильтроэлементы к компрессорам', d: 'годовой запас', q: '96 шт', c: 'Уфа', s: 'в сборке' }
  ];
  var VISIBLE = 5, PAUSE = 2800;

  var roots = document.querySelectorAll('.vbpp');
  for (var i = 0; i < roots.length; i++) init(roots[i]);

  function init(root) {
    if (root.__vb) return; root.__vb = 1;
    var feed = root.querySelector('#vbpp-feed');
    var nums = root.querySelectorAll('.vbpp-nums b');
    var pos = 0, timer = null;
    var calm = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;

    function fmt(n) { return String(n).replace(/\B(?=(\d{3})+(?!\d))/g, ' '); }

    function rowHtml(it) {
      var done = it.s === 'отгружено';
      return '<li class="vbpp-row' + (done ? ' vbpp-row--done' : '') + '">' +
        '<span class="vbpp-row__n">' + it.n + '<span class="vbpp-row__d">' + it.d + '<\/span><\/span>' +
        '<span class="vbpp-row__q">' + it.q + '<\/span>' +
        '<span class="vbpp-row__c">' + it.c + '<span class="vbpp-row__s">' + it.s + '<\/span><\/span><\/li>';
    }

    function paint() {
      var html = '';
      for (var k = 0; k < VISIBLE; k++) html += rowHtml(FEED[(pos + k) % FEED.length]);
      feed.innerHTML = html;
    }

    function step() { pos = (pos + 1) % FEED.length; paint(); }
    function start() { if (!timer && !calm) timer = setInterval(step, PAUSE); }
    function stop() { if (timer) { clearInterval(timer); timer = null; } }

    paint();
    feed.addEventListener('mouseenter', stop);
    feed.addEventListener('mouseleave', start);
    start();

    function count(el) {
      var to = +el.getAttribute('data-num') || 0, t0 = 0;
      if (calm) { el.textContent = fmt(to); return; }
      function tick(ts) {
        if (!t0) t0 = ts;
        var p = Math.min(1, (ts - t0) / 1100);
        el.textContent = fmt(Math.round(to * (1 - Math.pow(1 - p, 3))));
        if (p < 1) requestAnimationFrame(tick);
      }
      requestAnimationFrame(tick);
    }

    function all() { for (var j = 0; j < nums.length; j++) count(nums[j]); }
    if (!('IntersectionObserver' in window)) { all(); return; }
    var io = new IntersectionObserver(function (es) {
      for (var j = 0; j < es.length; j++) if (es[j].isIntersecting) { all(); io.disconnect(); return; }
    }, { rootMargin: '0px 0px -12% 0px' });
    io.observe(root);
    setTimeout(all, 2600);
  }
})();
</script>

Вставляется целиком в блок T123 «HTML-код». Внутри уже есть стили и скрипт, подключать ничего не нужно.

Как вставить блок в Tilda

  1. Скопируйте кодКнопка «Скопировать код» выше кладёт всё содержимое в буфер обмена.
  2. Добавьте блок T123В редакторе страницы: «Библиотека блоков» → «Другое» → T123 «HTML-код».
  3. Вставьте и сохранитеНажмите «Контент», вставьте код в поле, сохраните и обновите страницу.
  4. ОпубликуйтеВ превью скрипты Tilda работают не всегда — проверяйте на опубликованной странице.

Подробная инструкция с граблями — как вставить вайб-блок в Tilda.

Что менять под себя

Где в кодеЗа что отвечает
текст h1 и абзац под нимоффер и перечень того, что вы поставляете
data-num у трёх цифрчисла, до которых доходят счётчики
массив FEED в начале скриптапозиции, размеры партий, города и состояния в ленте
переменные VISIBLE и PAUSEсколько строк видно и как часто лента сменяется
href у кнопки и ссылкиадреса страницы подбора и раздела с условиями
текст vbpp-noteправило отсечки по времени оплаты

Первый экран поставщика оборудования: зачем он нужен

Закупщик заходит на сайт поставщика с двумя вопросами: есть ли нужная позиция на складе и когда она уедет. Блок отвечает на оба в первом же экране. Слева стоит заголовок, абзац про то, что именно поставляется, две ссылки на подбор и на условия отгрузки. Ниже идут три цифры: позиций на складе, отгрузок в месяц и лет работы. Значения набегают от нуля, когда полоса попадает в экран.

Справа лежит панель с лентой отгрузок: наименование, размер партии, город и состояние заказа. Строки сменяются раз в несколько секунд, при наведении лента останавливается, чтобы можно было дочитать. Данные лежат в массиве FEED в начале скрипта, туда подставляются свои позиции и города. Палитра тёмная, графит с сигнальным оранжевым, форм внутри нет, целевое действие сделано ссылкой.

Вопросы по этому блоку

  • Задайте PAUSE большое значение или удалите вызов start в конце функции инициализации. Первые пять строк отрисуются один раз и останутся на месте.

  • Да. На корне блока поменяйте --bg и --panel на светлые оттенки, --ink на тёмный, --line на светло-серый. Оранжевый акцент читается и на белом фоне.

  • В скрипте есть запасной путь: если IntersectionObserver недоступен, цифры проставляются сразу. Через 2,6 секунды они выставляются в любом случае.

  • Да. Код на этой странице копируется целиком, без регистрации и подписки. Указывать авторство не нужно, использовать можно в коммерческих проектах.

  • Нет. Все классы внутри имеют собственный префикс vbpp, поэтому не пересекаются ни со стилями Tilda, ни с другими блоками. Скрипт привязан к своему элементу и запускается один раз, даже если блок вставлен дважды.

  • Раскладка перестраивается под узкие экраны, размеры заданы через clamp, поля ввода имеют шрифт 16 пикселей — iOS не будет зумить страницу при фокусе. Отдельной мобильной версии подключать не нужно.

Другие главные экраны

Ещё блоки для поставок оборудования

Собрать сайт целиком, а не по блокам

Дровосеки делают сайты на Tilda под ключ: структура, тексты, дизайн, вёрстка и вайб-блоки под задачи бизнеса.