Animation CSS sur bouton on/off

Salut à tous,

J’essaie de me mettre à la personnalisation de Jeedom au travers des widget mais je vous avoue que je galère un peu .

En effet je viens de domotiser ma VMC avec un relay switch pour l’allumer et l’éteindre.
J’ai créé un Widget « Ventilo » en mode facile on/off , j’ai mis l’icone du ventilo sur les deux états (on et off) .

Et ensuite dans le code j’ai ajouté une classe au style du bouton « on » avec une animation basic css de rotation.
Quand je valide et que j’applique le widget à la commande du relay switch je vois bien mon ventilo à la place de l’ampoule, dans le code source de la page je vois bien ma class d’animation attribué au bouton. Mais mon animation elle ne fonction pas du tout … Alors qu’elle fonctionne bien en html / css pure.

Voici le code du widget , la class css est « SpinMe »

<div style="width:90px; min-height:80px;" class="cmd tooltips cmd-widget cursor" data-type="action" data-subtype="other" data-cmd_id="#id#" data-cmd_uid="#uid#">
	<center class="spinMe">
		<span class="cmdName" style="font-weight: bold;font-size : 12px;display: none;">#valueName#</span><br>
		<span style="font-size: 2.5em; font-weight: bold; margin-top: 5px;" class="iconCmd"></span>
	</center>
<!-- Ne Pas Supprimer gros -->
	<script class="createWidgetInfo" type="text/javascript">//<![CDATA[{"type":"0","version":"1","size":"2.5","icon1":"<i class='icon jeedom-ventilo'></i>","icon2":"<i class='icon techno-ventilateur'></i>"}]]></script>
<!-- Ne Pas Supprimer -->
	<script>
	if(jeedom.cmd.normalizeName('#name#') == 'on'){
		$('.cmd[data-cmd_uid=#uid#] .iconCmd').append('<i class="icon techno-ventilateur"></i>');
	}else{
		$('.cmd[data-cmd_uid=#uid#] .iconCmd').append('<i class="icon jeedom-ventilo spinMe"></i>');
	}
	  
	jeedom.cmd.update['#id#'] = function(_options){
		if(jeedom.cmd.normalizeName('#name#') == 'on'){	
		  if(parseInt(_options.display_value) >= 1 ) {
			  $('.cmd[data-cmd_uid=#uid#]').hide();
		  }else{
			  $('.cmd[data-cmd_uid=#uid#]').show();
		  }
		}else{
		  if(parseInt(_options.display_value) <= 0 ) {
				$('.cmd[data-cmd_uid=#uid#]').hide();
			}else{
				$('.cmd[data-cmd_uid=#uid#]').show();
			}
		}
	}
	jeedom.cmd.update['#id#']({display_value:'#state#'});
	
	$('.cmd[data-cmd_uid=#uid#] .iconCmd').on('click', function () {
		jeedom.cmd.execute({id: '#id#'});
	});
	</script>
  <style>
    spinMe {
  display block;
  position : absolute;
  width : 50px;
  height:50px;
  background:red;
  animation-name: spinAnim;
  animation-duration: 1000ms;
  animation-iteration-count: infinite;
  animation-timing-function: linear; 
}

@keyframes spinAnim {
    from {
        transform:rotate(0deg);
    }
    to {
        transform:rotate(360deg);
    }
}
  </style>
</div>

Auriez-vous des idées ? J’ai même créer la class SpinMe et l’animation, dans les paramètres généraux de jeedom mais cela ne change pas le résultat …

Il est certain que je fais un trucs pas correctement …

Help !

Merci d’avance,

Neo

Salut,

J’ai pas détaillé le code mais y’a déjà un widget pour vmc plutôt élaboré si ça t’intéresse mais pour commande info/numérique :

Sinon ici j’essayerai avec :

@keyframes spinAnim {
    0%{
        transform:rotate(0deg);
    }
    100% {
        transform:rotate(360deg);
    }
1 « J'aime »

Salut !

Merci pour ton retour, ou le widget à commande numérique est pas mal mais trop pousser pour moi lol , je veux juste un ventilo sur lequel je clique pour qu’il tourne quand c’est on, et ne tourne pas en off, vu que j’ai pas de vitesse réglable sur ma vmc…

J’ai bien utilisé ton keyframes pour l’animation.

Ok alors si tu es en V4 tu peux le faire directement à l’aide du menu Outils > Widgets du core

Hello, je suis en 3.3.53 et je n’ai pas de MAJ de proposé pour le moment

Je ne m’avoues pas vaincu, il reste la possibilité du mode création facile du plugin widget avec la possibilité de créer un bouton on/off :
https://doc.jeedom.com/fr_FR/plugins/programming/widget/#Mode%20création%20facile

Merci pour ton acharnement ! mais c’est bien par là que je suis passé …
Je viens de refaire le test en attribuant uniquement un changement de couleur de font dans ma class « spinMe » et ca fonctionne … le rotate en dure également, en revanche via l’animation non … je vais continuer de creuser merci :slight_smile:

Je viens de capter que j’avais rien capté.

Du coup je regarderai pour l’animation :wink:

En y regardant d’un peu plus près il manque juste le . devant le nom de la classe dans la balise <style> :

.spinMe {
  display block;
  position : absolute;
  etc.......

Salut !

Merci pour ta réponse, effectivement le point de la class était manquant dans le code partagé ! Mais j’avais d’autres erreurs.
Du coup je suis repartis d’une feuille blanche, et j’ai utilisé le SVG du lien ghitub que tu m’as donné. Et j’ai custom tout ca ! et ca fonctionne !

Merci encore pour ta précieuse aide !

voici donc le code final de mon widget de ventilation de la VMC

<div style="width:90px; min-height:80px;" class="cmd tooltips cmd-widget cursor" data-type="action" data-subtype="other" data-cmd_id="#id#" data-cmd_uid="#uid#">
	<center>
		<span class="cmdName" style="font-weight: bold;font-size : 12px;display: block;">#valueName#</span><br>
		<span style="font-size: 2.5em; font-weight: bold; margin-top: 5px;" class="iconCmd">
          <div class="SVG">
            <div class="spinner" id="Fan#id#" >
                  <svg version="1.1"xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="65px" height="65px" viewBox="0 0 100 100" enable-background="new 0 0 500 500" xml:space="preserve">
                  <g >
                      <path class="col#id# "  d="M62.841,46.809c4.031-1.447,10.757-2.366,17.216,1.222c10.979,6.097,21.299-3.18,19.797-13.452
                  C98.522,25.476,92.9,16.208,85.76,12.484c-10.678-5.565-18.762-2.468-25.019,4.323c-4.097,4.45-8.382,12.298-8.714,19.762
                  c-0.157,3.514-4.237,3.329-5.218,0.591c-1.448-4.031-2.367-10.758,1.219-17.215c6.1-10.981-3.178-21.302-13.449-19.799
                  c-9.104,1.334-18.371,6.953-22.095,14.096c-5.566,10.677-2.469,18.761,4.322,25.016c4.449,4.098,12.301,8.385,19.762,8.717
                  c3.515,0.156,3.33,4.236,0.592,5.216c-4.033,1.449-10.76,2.369-17.216-1.219c-10.981-6.1-21.302,3.179-19.798,13.451
                  c1.332,9.104,6.953,18.371,14.096,22.094c10.677,5.567,18.761,2.469,25.016-4.322c4.098-4.448,8.384-12.299,8.715-19.761
                  c0.157-3.516,4.236-3.329,5.218-0.596c1.447,4.034,2.367,10.76-1.22,17.219c-6.1,10.978,3.178,21.299,13.45,19.795
                  c9.104-1.332,18.371-6.949,22.094-14.092C93.084,75.081,89.985,67,83.194,60.741c-4.448-4.095-12.301-8.383-19.761-8.713
                  C59.918,51.871,60.104,47.792,62.841,46.809z M50,55.074c-2.801,0-5.072-2.271-5.072-5.072c0-2.801,2.271-5.072,5.072-5.072
                  c2.802,0,5.072,2.271,5.072,5.072C55.072,52.803,52.802,55.074,50,55.074z" style="fill: white;"></path>
                  </g>
                  </svg> 
            </div>      
          </span>
	</center>
<!-- Ne Pas Supprimer -->
	<script class="createWidgetInfo" type="text/javascript">//<![CDATA[{"type":"0","version":"1","size":"2.5","icon1":"<i class='icon jeedom-lumiere-off'></i>","icon2":"<i class='icon jeedom-lumiere-on'></i>"}]]></script>
<!-- Ne Pas Supprimer -->
	<script>
	if(jeedom.cmd.normalizeName('#name#') == 'on'){
      	$( "#Fan#id#" ).removeClass( "SpinClass" );
	}else{
      	$( "#Fan#id#" ).addClass( "SpinClass" );
	}
	  
	jeedom.cmd.update['#id#'] = function(_options){
		if(jeedom.cmd.normalizeName('#name#') == 'on'){	
		  if(parseInt(_options.display_value) >= 1 ) {
			  $('.cmd[data-cmd_uid=#uid#]').hide();
		  }else{
			  $('.cmd[data-cmd_uid=#uid#]').show();
		  }
		}else{
		  if(parseInt(_options.display_value) <= 0 ) {
				$('.cmd[data-cmd_uid=#uid#]').hide();
			}else{
				$('.cmd[data-cmd_uid=#uid#]').show();
			}
		}
	}
	jeedom.cmd.update['#id#']({display_value:'#state#'});
	
	$('.cmd[data-cmd_uid=#uid#] .iconCmd').on('click', function () {
		jeedom.cmd.execute({id: '#id#'});
	});
	</script>
 <style>
.SVG{
  width:65px;
  height:65px;
 }
    
.spinner{
  width:65px;
  height:65px;
}
    
.SpinClass{
  animation-name: spinAnim;
  animation-duration: 1000ms;
  animation-iteration-count: infinite;
  animation-timing-function: linear;  
}
    
@keyframes spinAnim {
    from {
        transform:rotate(0deg);
    }
    to {
        transform:rotate(360deg);
    }
}
  </style>       
</div>

Top ! J’étais parti à jeter un coup d’oeil aussi du coup j’avais pondu une base fonctionnelle :

<div style="width:90px; min-height:80px;" class="cmd tooltips cmd-widget cursor" data-type="action" data-subtype="other" data-cmd_id="#id#" data-cmd_uid="#uid#">
	<center>
		<span class="cmdName" style="font-weight: bold;font-size : 12px;display: none;">#valueName#</span><br>
		<span style="margin-top: 5px;width:80px; height:80px;" class="iconCmd"></span>
	</center>
<!-- Ne Pas Supprimer gros -->
	<script class="createWidgetInfo" type="text/javascript">//<![CDATA[{"type":"0","version":"1","size":"2.5","icon1":"<i class='icon jeedom-ventilo'></i>","icon2":"<i class='icon techno-ventilateur'></i>"}]]></script>
<!-- Ne Pas Supprimer -->
	<script>
	if(jeedom.cmd.normalizeName('#name#') == 'on'){
		$('.cmd[data-cmd_uid=#uid#] .iconCmd').append('<i class="icon techno-ventilateur"></i>');
	}else{
		$('.cmd[data-cmd_uid=#uid#] .iconCmd').append('<i class="icon jeedom-ventilo spinMe"></i>');
	}
	  
	jeedom.cmd.update['#id#'] = function(_options){
		if(jeedom.cmd.normalizeName('#name#') == 'on'){	
		  if(parseInt(_options.display_value) >= 1 ) {
			  $('.cmd[data-cmd_uid=#uid#]').hide();
		  }else{
			  $('.cmd[data-cmd_uid=#uid#]').show();
		  }
		}else{
		  if(parseInt(_options.display_value) <= 0 ) {
				$('.cmd[data-cmd_uid=#uid#]').hide();
			}else{
				$('.cmd[data-cmd_uid=#uid#]').show();
			}
		}
	}
	jeedom.cmd.update['#id#']({display_value:'#state#'});
	
	$('.cmd[data-cmd_uid=#uid#] .iconCmd').on('click', function () {
		jeedom.cmd.execute({id: '#id#'});
	});
	</script>
  <style>
.spinMe {
  display:inline-block;
  font-size:45px!important;
  width:29px;
  height:29px;
  animation: spinAnim 700ms infinite linear;
}

@keyframes spinAnim {
  from {
    -webkit-transform: rotate(0deg);
  }
  to {
    -webkit-transform: rotate(359deg);
  }
}
  </style>
</div>

Merci pour tout !

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.