Executando verificação de segurança...
29

[HTML, CSS, JS] Como fiz um efeito para "enxergar" através de uma <div> | Efeito lanterna

Sei que o título é estranho, mas vamos lá...

Decidi começar estudar programação recentemente e para treinar eu penso em algumas tarefas, efeitos ou qualquer coisa do tipo e tento "construir" efetivamente essa minha "mini ideia".

Ideia

Sobrepor duas "camadas" e conseguir enxergar a camada que está por baixo, porém, somente na região onde o mouse estiver.

Código

HTML

<div id="fundo">
    FUNDO
</div>
<div id="frente">
    FRENTE
</div> 

CSS

*{
   margin: 0;
   padding: 0;
   font: bold 80pt arial;
}

div{    
    display: flex;    
    justify-content: center;    
    align-items: center;    
    height: 100vh;    
    width: 100vw;    
    cursor: none;    
} 

#fundo{    
    background-color: rgb(207, 207, 50);    
    color: rgb(29, 29, 29);    
}   

#frente{    
    background-color: rgb(29, 29, 29);    
    color: white;    
    position: absolute;    
    top: 0;    
    left: 0;    
}

JavaScript

let  frente  =  document.getElementById("frente")

document.addEventListener('mousemove', (event) =>{
    let  x  =  event.pageX  +  "px";
    let  y  =  event.pageY  +  "px";
    frente.style.webkitMaskImage  =  `radial-gradient(circle at ${x}  ${y}, transparent 100px, black 0%)`;
})

Resultado

efeito-vazado.gif

Efeito lanterna

Vendo o resultado tive a sensação de estar olhando para um feixe de luz de uma lanterna, então fiz o seguinte exemplo:
efeito-lanterna.gif
Neste exemplo a diferença foi que deixei a camada da frente com o alfa em 0,95 (rgba(0, 0, 0, 0.95)) e o radial gradient um pouco mais "esfumaçado" com branco.

Conclusão

Sei que talvez seja algo muito básico para alguns ou então que exista algo pronto para executar isso, mas é muito gratificante pegar algo que "saiu" da tua cabeça e conseguir executar.

E aí, sabe outra forma de conseguir o mesmo resultado ?

Abraço!!

Carregando publicação patrocinada...
2

Dá pra fazer um joguinho com isso.
Coloca um contador de tempo
Coloca um objeto pequeno, aleatoreamente no espaço para ser clicado.
Pronto!

1
1

Muito interessante. Será que daria para fazer o mesmo efeito utilizando, ao inves de dois elementos diferentes, uma div e aplicando ao seu after e before?
Talvez deixe o cod mais complexo, mas tudo estaria em só um lugar

1
1
1
1

Geralmente as criações mais simples são as mais espetaculares. Adorei esse efeito, e vou favoritar pra quando precisar de algo diferente e criativo pra usar 🤩

1

Cara, ficou show de bola. Parabéns.

Não liga para o comentário maldoso que colocaram. A pessoa que fez isso é um coitado que não sabe reconhecer o trabalho dos outros.

Ficou muito bom mesmo. Você vai longe!

1
0
0
0
0
0
-10
3

Cara na real para que um comentário desses? acredito que nossa comunidade não concorde com esse tipo de comportamento, se você não gostou sugira uma forma melhor.
Acho que a intencao do filipedeschamps ao criar essa comunidade não era fomentar comentários dessa forma, seja respeitoso com as pessoas.
Lembre-se que tem pessoas de todos os niveis, conhecimento e culturas aqui nesse pedacinho de internet portanto se não for para ajudar recomendo que você vá para outro lugar e até sugiro uma outra rede social aquela do pássaro que esse comportamento inclusive é premiado.

2

Oshe mas que esquisitão esse comentário ._.

Eu achei bem legal a ideia, simples e direta. Seria mais construtivo você mostrar um exemplo feito por vc usando esse max-blend:exclusion. Mas será se vc consegue mesmo?

1

Soou comentário de recalque, pois ao não se mostrar capaz de fazer ou pensar essa solução e aprender com ela, é muito melhor pro ego simplesmente partir pra ofensa. Esse seu comentário diz muito ao seu respeito do que você imagina