Author: | Martin Picod |
---|---|
Views Total: | 680 views |
Official Page: | Go to website |
Last Update: | June 25, 2018 |
License: | MIT |
Preview:

Description:
A fancy, interactive, direction-aware text shadow effect that reacts to mouse movement. Created with pure JavaScript and CSS transition & text-shadow properties.
How to use it:
Create the text to which you want to apply the interactive shadow effect.
<h1 class="demo"> <p>CSSScript</p> CSSScript </h1>
The CSS rules for the text shadow effect.
.demo { --x-shadow: 0; --y-shadow: 0; --x:50%; --y:50%; font-size: 15rem; transition: all 0.2s ease; position: relative; padding: 2rem; } .demo:hover { transition: all 0.2s ease; text-shadow: var(--x-shadow) var(--y-shadow) 10px #1A1A1A; } .demo p { position: absolute; top: 2rem; left: 2rem; background-image: radial-gradient(circle closest-side, rgba(255, 255, 255, 0.05), transparent); background-position: var(--x) var(--y); background-repeat: no-repeat; text-shadow: none; -webkit-background-clip: text; -webkit-text-fill-color: transparent; transition: all 0.1s ease; }
The main JavaScript to make the text-shadow effect interactive and direction-aware.
const title = document.querySelector('.demo') // light document.onmousemove = function(e) { let x = e.pageX - window.innerWidth/2; let y = e.pageY - window.innerHeight/2; title.style.setProperty('--x', x + 'px') title.style.setProperty('--y', y + 'px') } // shadow title.onmousemove = function(e) { let x = e.pageX - window.innerWidth/2; let y = e.pageY - window.innerHeight/2; let rad = Math.atan2(y, x).toFixed(2); let length = Math.round(Math.sqrt((Math.pow(x,2))+(Math.pow(y,2)))/10); let x_shadow = Math.round(length * Math.cos(rad)); let y_shadow = Math.round(length * Math.sin(rad)); title.style.setProperty('--x-shadow', - x_shadow + 'px') title.style.setProperty('--y-shadow', - y_shadow + 'px') }