Página de vendas com VSL: o vídeo no topo, o botão e o texto embaixo. Se o restante aparece junto, a pessoa pula o vídeo. Eu queria o contrário. Vídeo em foco. Resto escondido. Depois de um tempo, a página inteira. Sem plugin, sem gambiarra de construtor, três linhas de JavaScript e um CSS.
Envolva o que deve esperar numa div com uma classe, por exemplo ocultar. No CSS daquela página, display: none. No rodapé da mesma página, um setTimeout troca o display depois de N milissegundos. Eu usei 400000 — cerca de seis minutos e quarenta segundos — num vídeo de onze. O código entra só na URL da VSL, não no site inteiro.
- HTML
- Div com classe em volta do bloco
- CSS
- display: none no carregamento
- JS
- setTimeout; 1000 ms = 1 segundo
O que eu fiz na minha página: seis minutos de onze
A VSL que eu mostrei na tela começa fechada. Só o vídeo. Passa o tempo, o restante aparece. O vídeo tem onze minutos. Eu libero o bloco aos seis. Não é no fim. É no ponto em que eu já falei o suficiente para o botão fazer sentido. Você escolhe o minuto. O mecanismo é o mesmo.
Eu estava escrevendo o artigo com o código na hora da gravação, para colar na descrição. O raciocínio cabe aqui. CMS não importa. WordPress, HTML solto, outra plataforma. É classe, CSS, timeout. Gutenberg, Elementor, tema com gancho no header — o que você tiver para injetar HTML naquela URL.
Primeiro a div, depois a classe no bloco que já existe
Decida o que some. Página inteira menos o vídeo, ou só o botão, ou um bloco enorme que o construtor já agrupa. No editor de blocos do WordPress eu abro um HTML personalizado, abro uma div, coloco a classe — eu usei nomes como ocultar e, noutro recorte, btn — e no final da seção fecho a div. Tudo que ficou no meio herda a espera.
Se o bloco já existe, não precisa da div extra. Seleciona o bloco, Avançado, classe CSS extra. A mesma classe. O WordPress, no editor de blocos, às vezes não desenha o HTML customizado como bloco reconhecido. Na tela eu já tinha a div antiga e o editor fingia que não via. Ignore o aviso. O front lê a classe. Não salvei a página de novo só para o Gutenberg ficar feliz.
- Na VSL, envolva o conteúdo que deve esperar com <div class="ocultar"> ... </div>, ou coloque a classe no bloco em Avançado.
- Não feche a div no meio do vídeo. O player fica fora da classe.
- Confira no front, pelo inspetor, que a classe está no nó certo. Classe no wrapper errado esconde o vídeo junto.
CSS no carregamento, senão o bloco pisca
O JavaScript roda depois. Se você só tiver o timeout, no primeiro segundo a página aparece inteira e some. Horror. O CSS precisa esconder no carregamento. Na folha daquela página: a classe, chaves, display: none. Se a página ainda não tem CSS próprio, abra a tag style no mesmo lugar em que você vai colar o script e coloque a regra lá.
Eu uso GeneratePress. Em Elementos eu crio um elemento da página de vendas, CSS e JS juntos, e marco para exibir só naquela URL. Não vai para o blog, não vai para o home. Plugin de “inserir header e footer” no site inteiro também funciona, e também polui as outras páginas. Vale a pena o gancho por URL. Menos CSS, menos script, menos chance de esconder um botão que não era da VSL.
setTimeout: 400 mil milissegundos e a conta de minuto
O script da gravação tem três linhas. setTimeout recebe uma função e um número. A função pega o elemento da classe e mostra — display block, ou o valor que o layout pedia. O número é milissegundo. Mil milissegundos, um segundo. Sessenta mil, um minuto. Eu coloquei 400000. São 400 segundos: seis minutos e quarenta segundos. “Cerca de seis minutos”, na fala. Se você quer cinco minutos redondos, 300000. Dez minutos, 600000. A conta na mão: minutos vezes 60 vezes 1000. Sem essa conversão, alguém cola 6 e o bloco aparece em seis milissegundos.
Na prática o JS parece isto, com a classe que você escolheu: setTimeout(function () { var blocos = document.querySelectorAll(".ocultar"); for (var i = 0; i < blocos.length; i++) { blocos[i].style.display = "block"; } }, 400000); Três linhas, sem biblioteca, sem jQuery. querySelectorAll pega todos os nós da classe, caso você tenha escondido o botão e um bloco de depoimento no mesmo timer.
Não tem cookie, na versão que eu mostrei: recarregou a página, a espera recomeça. Para VSL isso até ajuda. Quem voltou vê o vídeo de novo, não o checkout sozinho, a menos que você grave o estado. Eu não gravei. Cola no elemento da página, abaixo do CSS. Qualquer dúvida de seletor, o inspetor do navegador mostra se a classe é a que você acha que é. Se o display none estiver num filho e o script no pai, nada aparece — os dois precisam apontar para o mesmo nó.
- Classe no HTML do bloco que espera.
- display: none no CSS daquela URL, não no tema inteiro.
- setTimeout no JS daquela URL; o terceiro argumento da conta é milissegundo.
- Vídeo fora da classe, senão o player some junto.
- Gancho por página (GeneratePress Elementos, ou equivalente). Script global é tiro no pé.
Na sequência
- Coloque o player fora da div. Teste recarregando com o CSS já ativo: só o vídeo deve aparecer.
- Converta o minuto desejado em milissegundos antes de colar o número. Minuto × 60 × 1000.
- Injete CSS e JS só na URL da VSL.
- Confira no celular. display none no desktop não desculpa layout quebrado no wrap.
- Se o bloco pisca, o CSS não está no carregamento. O timeout sozinho não basta.
- Não use isso para esconder preço, prazo ou condição que a pessoa precisa ler para decidir.
Onde isso quebra
Esquecer o CSS e deixar o setTimeout “esconder depois”. A página pisca o checkout.
Colocar a classe no container que envolve o vídeo.
Colar o script no header de todas as páginas do tema.
Errar a ordem de grandeza: 400 em vez de 400000, e o bloco aparece em menos de um segundo.
Depender de plugin de “conteúdo por tempo” para três linhas de JavaScript.
Achar que o editor de blocos precisa reconhecer a div. O front não pede licença ao Gutenberg.
Perguntas frequentes
Funciona fora do WordPress?
Sim. É HTML, CSS e setTimeout. Qualquer página em que você cole a classe e o script.
Quanto eu usei de tempo?
400000 milissegundos, cerca de seis minutos e quarenta segundos, num vídeo de onze. O restante da página só aparece depois. Você muda o número.
E se a pessoa recarregar?
Na versão da gravação, a espera recomeça. Não tem cookie. Se você quiser lembrar que ela já viu, aí sim entra storage. Eu não coloquei.
GeneratePress é obrigatório?
Não. Eu usei Elementos porque o tema já deixa CSS e JS por página. Header and Footer, hook do child theme, bloco HTML no rodapé da VSL. O que importar é o escopo: só aquela URL.
Isso substitui plugin de VSL?
Para esconder o bloco por tempo, sim. Para player, countdown, pixel, split, não. Cada coisa no seu quadrado. O vídeo pedia o resto da página calado até o minuto X.