2016-04-26 15 views
1

enter image description hereZyklus durch Klassen auf JQuery animieren

Ich versuche, eine Animation zu erstellen, wo, wenn Sie auf die Schaltfläche die Kreise um den Pfad und ändert die Größe animieren klicken. Ich bin mir nicht sicher, wie ich die Klassen beim nächsten Klick durchlaufen würde.

http://bluemoontesting.co.uk/bluemoon2016/people.html

Ich bin mit einem svg und haben die Elemente mit diesem bisher gezielt:

<script> 
$(".animate-slider").click(function() { 
$('.st7').toggleClass("top-left"); 
$('#XMLID_292_').toggleClass("left"); 
$('#XMLID_293_').toggleClass("center-right"); 
$('#XMLID_297_').toggleClass("top-right"); 
$('#XMLID_301_').toggleClass("top"); 
$('#XMLID_283_').toggleClass("top-center"); 
}); 
</script> 

Wenn jemand mir helfen könnte ich :)

Dank sehr dankbar sein würde

+0

Wenn Sie sagen, „auf dem nächsten Klick“, meinst du dich auf jedem Klick einen Übergang machen willst oder die gesamte Sequenz auf dem ersten klicken und dann vielleicht zurücksetzen? –

+0

Hallo, mein Ziel ist, dass die Kreise bei jedem Klick Klassen tauschen. Wenn du auf den Link i http://bluemoontesting.co.uk/bluemoon2016/people.html klickst und auf "animate" klickst, siehst du, dass die Animationsgröße und -position animiert ist. Ich möchte, dass diese Schleife im Grunde so bleibt, dass der Kreis mit dem Text umherläuft. Hoffe, das macht Sinn! – Shaun

+0

Keep Looping ohne den Knopf klicken, meinen Sie? – dtanders

Antwort

1

Ich würde einen etwas anderen Ansatz nehmen. Anstatt Klassen zu wechseln, um sie auf mehr als zwei Positionen zu verschieben, müssen Sie stattdessen die Klassen umschalten, die den einzelnen Elementen zugewiesen sind. Wenn Sie die Klassennamen in einem Array speichern, können Sie sie im Array verschieben, um die Position zu durchlaufen, in der sich jedes Element befindet. Ich habe eine simplified example erstellt.

$(document).ready(function() { 
    var steps = ['right', 'bottom-right', 'bottom-left', 'left', 'top'], 
    allClasses = steps.join(' '); 
    $('#go').click(function() { 
    $('#a').removeClass(allClasses).addClass(steps[0]); 
    $('#b').removeClass(allClasses).addClass(steps[1]); 
    $('#c').removeClass(allClasses).addClass(steps[2]); 
    $('#d').removeClass(allClasses).addClass(steps[3]); 
    $('#e').removeClass(allClasses).addClass(steps[4]); 
    steps.push(steps.shift()); // move first element to the end 

    // to cycle in the other direction you would pop and unshift instead 
    // steps.unshift(steps.pop()); // move last element to the beginning 
    }); 

}); 
+0

Das ist perfekt! Danke, dass du mir geholfen hast :) – Shaun

+0

Hallo, nochmals vielen Dank, dass du mir dabei geholfen hast. Schätze es wirklich. Ich frage mich, ob Sie mir einen Einblick geben können, wie Sie es weiterentwickeln können. Was ich wirklich gerne tun würde, ist, wenn der Benutzer auf den Kreis klickt, geht es in die Klasse "#c" und die anderen Kreise drehen sich damit. Gibt es einen offensichtlichen Weg, dies zu tun? Oder ist es wirklich schwer? – Shaun

0

Sie könnten nur setInterval verwenden wie so:

var $st7 = $('.st7'); //class selectors can be expensive, so cache them 
function rotate() { 
    $st7.toggleClass("top-left"); 
    $('#XMLID_292_').toggleClass("left"); 
    $('#XMLID_293_').toggleClass("center-right"); 
    $('#XMLID_297_').toggleClass("top-right"); 
    $('#XMLID_301_').toggleClass("top"); 
    $('#XMLID_283_').toggleClass("top-center"); 
} 

//2000 is milliseconds, so that's two seconds 
var rotateIntervalId = setInterval(rotate, 2000); 

//optionally consider stopping/starting the effect on mouse hover/exit 
$('#Layer_1').on('hover', function() { 
    clearInterval(rotateIntervalId); 
}).on('blur', function() { 
    rotateIntervalId = setInterval(rotate, 2000); 
});