2009-07-23 4 views
2

Ich habe zwei divs (eine davon mit CSS versteckt), die abwechselnd in einem gemeinsamen Raum ein- und ausgeblendet werden, bei Hover.jQuery Hover: Fading in einem versteckten div beim Ausblenden der "default" one

Dies ist das Markup:

<div id="wrap"> 

    <div class="image"> 
     <img src="http://domain.com/images/image.png"> 
    </div> 

    <div class="text hide"> 
     <p>Text text text</p> 
    </div> 

</div> 

Und ich war die Anwendung dieser Code jQuery das Bild ausgeblendet - und im Text, auf schweben Verblassen:

<script type="text/javascript"> 
$(function(){ 
$('#wrap').hover(
     function(){ 
      $('#wrap .image').fadeOut(100, function(){ 
       $('#wrap .text').fadeIn(100);       
      }); 
     }, 
     function(){ 
      $('#wrap .text').fadeOut(100, function(){ 
       $('#wrap .image').fadeIn(100);      
      }); 
     } 
     ); 
}); 
</script> 

Aber das Problem ist, dass Der Text div wird klebrig und wird nicht ausgeblendet - immer, dass die Mausbewegung zu schnell ist.

Wissen Sie, wo kann es die Lösung sein?

stelle ich einen Online-Test auf: http://paragraphe.org/stickytext/test.html

Danke für jeden Tipp

Antwort

3

bewegen Wenn Ihr Wrapper doesn‘ Wenn Sie eine Breite UND Höhe haben, können Sie einige seltsame Ergebnisse erhalten, wenn es verkleinert wird, sobald das Bildelement entfernt wurde. Um zu sehen, fügen Sie einen Rahmen und feste Höhe/Breite um den Wrapper hinzu. Oder verwende mindestens die gleiche Höhe für die Bild- und Textdivs.

<style type="text/css"> 
#wrap { width: 200px; height: 200px; border: 1px solid black; } 
</style> 

ein Codebeispiel entfernt EDITED, die nicht anwendbar war, was Sie erreichen wollen.

+0

ScottE - netter, der Fehler war ja im CSS, ich hatte eine Position: relativ zum Text, den ich geändert habe zu einem negativen oberen Rand, plus ein Schwimmer: links. Ich werde auch die Breite und Höhe einstellen, nur um es zu sichern. – Peanuts

0

Ihr Code nie den Text div ausblendet. Beide Funktionen des Hover-Ereignisses blenden das Bild aus und blenden den Text ein.

+0

wahr! Entschuldigung, ich habe den Code hier zu schnell kopiert. Ich werde das bearbeiten. – Peanuts

0

Sie haben den gleichen Code in beiden Funktionen. Sollten Sie die Selektoren nicht im zweiten Fall ersetzen?

<script type="text/javascript"> 
$(function(){ 
$('#wrap').hover(
    function(){ 
      $('#wrap .image').fadeOut(100, function(){ 
       $('#wrap.text').fadeIn(100); 
      }); 
    }, 
    function(){ 
      $('#wrap.text').fadeOut(100, function(){ 
       $('#wrap.image').fadeIn(100);            
      }); 
    } 
    ); 
}); 
</script> 
+0

Ja, tut mir leid Leute, ich habe hier die Selektoren nicht richtig eingestellt. Gehen Sie es richtig zu bearbeiten. – Peanuts

3

try .stop() auf Hover-out-Funktion, die die Race-Bedingung verhindern, wo Sie schnell Ihre Maus über die divs

<script type="text/javascript"> 
$(function(){ 
$('#wrap').hover(
    function(){ 
      $('#wrap .image').fadeOut(100, function(){ 
       $('#wrap.text').fadeIn(100); 
      }); 
    }, 
    function(){ 
      $('#wrap.text').stop().fadeOut(100, function(){ 
       $('#wrap.image').stop().fadeIn(100);            
      }); 
    } 
    ); 
}); 
</script> 
+0

duckyflip - danke! Dies scheint das klebrige div zu verhindern. Allerdings fällt es den Bildern nun schwer, wieder zurück zu kommen (manchmal kommen sie mitten im Einblenden) – Peanuts

2

Versuchen Sie, die Warteschlange mit:

<script type="text/javascript"> 
$(function(){ 
    $('#wrap').hover(
     function(){ 
      $('#wrap .image').stop(true).fadeOut(100); 
      $('#wrap .image').queue(function(){ 
       $('#wrap.text').fadeIn(100); 
       $(this).dequeue(); 
      }); 
     }, 
     function(){ 
      $('#wrap .image').stop(true).queue(function(){ 
       $('#wrap.text').fadeOut(100); 
       $(this).dequeue(); 
      }); 
      $('#wrap .image').fadeIn(100); 
     } 
    ); 
}); 
</script> 

Die jQuery-Warteschlange pro Element ist, so, was ich versuche, hier zu tun ist, um die Texteffekte unter de Bildwarteschlange zu starten.

Und lassen Sie mich Ihnen einen anderen Vorschlag geben. Wenn Sie diesen Effekt auf verschiedene Bilder anwenden möchten, verwenden Sie die Klasse statt der ID.

... 
    $('.wrap').hover(
     function(){ 
      var wrap = this; 
      $('.image', wrap).stop(true).fadeOut(100); 
      $('.image', wrap).queue(function(){ 
       $('.text', wrap).fadeIn(100); 
       $(this).dequeue(); 
      }); 
.... 

Auf diese Weise müssen Sie nur einmal anrufen.

+0

Serhii - vielen Dank dafür. – Peanuts

0

Dank für alle Tipps:

Ich versuchte, die MouseEnter-/mouseleave Ereignisse zu verwenden, da sie im Detail für die divs zu suchen scheinen sie mit (as seen here) zu tun hat, aber nichts geändert. Da alle üblichen jQuery-Anweisungen nicht reagierten, habe ich wie vorgeschlagen mein CSS überprüft.

Und da war der Trick.

Was ich hatte:

.text p{position:relative; top:-370px; padding: 0 10px} 

war einen riesigen, leeren Raum einrichten, dass der Browser als interpretierte „noch nicht links“ durch die Cursor (bemerkte ich, dass das Überfliegen dass leerer Raum den Text machte zu richtig reagieren).

So wechselte ich zu, dass:

.text {margin-top:-370px; padding: 0 10px; float:left} 

, die den „p“ Tag allein läßt, und positioniert die zweiten Block nach oben in den div, aber ohne eine Spur von leeren Raum dahinter.

Dann über das Snippet, wird es auch funktionieren mit MouseEnter-/moseleave und schweben:

<script type="text/javascript"> 
$(function(){ 
$('#wrap').mouseenter(
     function(){ 
      $('#wrap .image').fadeOut(100, function(){ 
       $('#wrap .text').fadeIn(100);       
      }); 
     } 
     ); 
$('#wrap').mouseleave(
     function(){ 
      $('#wrap .text').fadeOut(100, function(){ 
       $('#wrap .image').fadeIn(100);      
      }); 
     } 
     ); 
}); 
</script> 

Dies ist die verbesserte Version http://paragraphe.org/nice/test.html

+0

Ich habe ein kleines Problem mit meinem, beim ersten Laden der Seite ist der Text (der versteckt werden soll) oben auf dem Bild. Bis Sie den Mauszeiger darüber bewegen, funktioniert es ordnungsgemäß. Wie kann ich den Text beim Laden der Seite ausblenden? – Rob