2016-05-29 2 views
0

Ich versuche, aktuelle Offset eines Elements während CSS-Animation zu erhalten. Ich bin Brennen Animation Trog jquery wie folgt aus:Update-Element Offset während CSS-Animation jQuery

$('.left').css('margin-left', '50%'); 

Natürlich Element bekam alle Übergänge in CSS so .css- in Animation verwandelt. Dann versuche ich Strom wie das Offset zu erhalten:

var left = $(".left"); 
var Loffset = left.offset(); 
console.log(Loffset.left); 

Das Problem ist, dass während der Animation nicht autamatically aktualisiert versetzt ist. Und ich möchte Element in bestimmter Position fangen.

Thnx im Voraus!

+0

Haben Sie 'offset' von Element zu bekommen, wenn die Animation? – Mohammad

+0

ja ich möchte es auf jedem Pixel aktualisiert zu halten - weil ich es mit anderen Wert vergleichen muss, und wenn es den Wert dann Feuer etwas – user3267302

Antwort

2

Sie können den aktuellen Offset des Elements unter Verwendung der step-Eigenschaft in jquery animate() abrufen.

$("div").animate({ 
 
    "margin-left": "50%" 
 
},{ 
 
    duration: 3000, 
 
    step: function(){ 
 
     console.log($(this).offset().left); 
 
    } 
 
});
div { 
 
    width: 100px; 
 
    height: 100px; 
 
    background: green; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div></div>

+0

ja ich weiß, aber CSS-Animationen funktioniert besser für mich und bessere Leistung. Ich versuche nur etwas wie "css animation in progress" zu finden – user3267302

0

fand ich einen Weg, dies zu tun. Zunächst einmal, ich habe eine Funktion aus, die kontinuierlich feuert:

var myFunction = function() { 
     var left = $('.left'); 
     var Loffset = left.offset(); 
     console.log(Loffset.left); 
     if (windowWidthQuarter == Loffset.left) { 
      /* here goes code */   
     } 
}; 
var timer = setInterval(myFunction, 0); 

Es versetzt jedes 0 miliseconds (non-stop) zu überprüfen. Dann, wenn der Übergang über ich es herunterzufahren:

$(".left").on("transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd", function(){ 
    clearTimeout(timer); 
});