Recréation de l'effet d'ondulation au toucher tel que vu sur Google Design

Ce que vous allez créer

Les nouveaux efforts de conception de Google sont vastes et justifient une conversation considérable. Mais au lieu de parler de la théorie de la conception matérielle et des implications des efforts les plus récents de Google, nous allons nous concentrer sur une technique intéressante que Google a utilisée pour leur page de renvoi Design.. 

Lorsque l'utilisateur clique sur l'un des blocs, un cercle SVG se développe à partir du point du clic de l'utilisateur pour remplir la majeure partie de la zone. Google se réfère à cela comme l'ondulation tactile. Nous allons recréer cet effet en utilisant quelques lignes de jQuery, du HTML simple et du CSS.

Commençons!

La grille de base

Avant de commencer, nous devons mettre en place une grille de base. Nous allons construire les éléments de la grille sans utiliser de cadre, mais cette technique fonctionnerait avec un cadre parfaitement fin.

Les classes de colonne correspondent aux fractions, de sorte que "col-1-3" signifie 1/3 de la largeur de l'élément conteneur.

CSS de base

Ensuite, nous allons configurer nos classes de colonnes. Nous utilisons LESS, ce qui nous permet d'imbriquer des règles et d'utiliser le Etopérateur. Nous n'entrerons pas dans les détails de LESS, mais dans l'intérêt de ce tutoriel, nous expliquerons comment Et opérateur fonctionne. Mais d'abord, voici le MOINS pour les colonnes.

.col position: relative; bloc de visualisation; float: gauche; marge: 1,25%; couleur de fond: # 444; couleur: #fff; rembourrage: 100px; taille de la boîte: boîte-frontière; & .orange background-color: # EF8130;  & .blue background-color: # 00ADE2;  & .gray background-color: # 444;  & .green background-color: # 76CE51;  & -1- & 2 width: 47.5%;  & 3 width: 30.8333%;  & 4 largeur: 22,5%; 

Remarquez le Et règles. le Et l'opérateur ajoute la chaîne qui la suit à l'élément parent. En d'autres termes, ceci MOINS:

.col & -1 & -3 color: #fff; 

Cela donnerait ce CSS:

.col-1-3 color: #fff; 

Et ce MOINS:

& .col & .orange background-color: # EF8130; 

Cela donnerait ce CSS:

.col.orange background-color: # EF8130; 

Si vous souhaitez en savoir plus sur LESS, consultez ces tutoriels ici sur Tuts +:

Comment fonctionnera le SVG

Ensuite, planifions comment le clic fonctionnera et comment le SVG sera placé dans chacune des cases..

Lorsque l'utilisateur clique sur l'une des cases, nous calculons le décalage de la position de la souris à partir du coin de cette case. Nous utiliserons ensuite ces coordonnées pour placer le cercle. Nous allons aussi absolument positionner l'élément SVG à l'intérieur des cases, et les cases elles-mêmes seront positionnées par rapport. Nous utiliserons le natif de SVG  élément, avec une fonction d'animation jQuery personnalisée.

Tout d'abord, configurons le CSS pour les éléments SVG.

svg position: absolute; en haut: 0; gauche: 0; largeur: 100%; hauteur: 100%;  cercle remplissage: rgba (255,255,255,0.1); 

Le remplissage utilise du RGBa, qui remplit l’élément circulaire de blanc à 10%..

Le javascript

Tout d'abord, nous allons configurer un écouteur de clic sur le .col éléments, et saisissez la position de la souris par rapport au document (sans tenir compte de la position de défilement). 

Position de la souris

La position est relative à la boîte elle-même; le coin supérieur gauche de la boîte est récupéré à l'aide de $ (this) .offset ().

$ (".col"). sur ("click", fonction (e) var x = e.pageX; var y = e.pageY; var clickY = y - $ (this) .offset (). top; var clickX = x - $ (this) .offset (). left; var box = this; //…);

Remarque: nous utilisons jQuery pour cet exemple.

Ensuite, nous allons convertir le clickX et clickY variables à des entiers, comme ils apparaissent comme des flottants dans certains navigateurs. Cela permet d'éviter tout problème de rendu résultant d'un alias de sous-pixels. Notez cependant que cela ne serait pas nécessairement nécessaire pour que l'effet fonctionne.

 var setX = parseInt (clickX); var setY = parseInt (clickY);

Supprimer des éléments SVG existants

Ensuite, nous allons supprimer tous les éléments SVG existants de notre boîte de dialogue. Si vous envisagez d’ajouter un fichier SVG au contenu de la boîte, assurez-vous d’utiliser quelque chose comme jQuery.ne pas() en combinaison avec une classe pour éviter de supprimer votre contenu.

 $ (this) .find ("svg"). remove ();

Ajouter un nouveau SVG

Ensuite, nous annexons notre SVG, que nous créons en passant du texte à la fonction jQuery.

$ (this) .append ('');

le setX et setY positionner le centre du cercle au point du clic que nous avons dérivé plus tôt.

Animer le rayon du cercle

Ensuite, nous animons le r propriété (qui définit le rayon) en utilisant jQuery animer une fonction. La fonction animate ne supporte pas les propriétés d’animation, nous utilisons donc le étape option, appelée après chaque étape de l'animation elle-même.

var c = $ (box) .find ("cercle"); c.animate ("r": $ (box) .outerWidth (), easing: "FACILITATION", durée: 400, étape: function (val) c.attr ("r", val); )

Rappelez-vous que boîte est défini plus tôt comme étant la boîte sur laquelle vous avez cliqué. Nous utilisons également jquery.easing, ce qui nous permet de définir "easEutOutQuad" pour la propriété d'accélération..

Le JavaScript, tous ensemble

Le code JavaScript final ressemblera à ceci:

$ (".col"). sur ("click", fonction (e) var x = e.pageX; var y = e.pageY; var clickY = y - $ (this) .offset (). top; var clickX = x - $ (this) .offset (). left; var box = ceci; var setX = parseInt (clickX); var setY = parseInt (clickY); $ (ceci) .find ("svg"). remove ( ); $ (this) .append (''); var c = $ (box) .find ("cercle"); c.animate ("r": $ (box) .outerWidth (), easing: "FACILITE", durée: 400, étape: function (val) c.attr ("r", val); ) );

Conclusion

Cet effet simple peut être utilisé de différentes manières au-delà de notre exemple. Imaginez, par exemple, identifier l'emplacement d'une personne sur laquelle une personne a cliqué, créer un popover pour commenter cette partie de l'image, puis enregistrer les coordonnées. Quelles utilisations pouvez-vous trouver pour cet effet?

Dans la nature

  • Éléments en papier polymère ondulation du papier - utilisation de composants Web pour de vrai
  • Bouton d’effet Ripples - sur CodePen
  • Google Material Design - sur CodePen
  • Boutons de conception matérielle - sur CodePen