IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Mise en page CSS Discussion :

Lancer l'animation d'un svg path sur ":over" d'une image


Sujet :

CSS

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Lycéen
    Inscrit en
    Juin 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2015
    Messages : 4
    Par défaut Lancer l'animation d'un svg path sur ":over" d'une image
    Bonjour à tous ,

    Dans ma page html, j'ai deux éléments. Un bloc SVG avec un objet Path et un bloc image. Pour le moment j'arrive à animer le PATH au chargement de ma page mais ce que je souhaiterais est que l'animation se déclenche seulement si la souris passe au dessus de l'image, et qu'elle fasse le chemin inverse pour s'effacer lorsque la souris n'est plus sur l'image.

    Place au code CSS

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    *{
    	margin:0;
    	padding:0;
    }
     
    .body{
    	width: 100%;
    	height:100%;
    }
     
    .container {
       margin: 0;
      position: absolute;
      top: 50%;
      left: 50%;
      -ms-transform: translate(-50%, -50%);
      transform: translate(-50%, -50%);
    }
     
    .test{
    	position: absolute;
      top: 50%;
      left: 50%;
    	width: 200px;
    	height:100px;
    }
     
    .test-path{
    	fill:none;
    	stroke:orange;
    	stroke-width:7;
    	stroke-dasharray: 1000;
        stroke-dashoffset: 1000;
    	animation: animtest 2.5s forwards;
    }
    .my-image{
    position: absolute;
      top: 70%;
      left: 50%;
      width: 100px;
      height:100px;
      opacity: 0.4;
    }
     
    .my-image:hover{
      opacity: 1;
    }
    @keyframes animtest {
      from {stroke-dashoffset: 1000;}
      to {stroke-dashoffset: 0;}
    }
    Place au
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <!DOCTYPE html>
    <html lang="fr">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    <title>TEST SVG PATH</title>
    <link rel="stylesheet" type="text/css" href="css/test.css" />
    </head>
    <body>
    		<div class="container">
    		<div class= "test">
    		<svg>
    			<path class="test-path" d="M0,50,100,50 M 110, 50 m -8, 0 a 8,8 0 1,0 16,0 a 8,8 0 1,0 -16,0 Z"/>
    		</svg></div>
    		<div class="my-image"><img src="https://www.w3schools.com/tags/smiley.gif" alt="test image"></div>
    	</div>
    </body>
    </html>

    Si quelqu'un sait comment faire, je suis preneur de toutes idées

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Pour pouvoir le faire en CSS, il faut que "my-image" soit avant "test".

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
          <div class="my-image"><img src="https://www.w3schools.com/tags/smiley.gif" alt="test image"></div>
          <div class= "test"><svg><path class="test-path" d="M0,50,100,50 M 110, 50 m -8, 0 a 8,8 0 1,0 16,0 a 8,8 0 1,0 -16,0 Z"/></svg></div>
    Ensuite, remplacer
    par
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    .my-image:hover + .test .test-path {
    position: absolute;
      top: 70%;
      left: 50%;
      width: 100px;
      height:100px;
      opacity: 0.4; animation: animtest 2.5s forwards;
    }

  3. #3
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 227
    Par défaut
    Bonjour,
    et qu'elle fasse le chemin inverse pour s'effacer lorsque la souris n'est plus sur l'image.
    il n'existe pas de pseudo-classe « :out » en CSS donc dans ton cas il me semble préférable de gérer cela directement en utilisant les animations SVG, même si cela est également faisable en JavaScript en manipulant les classes.
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <svg>
        <image id="image" xlink:href="https://www.w3schools.com/tags/smiley.gif" />
        <path class="test-path" d="M0,50,100,50 M 110, 50 m -8, 0 a 8,8 0 1,0 16,0 a 8,8 0 1,0 -16,0 Z">
            <animate attributeName="stroke-dashoffset" attributeType="CSS" from="1000" to="0" begin="image.mouseover" dur="2.5s" fill="freeze" />
            <animate attributeName="stroke-dashoffset" attributeType="CSS" from="0" to="1000" begin="image.mouseout" dur="1.5s" fill="freeze" />
        </path>
    </svg>

Discussions similaires

  1. Bouton paypal sur la même ligne qu'une image ?
    Par gege53 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 04/12/2010, 01h57
  2. Réponses: 4
    Dernier message: 19/06/2008, 15h58
  3. Réponses: 4
    Dernier message: 01/07/2007, 13h59
  4. Afficher un menu contextuelle sur le click droit d'une image
    Par PrinceMaster77 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/01/2006, 13h19
  5. Réponses: 8
    Dernier message: 09/11/2005, 17h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo