rollMouse à la regaloeb

En javascript Vanilla

Effet repéré sur https://theorosel.com/ reproduit à la régaloeb !
Et contrairement à l'original, ma version est fonctionnelle avec Safari sous Mac !
Reste cet effet de flou pendant les transformations avec OSX... à suivre !
Les méthodes habituelles -webkit-transform:translateZ; -webkit-filter:blur(0px); ou will-change:transform; laissent le flou même après les transformations...!

Démo

clic

Inclure le petit constructeur javascript (3.05 Ko) dans sa page.
<script type="text/javascript" src="js/rollMouse.js"></script>

Déclarer les objets en bas de page :
var rollMouse = document.querySelectorAll('.rollMouse');
for(var i=0; i<rollMouse.length; i++){
    new RollMouse( rollMouse[i] );
}

HTML

<a href="#" class="rollMouse rollMouse-design">
    <div class="rollMouseMove rollMouseMove-design">clic</div>
</a>

Par défaut, le zoom effectué est de 2 mais on peut le modifier avec un attribut data : data-rollMouse-zoom="3"

<a href="#" class="rollMouse rollMouse-design" data-rollMouse-zoom="3">
    <div class="rollMouseMove rollMouseMove-design">clic</div>
</a>

CSS

.rollMouse{
    position: relative;
}
.rollMouse .rollMouseMove{
    transition: transform 0.45s ease-out;
    position: absolute;
    left: 50%;
    top: 50%;
    -webkit-transform-origin: 50% 50%;
    transform-origin: 50%;
    transform: translate(-50%, -50%);
}

Ce sont les seuls pré-requis CSS.

On peut jouer sur la durée de la transition pour obtenir un effet plus ou moins dynamique.
0.45s me semble pas mal mais on pourra préférer plus dynamique à 0.2s ou plus smooooooth à 0.6s...

Après, libre à vous d'appliquer le design souhaité aux éléments .rollMouse et .rollMouseMove.
Mais la largeur et la hauteur de l'élément mobile ne doivent pas dépasser 60% de son conteneur sinon, il ne sort jamais de sous la souris !...
50% est l'idéal.

clic
clic
regaloeb

À vous de jouer !