2017-06-03 5 views
0

Ich habe ein Problem. Ich wollte dovs Hintergrund beim Schweben umwandeln, es funktioniert gut, außer wenn ich die Maus aus dem Div ziehe, funktioniert der Übergang dann nicht. Wie kann ich das beheben?Transition funktioniert nicht auf Schwebeflug

Wenn ich die Maus ausschalte, wird sofort die ursprüngliche Flagge angezeigt.

$("#flag").hover(function(){ 
$(this).css({ 
'background': 'url("http://visionfi.pl/wp-content/uploads/2017/06/EN.png")', 
'background-size':'cover', 
'transition':'1 s' 
}); 
}, function(){ 
$(this).css({ 
'background': 'url("http://visionfi.pl/wp-content/uploads/2017/06/PL.png")', 
'background-size':'cover', 
'transition':'1 s' 
}); 
}) 
+0

ich gerade entdeckt, dass der zweite Übergang funktioniert, wenn die erste beendet ist. Irgendein Weg, um es herum zu arbeiten? – Dassin

+0

Kann man HTML-Code hinzufügen und ein Schnipsel machen bitte – SilverSurfer

+0

Nicht wirklich, alles läuft auf WordPress :( – Dassin

Antwort

0

try jQuery stop() wie so:

$("#flag").hover(function(){ $(this).animate({ 'background': 'url("http://visionfi.pl/wp-content/uploads/2017/06/EN.png")', 'background-size':'cover' }, 1000); }, function(){ $(this).stop(true,false).animate({ 'background': 'url("http://visionfi.pl/wp-content/uploads/2017/06/PL.png")', 'background-size':'cover' }, 1000); })

dies sollte die Animation Warteschlange unterbrechen und zurücksetzen, bereit für die nächste.

+0

'css()' fügt nicht zu Warteschlange Stapel. 'Stop()' wird nichts tun – charlietfl

+0

Ja funktioniert es nicht :( – Dassin

+0

bearbeitet, um @charlietfl's Punkt aufzunehmen. Wenn das nicht funktioniert dann habe ich nichts, sorry. – Sam0

0

Ihr Code ist fast Ok, ändern Sie nur den Übergangsteil 1 s zu 1s. Es ist eine Syntax Problem:

$("#flag").hover(function(){ 
 
$(this).css({ 
 
    'background': 'url("http://visionfi.pl/wp-content/uploads/2017/06/EN.png")', 
 
    'background-size':'cover', 
 
    'transition':'3s' 
 
})}, function(){ 
 
$(this).css({ 
 
    'background': 'url("http://visionfi.pl/wp-content/uploads/2017/06/PL.png")', 
 
    'background-size':'cover', 
 
    'transition':'3s' 
 
}) 
 
})
div { 
 
    width: 100px; 
 
    height: 100px; 
 
    background: grey; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<p>DIV HOVER:</p> 
 
<div id="flag"></div>

+0

inkrementiert werden können. Wenn du den Mauszeiger darüber bewegst, beginnt der Übergang, aber wenn du die Maus loslässt, während sie weitergeht, wird die Animation anhalten und sofort zu einer anderen Flagge wechseln. – Dassin

+0

Willst du die Flagge langsam wechseln, wenn die Maus nicht richtig? – SilverSurfer

+0

I will nur, dass es beim Schweben und beim Abheben der Maus übergeht, während der erste Übergang ohne den Sprung ef läuft fekt. Das ist das Problem. – Dassin

0

CSS Übergang kann nicht in der Mitte eines Übergangs angehalten oder gestoppt werden. Wenn wir die Übergangsdauer in der Mitte eines Übergangs zurücksetzen, stoppt sie einfach den letzten Übergang.

Und JQUERY unterstützt keine Hintergrundänderung mit Übergangseffekt, der so effizient ist wie CSS. JQUERY Übergang wird wie fadeOut->change background Image->fadeIn sein. das wird nicht nett sein, oder?

Alternativ könnten Sie die Ereignisse mouseover und mouseout in eine Warteschlange stellen, um sie nacheinander auszulösen.

Hinweis: Natürlich wird es löst die mouseover und mouseout Ereignisse in letzter Zeit (wie wenn wir mouseover und sofort mouseout dann die mouseout nur ausgeführt werden, nachdem das mouseover Ereignis Finishing, die 1 Sekunde). Aber wir haben keine Alternative.

var animating = false, 
 
    funqueue = []; 
 
$("#flag").hover(function() { 
 
    funqueue.push(function() { 
 
    //console.log("mouseover"); 
 
    $("#flag").css({ 
 
     'background': 'url("http://visionfi.pl/wp-content/uploads/2017/06/EN.png")', 
 
     'background-size': 'cover', 
 
     'transition': '1s' 
 
    }); 
 
    }); 
 
    if (!animating) executeFunctionQueue(); 
 
}, function() { 
 
    funqueue.push(function() { 
 
    //console.log("mouseout"); 
 
    $("#flag").css({ 
 
     'background': 'url("http://visionfi.pl/wp-content/uploads/2017/06/PL.png")', 
 
     'background-size': 'cover', 
 
     'transition': '1s' 
 
    }); 
 
    }); 
 
    if (!animating) executeFunctionQueue(); 
 
}); 
 

 
function executeFunctionQueue() { 
 
    var funct = funqueue.shift(); 
 
    if (funct) { 
 
    animating = true; 
 
    funct.call(); 
 
    setTimeout(function() { 
 
     if (funqueue.length == 0) animating = false; 
 
     else 
 
     executeFunctionQueue(); 
 
    }, 1000); 
 
    } 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="flag" style="height:300px; background:url('http://visionfi.pl/wp-content/uploads/2017/06/PL.png'); background-size:cover; transition:1s"> 
 
</div>