Свадьбы
Корпоративы
Сергей Маковкин
Сергей Маковкин
Веду свадьбы,
которые
чувствуются
Люди
эмоции
истории
(function () { var LOOP_1 = 'https://static.tildacdn.ink/vide6232-3735-4336-b433-303861656331/_2__3.mp4'; var LOOP_2 = 'https://static.tildacdn.ink/vide6232-3735-4336-b433-303861656331/_2__3.mp4'; var TILES = [ { elemId: '1789011776701000003', loop: LOOP_1, ytId: 'kWD7AmnZQj4', label: 'СМОТРЕТЬ ШОУ-РИЛ' }, { elemId: '1789011776735000010', loop: LOOP_2, ytId: 'kWD7AmnZQj4', label: 'СМОТРЕТЬ ИСТОРИИ' } ]; var rec = document.getElementById('rec3754076803'); if (!rec) return; var canHover = window.matchMedia('(hover: hover) and (pointer: fine)').matches; var cursor = document.createElement('div'); cursor.className = 'sv-cursor'; cursor.innerHTML = '
[
]
'; document.body.appendChild(cursor); var cursorTx = cursor.querySelector('.sv-cursor__tx'); var mx = 0, my = 0, cx = 0, cy = 0, cursorOn = false; if (canHover) { document.addEventListener('mousemove', function (e) { mx = e.clientX; my = e.clientY; if (!cursorOn) { cx = mx; cy = my; } }); (function tick() { cx += (mx - cx) * 0.18; cy += (my - cy) * 0.18; cursor.style.transform = 'translate(' + cx + 'px,' + cy + 'px) translate(-50%,-50%) scale(' + (cursorOn ? 1 : 0.85) + ')'; requestAnimationFrame(tick); })(); } function showCursor(text) { cursorTx.textContent = text; cursorOn = true; cursor.classList.add('is-on'); } function hideCursor() { cursorOn = false; cursor.classList.remove('is-on'); } var stage = document.createElement('div'); stage.className = 'sv-stage'; stage.innerHTML = '
' + '
' + '
' + '
' + String.fromCharCode(215) + '
' + '
0:00
' + '
' + '
'; document.body.appendChild(stage); var bridge = stage.querySelector('.sv-stage__bridge'); var playerBox = stage.querySelector('.sv-stage__player'); var closeBtn = stage.querySelector('.sv-stage__close'); var seek = stage.querySelector('.sv-stage__seek'); var fill = stage.querySelector('.sv-stage__fill'); var timeEl = stage.querySelector('.sv-stage__time'); var open = null; var tileVideos = []; var player = null; var playerReady = false; function fmt(sec) { if (!sec || isNaN(sec)) sec = 0; var m = Math.floor(sec / 60), s = Math.floor(sec % 60); return m + ':' + (s < 10 ? '0' : '') + s; } function setRect(r, instant) { if (instant) stage.style.transition = 'none'; stage.style.top = r.top + 'px'; stage.style.left = r.left + 'px'; stage.style.width = r.width + 'px'; stage.style.height = r.height + 'px'; if (instant) { void stage.offsetHeight; stage.style.transition = ''; } } function openTile(tile, tileEl, tileVideo) { if (open) return; hideCursor(); document.documentElement.style.overflow = 'hidden'; open = { tile: tile, tileEl: tileEl }; tileVideos.forEach(function (tv) { try { tv.pause(); } catch (e) {} }); var r = tileEl.getBoundingClientRect(); setRect({ top: r.top, left: r.left, width: r.width, height: r.height }, true); bridge.src = tile.loop; bridge.style.opacity = '1'; try { bridge.currentTime = tileVideo ? tileVideo.currentTime : 0; } catch (err) {} bridge.play().catch(function () {}); playerBox.classList.remove('is-on'); stage.style.opacity = ''; stage.classList.add('is-open'); requestAnimationFrame(function () { setRect({ top: 0, left: 0, width: window.innerWidth, height: window.innerHeight }); }); setTimeout(function () { if (!open) return; ensureYT(function () { if (!open) return; player.loadVideoById({ videoId: tile.ytId, startSeconds: 0 }); player.unMute(); player.setVolume(100); player.playVideo(); }); }, 620); } function closeStage() { if (!open) return; var r = open.tileEl.getBoundingClientRect(); stage.classList.remove('is-ready'); playerBox.classList.remove('is-on'); bridge.style.opacity = '1'; if (playerReady) { player.mute(); player.pauseVideo(); } setRect({ top: r.top, left: r.left, width: r.width, height: r.height }); stage.style.opacity = '0'; document.documentElement.style.overflow = ''; setTimeout(function () { stage.classList.remove('is-open'); stage.style.opacity = ''; bridge.pause(); bridge.removeAttribute('src'); bridge.load(); open = null; tileVideos.forEach(function (tv) { if (tv.src) tv.play().catch(function () {}); }); }, 560); } closeBtn.addEventListener('click', function (e) { e.stopPropagation(); closeStage(); }); document.addEventListener('keydown', function (e) { if (e.key === 'Escape') closeStage(); }); stage.addEventListener('click', function (e) { if (!open || !playerReady) return; if (seek.contains(e.target) || closeBtn.contains(e.target)) return; var st = player.getPlayerState(); if (st === 1) player.pauseVideo(); else player.playVideo(); }); function seekAt(clientX) { if (!playerReady || !open) return; var box = seek.getBoundingClientRect(); var p = (clientX - box.left) / box.width; p = Math.max(0, Math.min(1, p)); var d = player.getDuration(); if (d) player.seekTo(d * p, true); } var dragging = false; seek.addEventListener('mousedown', function (e) { dragging = true; seekAt(e.clientX); e.preventDefault(); }); document.addEventListener('mousemove', function (e) { if (dragging) seekAt(e.clientX); }); document.addEventListener('mouseup', function () { dragging = false; }); seek.addEventListener('touchstart', function (e) { seekAt(e.touches[0].clientX); }, { passive: true }); (function progress() { if (open && playerReady) { var d = player.getDuration(), c = player.getCurrentTime(); if (d) { fill.style.width = (c / d * 100) + '%'; timeEl.textContent = fmt(c) + ' / ' + fmt(d); } } requestAnimationFrame(progress); })(); function killCaptions() { if (!player) return; try { player.unloadModule('captions'); } catch (e) {} try { player.unloadModule('cc'); } catch (e) {} } var ytRequested = false; var pendingReady = null; function createPlayer() { player = new YT.Player('sv-yt-player', { videoId: TILES[0].ytId, playerVars: { controls: 0, disablekb: 1, fs: 0, modestbranding: 1, rel: 0, playsinline: 1, iv_load_policy: 3, cc_load_policy: 0, autoplay: 0 }, events: { onReady: function () { playerReady = true; player.mute(); killCaptions(); if (pendingReady) { var cb = pendingReady; pendingReady = null; cb(); } }, onStateChange: function (e) { killCaptions(); if (e.data === 1 && open) { playerBox.classList.add('is-on'); bridge.style.opacity = '0'; stage.classList.add('is-ready'); } } } }); } function ensureYT(cb) { if (playerReady) { cb(); return; } pendingReady = cb; if (ytRequested) return; ytRequested = true; if (window.YT && window.YT.Player) { createPlayer(); } else { var prevCb = window.onYouTubeIframeAPIReady; window.onYouTubeIframeAPIReady = function () { if (typeof prevCb === 'function') prevCb(); createPlayer(); }; if (!document.getElementById('sv-yt-api')) { var tag = document.createElement('script'); tag.id = 'sv-yt-api'; tag.src = 'https://www.youtube.com/iframe_api'; document.head.appendChild(tag); } } } var NEEDS_CANVAS = (window.matchMedia && window.matchMedia('(hover: none)').matches) || /iP(hone|od|ad)/.test(navigator.platform) || /iPhone|iPad|iPod|Android/.test(navigator.userAgent) || (navigator.maxTouchPoints > 1 && /Mac/.test(navigator.userAgent)); if (NEEDS_CANVAS) document.documentElement.classList.add('sv-canvasvideo'); var TILE_LABELS = { '1789011776701000003': ['1789011776703000004','1789011776711000005','1789011776715000006','1789011776731000007'], '1789011776735000010': ['1789011776737000011','1789011776742000012','1789011776746000013','1789011776757000014'] }; function mirrorToCanvas(host, video, labelEls) { var cv = document.createElement('canvas'); cv.className = 'sv-tile__canvas'; host.insertBefore(cv, host.firstChild); var ctx = cv.getContext('2d'); if (!ctx) return; var ctxFilter = ('filter' in ctx); if (!ctxFilter) cv.style.filter = 'grayscale(1)'; var dpr = Math.min(window.devicePixelRatio || 1, 2); var cache = null, cacheAt = 0; function measure() { var hb = host.getBoundingClientRect(); cache = labelEls.map(function (el) { var atom = el.querySelector('.tn-atom') || el; var r = atom.getBoundingClientRect(); var cs = getComputedStyle(atom); var fs = parseFloat(cs.fontSize) || 14; var lh = parseFloat(cs.lineHeight); if (!lh || isNaN(lh)) lh = fs * 1.2; var al = cs.textAlign === 'right' ? 'right' : (cs.textAlign === 'center' ? 'center' : 'left'); return { x: r.left - hb.left, y: r.top - hb.top, w: r.width, lh: lh, align: al, font: cs.fontStyle + ' ' + cs.fontWeight + ' ' + fs + 'px ' + cs.fontFamily, text: (atom.textContent || '').replace(/\s+/g, ' ').trim() }; }); cacheAt = Date.now(); } function wrap(text, maxW) { var words = text.split(' '), lines = [], cur = ''; for (var i = 0; i < words.length; i++) { var t = cur ? cur + ' ' + words[i] : words[i]; if (ctx.measureText(t).width > maxW && cur) { lines.push(cur); cur = words[i]; } else cur = t; } if (cur) lines.push(cur); return lines; } function drawLabels() { if (!cache) return; ctx.save(); if (ctxFilter) ctx.filter = 'none'; ctx.globalCompositeOperation = 'difference'; ctx.fillStyle = '#ffffff'; ctx.textBaseline = 'middle'; cache.forEach(function (L) { if (!L.text) return; ctx.font = L.font; ctx.textAlign = L.align; var x = L.align === 'right' ? L.x + L.w : (L.align === 'center' ? L.x + L.w / 2 : L.x); var lines = wrap(L.text, L.w + 1); for (var i = 0; i < lines.length; i++) { ctx.fillText(lines[i], x, L.y + L.lh * (i + 0.5)); } }); ctx.restore(); } var last = 0; function frame(now) { requestAnimationFrame(frame); if (now - last < 40) return; last = now; if (open) return; if (video.readyState < 2) return; var box = host.getBoundingClientRect(); if (box.bottom < 0 || box.top > innerHeight) return; var w = host.clientWidth, h = host.clientHeight; var vw = video.videoWidth, vh = video.videoHeight; if (!w || !h || !vw || !vh) return; var pw = Math.round(w * dpr), ph = Math.round(h * dpr); if (cv.width !== pw || cv.height !== ph) { cv.width = pw; cv.height = ph; cache = null; } ctx.setTransform(dpr, 0, 0, dpr, 0, 0); if (ctxFilter) ctx.filter = 'grayscale(1)'; ctx.globalCompositeOperation = 'source-over'; var k = Math.max(w / vw, h / vh); var dw = vw * k, dh = vh * k; ctx.drawImage(video, (w - dw) / 2, (h - dh) / 2, dw, dh); if (!cache || Date.now() - cacheAt > 1000) measure(); drawLabels(); } requestAnimationFrame(frame); } TILES.forEach(function (tile) { var el = rec.querySelector('[data-elem-id="' + tile.elemId + '"]'); if (!el) return; var atom = el.querySelector('.tn-atom') || el; atom.classList.add('sv-tile'); var v = document.createElement('video'); v.className = 'sv-tile__video'; v.muted = true; v.loop = true; v.autoplay = true; v.playsInline = true; v.setAttribute('muted', ''); v.setAttribute('playsinline', ''); v.setAttribute('webkit-playsinline', ''); v.setAttribute('preload', 'none'); atom.insertBefore(v, atom.firstChild); tileVideos.push(v); var lazyStarted = false; function lazyStart() { if (lazyStarted) return; lazyStarted = true; v.src = tile.loop; v.play().catch(function () {}); } if ('IntersectionObserver' in window) { var io = new IntersectionObserver(function (entries) { entries.forEach(function (entry) { if (entry.isIntersecting) { lazyStart(); io.disconnect(); } }); }, { rootMargin: '600px 0px' }); io.observe(atom); } else { lazyStart(); } if (NEEDS_CANVAS) { var labelEls = (TILE_LABELS[tile.elemId] || []).map(function (id) { return rec.querySelector('[data-elem-id="' + id + '"]'); }).filter(Boolean); mirrorToCanvas(atom, v, labelEls); } if (canHover) { atom.addEventListener('mouseenter', function () { if (!open) showCursor(tile.label); }); atom.addEventListener('mouseleave', hideCursor); } atom.addEventListener('click', function () { openTile(tile, el, v); }); }); })();
SM
СВАДЬБЫ
·
КОРПОРАТИВЫ
INSTAGRAM
TELEGRAM
+7 921 903 00 33
СЕРГЕЙ
МАКОВКИН
ВЕДУ СВАДЬБЫ,
КОТОРЫЕ
ЧУВСТВУЮТСЯ
ЛЮДИ
ЭМОЦИИ
ИСТОРИИ
ЛИСТАЙТЕ ВНИЗ
(function () { var rec = document.getElementById('rec3754886003'); var spacer = document.getElementById('rec3790616303'); var showreel = document.getElementById('rec3754076803'); var footer = document.getElementById('sv-footer'); var ticker = document.getElementById('sv-ticker'); var header = document.getElementById('sv-header'); var grain = document.getElementById('sv-grain'); var person = document.getElementById('sv-hero-person'); var name = document.getElementById('sv-hero-name'); if (!rec || !person || !name) return; if (header) document.body.appendChild(header); if (grain) document.body.appendChild(grain); var scrollHint = document.getElementById('sv-hero-scroll'); if (showreel && footer) { showreel.insertAdjacentElement('afterend', footer); footer.style.display = ''; } /* мобилка: убрать кремовую прослойку между блоком тайлов и футером */ function fixTilesGap() { if (!showreel || !footer) return; footer.style.marginTop = ''; if (!window.matchMedia('(max-width: 959px)').matches) return; var recBottom = showreel.getBoundingClientRect().bottom; var tiles = showreel.querySelectorAll('.sv-tile'); if (!tiles.length) return; var maxB = 0; tiles.forEach(function (e) { var b = e.getBoundingClientRect().bottom; if (b > maxB) maxB = b; }); if (maxB > 0) { var gap = recBottom - maxB; if (gap > 2) footer.style.marginTop = (-Math.round(gap)) + 'px'; } } fixTilesGap(); window.addEventListener('resize', fixTilesGap); window.addEventListener('load', fixTilesGap); setTimeout(fixTilesGap, 900); setTimeout(fixTilesGap, 2200); /* инерционный скролл (только мышь/трекпад на десктопе) */ var fine = window.matchMedia('(hover: hover) and (pointer: fine)').matches && !window.matchMedia('(prefers-reduced-motion: reduce)').matches; if (fine) { document.documentElement.style.scrollBehavior = 'auto'; var target = window.pageYOffset, cur = target, raf = null; function maxY() { return Math.max(0, document.documentElement.scrollHeight - window.innerHeight); } function loop() { cur += (target - cur) * 0.11; if (Math.abs(target - cur) < 0.4) { cur = target; window.scrollTo(0, cur); raf = null; return; } window.scrollTo(0, cur); raf = requestAnimationFrame(loop); } window.addEventListener('wheel', function (e) { if (e.ctrlKey || document.documentElement.style.overflow === 'hidden') return; e.preventDefault(); var d = e.deltaY; if (e.deltaMode === 1) d *= 16; else if (e.deltaMode === 2) d *= window.innerHeight; target = Math.max(0, Math.min(maxY(), target + d)); if (!raf) raf = requestAnimationFrame(loop); }, { passive: false }); window.addEventListener('scroll', function () { if (!raf) { target = cur = window.pageYOffset; } }, { passive: true }); window.svScrollTo = function (y) { target = Math.max(0, Math.min(maxY(), y)); if (!raf) raf = requestAnimationFrame(loop); }; } var totop = document.getElementById('sv-totop'); if (totop) totop.addEventListener('click', function (e) { e.preventDefault(); if (window.svScrollTo) window.svScrollTo(0); else window.scrollTo({ top: 0, behavior: 'smooth' }); }); function clamp(v) { return Math.max(0, Math.min(1, v)); } function update() { var sy = window.pageYOffset; var dist = spacer ? spacer.offsetHeight : window.innerHeight * 1.45; var p = clamp(sy / Math.max(1, dist)); var personY = -p * 22, personScale = 1 + p * .05, personX = Math.sin(p * Math.PI) * 10; person.style.transform = 'translate3d(' + personX + 'px,' + personY + 'px,0) scale(' + personScale + ')'; var nameIn = clamp((p - .12) / .30); var nameY = (1 - nameIn) * 90; var nameScale = .93 + nameIn * .07; name.style.opacity = nameIn; if (ticker) ticker.style.opacity = nameIn; if (scrollHint) scrollHint.style.opacity = 1 - nameIn; name.style.transform = 'translate3d(0,' + nameY + 'px,0) scale(' + nameScale + ')'; if (header) header.classList.toggle('is-solid', sy > 24); } var ticking = false; function onScroll() { if (ticking) return; ticking = true; requestAnimationFrame(function () { update(); ticking = false; }); } window.addEventListener('scroll', onScroll, { passive: true }); window.addEventListener('resize', update); window.addEventListener('load', update); update(); })();
01.SHOWREEL
[02:18]
Год свадеб,
сжатый в две минуты
[2026]
01.ИСТОРИИ/ЛЮДИ
[01:57]
Загс, банкет, первый танец
[2026]
+7 900 000 00 00
INST
WHATSAPP
TELEGRAM
Made on
Tilda