J'ai essayé de faire une animation Raphael, ça marche bien et l'animation en charge comme il se doit mais .. Je veux qu'il s'anime ENCORE lorsque vous cliquez sur un texte ou un bouton (un article de raphael en dehors du site div).
Raphael Code est ici:
window.onload = function () { var paper = new Raphael (document.getElementById ('frivardihouse'), 250, 250);
function round(value, precision) { var multiplier = Math.pow(10, precision || 0); return Math.round(value * multiplier) / multiplier; } let ltv = 0.6; let h = 144*ltv; let y = 86+((1-ltv)*144); let ltvtxt = round(ltv * 100); var fillhouse = paper.rect(40.5,230,172.3,0).attr({fill: "#ff6600", stroke: "none"}); var sAnimation = Raphael.animation({ 'width': 172.3, 'height': h, 'x': 40.5, 'y': y, fill: "#ff0066"}, 2000, "backOut") fillhouse.animate(sAnimation); var thehouse = paper.path("M236.5,80.4L128.9,2.1c-1.6-1.1-3.7-1.1-5.3,0L16.1,80.4c-3.5,2.6-1.7,8.1,2.6,8.1l13,0c-1,2.5-1.5,5.3-1.5,8.2l0,122.7c0,12,9.2,21.7,20.6,21.7l150.9,0c11.4,0,20.6-9.7,20.6-21.7l0-122.7c0-2.9-0.5-5.7-1.5-8.2h13C238.2,88.6,240,83,236.5,80.4z M206.7,104.9l0,106.5c0,9-6.9,16.3-15.5,16.3l-129.9,0c-8.5,0-15.5-7.3-15.5-16.3l0-106.5c0-9,6.9-16.3,15.5-16.3l129.9,0C199.8,88.6,206.7,95.9,206.7,104.9z").attr({fill: "#ccc", stroke: "none"}); };
J'ai fait un violon.
J'ai essayé normal cliquez sur les fonctions, mais n'arrive tout simplement pas à le faire fonctionner: (Rien ne se passe. Vraiment frustrant!
4 Réponses :
Ajoutez simplement l'événement click à la classe .clickme
avec jquery.
<script src="https://cdnjs.cloudflare.com/ajax/libs/raphael/2.1.0/raphael-min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div id="frivardihouse"></div> <div class="clickme"> CLICK ME AND REPEAT ANIMATION </div>
Voici le code complet
onload = function () { var paper = new Raphael(document.getElementById('frivardihouse'), 250, 250); function round(value, precision) { var multiplier = Math.pow(10, precision || 0); return Math.round(value * multiplier) / multiplier; } let ltv = 0.6; let h = 144*ltv; let y = 86+((1-ltv)*144); let ltvtxt = round(ltv * 100); var fillhouse = paper.rect(40.5,230,172.3,0).attr({fill: "#ff6600", stroke: "none"}); var sAnimation = Raphael.animation({ 'width': 172.3, 'height': h, 'x': 40.5, 'y': y, fill: "#ff0066"}, 2000, "backOut") fillhouse.animate(sAnimation); var thehouse = paper.path("M236.5,80.4L128.9,2.1c-1.6-1.1-3.7-1.1-5.3,0L16.1,80.4c-3.5,2.6-1.7,8.1,2.6,8.1l13,0c-1,2.5-1.5,5.3-1.5,8.2l0,122.7c0,12,9.2,21.7,20.6,21.7l150.9,0c11.4,0,20.6-9.7,20.6-21.7l0-122.7c0-2.9-0.5-5.7-1.5-8.2h13C238.2,88.6,240,83,236.5,80.4z M206.7,104.9l0,106.5c0,9-6.9,16.3-15.5,16.3l-129.9,0c-8.5,0-15.5-7.3-15.5-16.3l0-106.5c0-9,6.9-16.3,15.5-16.3l129.9,0C199.8,88.6,206.7,95.9,206.7,104.9z").attr({fill: "#ccc", stroke: "none"}); }; $('.clickme').click(function(){ document.getElementById('frivardihouse').innerHTML = ''; onload(); });
$('.clickme').click(function(){ document.getElementById('frivardihouse').innerHTML = ''; onload(); });
C'est tellement bizarre, j'ai déjà essayé ça mais ça n'a pas marché. Je vais essayer de l'implémenter dans mes fichiers originaux :-) Merci!
Avez-vous une idée de la raison pour laquelle j'obtiens cette erreur lorsque je cache et montre la maison? Erreur: attribut
Les erreurs tspan ne se produisent que lorsque l'animation est toujours en cours Avec la modification ci-dessus, cela ne se produit que lorsque la jauge est toujours en cours d'animation et que vous la changez pour la maison. L'animation de la jauge est toujours en cours d'exécution et vous la modifiez en maison et l'animation de la jauge est arrêtée à ce stade et l'animation de la maison est en cours d'exécution.
Sans JQuery oui c'est possible!
Utilisez dispatchEvent (new Event ('load'));
pour déclencher un événement onload à partir de JS ..
<script src="https://cdnjs.cloudflare.com/ajax/libs/raphael/2.1.0/raphael-min.js"></script> <div id="frivardihouse"></div> <div class="clickme"> CLICK ME AND REPEAT ANIMATION </div>
function reFill() { document.getElementById('frivardihouse').innerHTML = ''; onload(); }
Voilà!
si vous cherchez toujours une réponse. Je résoudrais un peu différent de ceux existants. En gros, je voudrais
function round(value, precision) { const multiplier = Math.pow(10, precision || 0); return Math.round(value * multiplier) / multiplier; } function draw() { const paper = new Raphael(document.getElementById('frivardihouse'), 250, 250); const ltv = 0.6; const h = 144 * ltv; const y = 86 + (1 - ltv) * 144; const ltvtxt = round(ltv * 100); const sAnimation = Raphael.animation( { width: 172.3, height: h, x: 40.5, y, fill: '#ff0066', }, 2000, 'backOut', ); paper .path( 'M236.5,80.4L128.9,2.1c-1.6-1.1-3.7-1.1-5.3,0L16.1,80.4c-3.5,2.6-1.7,8.1,2.6,8.1l13,0c-1,2.5-1.5,5.3-1.5,8.2l0,122.7c0,12,9.2,21.7,20.6,21.7l150.9,0c11.4,0,20.6-9.7,20.6-21.7l0-122.7c0-2.9-0.5-5.7-1.5-8.2h13C238.2,88.6,240,83,236.5,80.4z M206.7,104.9l0,106.5c0,9-6.9,16.3-15.5,16.3l-129.9,0c-8.5,0-15.5-7.3-15.5-16.3l0-106.5c0-9,6.9-16.3,15.5-16.3l129.9,0C199.8,88.6,206.7,95.9,206.7,104.9z', ) .attr({ fill: '#ccc', stroke: 'none' }); let fillhouse = null; return { paper, animateInHouse: () => { if (fillhouse) { fillhouse.remove(); } fillhouse = paper.rect(40.5, 230, 172.3, 0).attr({ fill: '#ff6600', stroke: 'none' }); fillhouse.animate(sAnimation); }, }; } let thePaper = null; const pageOnLoad = function () { thePaper = draw(); thePaper.animateInHouse(); }; function onRedraw() { thePaper.animateInHouse(); } window.onload = pageOnLoad;
cherchez-vous toujours des réponses à votre question?