RTEC DESIGN — Intro tip Netflix

Explorați soluția noastră în categoria: JavaScript

Detalii Tehnice

🎬 Intro tip Netflix, 100% HTML/CSS/JS — descarcă GRATUIT codul demo acum!

🎬 Intro tip Netflix pentru brandul tău!

Ai văzut celebra animație de intro Netflix? Acum poți avea și tu ceva similar, complet personalizat pentru site-ul sau proiectul tău.

💻 Codul este scris 100% manual în HTML, CSS și JavaScript – fără Figma, fără programe externe. Totul este optimizat pentru performanță și ușor de integrat.

✨ Efecte dinamice • Design modern • Free pentru comunitatea noastră



<!DOCTYPE html>
<html lang="ro">
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>RTEC DESIGN — Intro tip Netflix</title>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;700;900&display=swap" rel="stylesheet">
<style>
  :root{
    --bg:#05060a; --ink:#e8eef7; --muted:#9aabc4; --red:#ff2c2c; --vio:#8b5cf6; --cyan:#22d3ee; --gold:#f59e0b;
  }
  *{box-sizing:border-box}
  html,body{height:100%}
  body{margin:0; background:radial-gradient(1200px 800px at 70% -20%, #0b0e18 0%, transparent 60%), #000; color:var(--ink); font-family:Inter,system-ui,Segoe UI,Roboto,Helvetica,Arial,sans-serif; overflow:hidden}


  .stage{position:relative; height:100%; width:100%; display:grid; place-items:center; background:
    radial-gradient(1400px 900px at 15% -10%, rgba(255,45,45,.14), transparent 60%),
    radial-gradient(1000px 700px at 110% 110%, rgba(34,211,238,.12), transparent 60%),
    linear-gradient(#05060a, #000);
    animation:bg-flicker 6s ease-in-out forwards;
  }
  @keyframes bg-flicker{0%,10%{filter:brightness(.85)} 12%{filter:brightness(1)} 15%{filter:brightness(.9)} 18%{filter:brightness(1)} 100%{filter:brightness(1)}}




  .stage::after{content:""; position:absolute; inset:0; pointer-events:none; background:
    repeating-linear-gradient(0deg, rgba(255,255,255,.04) 0 1px, transparent 1px 2px);
    mix-blend-mode:overlay; opacity:.15; animation:noise .8s steps(3) infinite;}
  @keyframes noise{50%{opacity:.1} 100%{opacity:.15}}


  #intro{width:min(1080px, 92vw); height:auto; display:block}


  .skip{position:fixed; right:18px; top:18px; z-index:10; border:1px solid rgba(255,255,255,.2); color:#dbe7ff; background:rgba(255,255,255,.05); padding:10px 14px; border-radius:999px; font-weight:700; letter-spacing:.2px; cursor:pointer; backdrop-filter:blur(6px); -webkit-backdrop-filter:blur(6px); opacity:.95; transition:.2s}
  .skip:hover{opacity:1; transform:translateY(-1px)}




  .flash{position:fixed; inset:0; pointer-events:none; background:radial-gradient(1600px 900px at 10% 50%, rgba(255,255,255,.25), transparent 60%), radial-gradient(1600px 900px at 90% 50%, rgba(255,255,255,.2), transparent 60%); filter:blur(2px); opacity:0}
  .flash.on{animation:flash 550ms ease-out forwards}
  @keyframes flash{0%{opacity:0} 20%{opacity:1} 100%{opacity:0}}


 
  .wordmark{font-weight:900; letter-spacing:.32em; fill:#f4f7ff; opacity:0}
  .wordmark.show{animation:wm 900ms 2.6s cubic-bezier(.2,.9,.2,1) forwards}
  @keyframes wm{0%{opacity:0; letter-spacing:.8em} 100%{opacity:1; letter-spacing:.32em}}


 
  .shine{opacity:0}
  .shine.show{animation:shine 1200ms 3.0s ease-out forwards}
  @keyframes shine{0%{opacity:0; transform:translateX(-60%)} 10%{opacity:1} 100%{opacity:0; transform:translateX(160%)}}


 
  .outro{position:fixed; inset:0; background:#000; pointer-events:none; opacity:0}
  .outro.on{animation:fadeout .7s 4.4s ease forwards}
  @keyframes fadeout{to{opacity:1}}
</style>
</head>
<body>
<button class="skip" id="skip">Skip intro</button>
<div class="flash" id="flash"></div>
<div class="stage" id="stage">


  <svg id="intro" viewBox="0 0 1200 700" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="RTEC DESIGN intro">
    <defs>
      <linearGradient id="beamA" x1="0" y1="0" x2="1" y2="0">
        <stop offset="0" stop-color="#0ea5e9"/>
        <stop offset="0.5" stop-color="#ef4444"/>
        <stop offset="1" stop-color="#8b5cf6"/>
      </linearGradient>
      <linearGradient id="beamB" x1="0" y1="0" x2="1" y2="0">
        <stop offset="0" stop-color="#ef4444"/>
        <stop offset="0.5" stop-color="#f59e0b"/>
        <stop offset="1" stop-color="#22d3ee"/>
      </linearGradient>
      <filter id="glow" x="-40%" y="-40%" width="180%" height="180%">
        <feGaussianBlur stdDeviation="10" result="b"/>
        <feMerge>
          <feMergeNode in="b"/>
          <feMergeNode in="SourceGraphic"/>
        </feMerge>
      </filter>


      <mask id="Rmask">
        <rect width="1200" height="700" fill="#000"/>
        <text x="50%" y="58%" text-anchor="middle" font-family="Inter, system-ui, sans-serif" font-size="520" font-weight="900" fill="#fff">R</text>
      </mask>


      <mask id="WMmask">
        <rect width="1200" height="700" fill="#000"/>
        <text x="50%" y="88%" text-anchor="middle" font-family="Inter, system-ui, sans-serif" font-size="68" font-weight="900" fill="#fff" letter-spacing="14">RTEC DESIGN</text>
      </mask>
    </defs>




    <rect width="1200" height="700" fill="#000"/>




    <g mask="url(#Rmask)">


      <g id="beams" filter="url(#glow)">


        <g transform="translate(0,0) rotate(-24 600 350)">


          <rect class="stripe" x="-1200" y="-100" width="700" height="36" rx="18" fill="url(#beamA)" opacity=".95"/>
        </g>
      </g>


      <g id="finalR" opacity="0">
        <rect width="1200" height="700" fill="url(#beamB)"/>
      </g>
    </g>




    <text id="wm" class="wordmark" x="50%" y="88%" text-anchor="middle" font-size="68" font-weight="900" letter-spacing="14">RTEC DESIGN</text>




    <g class="shine" id="shine" mask="url(#WMmask)">
      <linearGradient id="shineG" x1="0" y1="0" x2="1" y2="0">
        <stop offset="0" stop-color="#fff" stop-opacity=".0"/>
        <stop offset="0.5" stop-color="#fff" stop-opacity=".9"/>
        <stop offset="1" stop-color="#fff" stop-opacity=".0"/>
      </linearGradient>
      <rect x="-400" y="620" width="400" height="120" fill="url(#shineG)"/>
    </g>
  </svg>
</div>
<div class="outro" id="outro"></div>
<audio id="tadum" preload="auto"></audio>


<script>
  // ------- Config -------
  const DURATION = 4800;             
  const STRIPES = 14;                
  const STRIPE_GAP = 36;             
  const STRIPE_WIDTH = 880;          
  const STRIPE_HEIGHT = 36;          
  const ENTER_CALLBACK = null;       
  const SOUND_URL = "";             


  // ------- Ajutor -------
  const svgNS = 'http://www.w3.org/2000/svg';
  const beamsGroup = document.querySelector('#beams g');
  const finalR = document.getElementById('finalR');
  const wm = document.getElementById('wm');
  const flash = document.getElementById('flash');
  const shine = document.getElementById('shine');
  const skip = document.getElementById('skip');
  const outro = document.getElementById('outro');
  const audio = document.getElementById('tadum');
  if(SOUND_URL){ audio.src = SOUND_URL; }


  // Construiți mai multe dungi cu animație eșalonată
  beamsGroup.innerHTML = '';
  for(let i=0;i<STRIPES;i++){
    const r = document.createElementNS(svgNS, 'rect');
    r.setAttribute('class', 'stripe');
    r.setAttribute('x', -1400 - i*40); 
    r.setAttribute('y', -180 + i*STRIPE_GAP);
    r.setAttribute('width', STRIPE_WIDTH);
    r.setAttribute('height', STRIPE_HEIGHT);
    r.setAttribute('rx', STRIPE_HEIGHT/2);
    r.setAttribute('fill', i%2? 'url(#beamA)': 'url(#beamB)');
    r.style.opacity = .95;
    // Animație CSS per bandă cu decalaj
    const delay = 80 * i; 
    r.style.animation = `sweep 1700ms ${delay}ms cubic-bezier(.2,.8,.1,1) forwards, fadeTail 1300ms ${delay+1200}ms ease-out forwards`;
    beamsGroup.appendChild(r);
  }


  // Cadre cheie prin intermediul unei foi de stil dinamice, astfel încât să se aplice și elementelor SVG
  const style = document.createElement('style');
  style.textContent = `
    @keyframes sweep { from { transform: translateX(-10%) } 60% { transform: translateX(60%) } to { transform: translateX(140%) } }
    @keyframes fadeTail { from { opacity: .95 } to { opacity: .12 } }
  `;
  document.head.appendChild(style);


  // Evenimente în cronologie
  setTimeout(()=>{ finalR.setAttribute('opacity','1'); flash.classList.add('on'); }, 2100);
  setTimeout(()=>{ wm.classList.add('show'); }, 2400);
  setTimeout(()=>{
    shine.classList.add('show');
  }, 3000);


  // sunet opțional (necesită un gest al utilizatorului pe multe browsere)
  document.addEventListener('click', oncePlay, { capture:true, once:true });
  function oncePlay(){ if(audio && SOUND_URL){ audio.volume = 0.9; audio.play().catch(()=>{}); } }


  // Butonul Sari peste
  skip.addEventListener('click', endIntro);
  function endIntro(){
    outro.classList.add('on');
    setTimeout(()=>{ if(ENTER_CALLBACK) ENTER_CALLBACK(); }, 700);
  }


  // Încheiere automată după o durată
  setTimeout(endIntro, DURATION);
</script>
</body>
</html>

Ai Nevoie de Cod Personalizat?

Contactează-ne pentru soluții de cod personalizate pentru proiectul tău. Putem dezvolta componente, module și funcționalități specifice nevoilor tale.

Contactează-ne
RTEC
Suport RTEC DESIGN Nexa este online