2012-05-03 22 views
8

Also, ich habe diese h1 Elemente, die Links sind und ich möchte eine Klasse hinzufügen und verblassen diese Klasse in sobald das Element wurde über schwebte, und dann onMouseOut die Klasse entfernt haben, während die Klasse verblassen. Aber die Verwendung der Fade-Funktion macht nichts für mich. Sehen, wie es das Element verbirgt. Irgendwelche Ideen?jQuery .addClass und .fadeIn?

jQuery(".categories h1 a").hover(
function() { 
    jQuery(this).fadeIn("slow").addClass("active"); 
}, 
function(){ 
    jQuery(this).fadeOut("slow").removeClass("active"); 
}); 
}); 

Vielen Dank!

EDIT :::

jQuery("h1").hover(function() { 
     jQuery(this).stop().animate({ backgroundColor: "#a7bf51"}, 800); 
     },function() { 
     jQuery(this).stop().animate({ backgroundColor: "#FFFFFF"}, 800); 
     }); 
}); 
+1

Clarity bitte, was willst du einblenden? Möchten Sie, dass der Link eingeblendet wird, wenn Sie den Mauszeiger über den h1 halten? Ihr Code wird ausgeblendet, wenn er funktioniert, würde nur der Server die Verbindung ausblenden, aber dann können Sie ihn nicht wieder einblenden. – b01

+0

Nein. Ich möchte die Klasse h1> ein Tag einblenden. und dann auf Mouse ausblenden –

+1

@AaronBrewer Siehe >> http://jsfiddle.net/NLChW/4/ << mit animieren –

Antwort

8

Verwenden Sie die jQuery UI .addClass und .removeClass.

$(function() { 
    $(".categories h1 a").hover(function() { 
     $(this).stop(true,true).addClass("active", 500); 
    }, function() { 
     $(this).stop(true,true).removeClass("active", 100); 
    });  
}); 

DEMO (Aus irgendeinem Grund, es animieren nicht richtig (fade) zum ersten Mal .. aber dann weiter funktioniert es gut)

Edit: für Vollständigkeit aktualisiert. Sie können auch .animate verwenden, um den gewünschten Effekt zu erzielen.Siehe unten,

$(function() { 
    $(".categories h1 a").hover(function() { 
     $(this).stop().animate({ 
      backgroundColor: "#a7bf51" 
     }, 800); 
    }, function() { 
     $(this).stop().animate({ 
      backgroundColor: "#FFFFFF" 
     }, 800); 
    }); 

}); 

DEMO

+0

Das ist ein interessanter Weg, es zu tun. Schau dir meine Antwort unten an, ich finde es sauberer. Gibt es einen Grund, warum du die Stop-Funktion und addClass verwendest, anstatt sie umzuschalten? –

+0

@ChristopherMarshall Grund für .stop ist es, den Fade-Übergang zu stoppen, oder wenn Sie gleichzeitig über mehrere Links schweben, werden mehrere Animationen gleichzeitig angezeigt. Nun, Sie könnten es sehen, wenn Sie eine längere Dauer haben (1000ms) –

+0

Interessant, Danke für die Erklärung! Ich sollte keine Annahmen über die Mausgeschwindigkeit des Benutzers machen haha. –

2

Klingt wie Sie die Stile der Klasse wollen in verblassen Sie in belebter aussehen sollte() dafür:.

fadeIn verblasst einfach in die Element.

+0

In Ordnung, ich habe versucht, diese Animate-Funktion zu verwenden und kann nicht scheinen, es sogar jetzt arbeiten zu lassen ... Siehe aktualisierte Frage. –

+1

@AaronBrewer Siehe >> http://jsfiddle.net/NLChW/4/ << mit animieren –

+0

@Vega: Heya Vega, das funktioniert nicht. http://squaredcube.com/beta/ –

1

Ich glaube nicht, dass Sie Fade zwischen Klassen überkreuzen können, aber Sie können die animate Funktion verwenden. animate können Sie jede CSS-Variable über eine bestimmte Zeit beeinflussen.

Ich weiß, dass einige Styling aus der CSS-Datei entfernt, aber wieder, ich glaube nicht, jQuery verblasst zwischen den Klassen kreuzen.

+0

In Ordnung, ich habe versucht, diese Animate-Funktion zu verwenden und kann nicht scheinen, es sogar jetzt zu arbeiten ... Siehe aktualisierte Frage. –

1

Wenn Sie die jQuery UI-Bibliothek geladen haben, können Sie einen zusätzlichen Parameter für die Funktion toggleClass festlegen.

Stellen Sie Ihre Deckkraft über CSS ein.

h1 a { 
    opacity:0.8; 
} 

h1 a.hovered { 
    opacity: 1.0; 
} 

dann

jQuery(".categories h1 a").hover(function(e) { 
    $(this).toggleClass('hover', 1000); 
} 

Der 1000 ist die Millisekunden-Zähler auf dem Ereignis. Daher sollte der Effekt in einer Sekunde auf eine Deckkraft von 1,0 und in einer Sekunde auf eine Schwundebene ausgeblendet werden, wenn er nicht schwebte.

+1

Deshalb habe ich gesagt "Wenn Sie die jQuery UI-Bibliothek geladen haben". ;} –

0

die Sie interessieren, und hier ist die jsFiddle (enter link description here):

<script type="text/javascript"> 
    jQuery(".categories h1").hover(function() { 
      jQuery(this).stop().animate({ "background-color": "#a7bf51"}, 800); 
      jQuery(this).addClass("active"); 
      jQuery(this).find("a").fadeIn("slow"); 
     }, 
     function() { 
      jQuery(this).stop().animate({ "background-color": "#FFFFFF"}, 800); 
      jQuery(this).addClass("active"); 
      jQuery(this).find("a").fadeOut("slow"); 
    }); 
</script> 
<style type="text/css"> 
    .categories h1 { 
     background-color: rgb(200, 200, 200); 
     display: block; 
     padding: 5px; 
     margin: 5px; 
     width: 100px 
    } 
    .categories h1 a { 
     display: none; 
    } 
</style> 
<div class="categories"> 
    <h1><a href="#">Item 1</a></h1> 
    <h1><a href="#">Item 2</a></h1> 
    <h1><a href="#">Item 3</a></h1> 
</div>​ 
3

Wenn Sie möchten, verwenden jquery UI nicht, weil es eine zusätzliche Belastung sein wird, können Sie tun Sie folgendes:

(war nützlich für mich, wenn die 'versteckte' Bootstrap-Klasse in meiner App verwendet wird)

Aufblenden langsam beim Entfernen der Klasse:

$('.myClass').removeClass('hidden').fadeOut(0).fadeIn(10000) 

Abblenden langsam, die Klasse hinzufügen und dann verblassen wieder in:

$('.myClass').fadeOut(1000, function(){ 
    $(this).addClass('hidden'); //or any other class 
}).fadeIn(10000) 

Hoffnung diese jemandes Aufgabe vereinfachen!