2011-01-08 11 views
0

Ich habe ein Menü mit auf der linken Seite 4 <li> Elemente, und auf der rechten Seite gibt es 4 Divs, eins pro Element, und die Eingabe eines Elements mit der Maus sollte eine der divs anzeigen . so etwas wieMootools: Fading zwischen Divs im Menü

<ul><li onmouseover="javascript:showDiv("div1");">one</li><li onmouseover="javascript:showDiv("div2");">two</li>(4 li)</ul> 

wo showDiv (id) ein div zeigt und verbirgt die andere div.

Die divs:

<div id="menu1">menu1</div> 
<div id="menu2" style="display:none;">menu2</div> 
<div id="menu3" style="display:none;">menu3</div> 
<div id="menu4" style="display:none;">menu4</div> 

Javascript-Code:

function fadeBetweenDivs(div1, div2) { 
$$(div1).fade("out"); 
(function(){ 
    $$(div1).setStyles({ 
    display: 'none', 
    opacity: 0 
    }); 
}).delay(150); 
(function(){ 
    $(div2).setStyles({ 
    display: 'block', 
    opacity: 0 
    }); 
}).delay(150); 
$$(div2).fade("in"); 
} 
function findDiv() { 
var arrayDiv = ["menu1","menu2","menu3","menu4"]; 
for (i=0;i<arrayDiv.length;i++) { 
    var blockDiv = document.getElementById(arrayDiv[i]).style.display; 
    if (blockDiv = "block") { 
    var viewedDiv = arrayDiv[i]; 
    return viewedDiv; 
    } 
} 
} 
function showDiv(showdiv) { 
var hidediv = findDiv(); 
fadeBetweenDivs(hidediv,showdiv); 
} 

Der Code addEvent usw. funktioniert, werde ich es hier nicht einfügen. Die ausgeführte Funktion ist showDiv ("div id"); .

Ich kann das Problem nicht finden. Kannst du mir sagen, wie es funktioniert oder zumindest eine einfachere Möglichkeit, die divs zu verblassen?

(Mootools funktioniert, ich bin mit Joomla)

Antwort

0

Es gibt viele Fehler im Code sind. Ich habe versucht, ein kleines Beispiel zu geben, das Ihnen hilft, das Problem zu verstehen und leicht eine Lösung zu finden. Hoffe es hilft!

http://goo.gl/TzlSt

Wenn Sie irgendwelche Zweifel haben, zögern Sie nicht mich fragen;)

+0

'$$ ('Menü. ') Verblassen (0) .setStyle (' display', 'none'.); '- Fade ist asynchron und kann nicht so verkettet werden, es wird es effektiv verstecken wegen der Anzeige und dann tween die Verblassung zu 0 aber nicht so, dass der Benutzer sehen kann. Verwenden Sie 'el.set (" tween ", {onComplete: function() {this.element.setStyle (" display "," none ");}). fade (" 0 ");' - obwohl Sie 'el .get ("tween"). removeEvents(); 'Bevor Sie andere Tweens wie Fade-In machen, sollten Sie auch die Selektoren zwischenspeichern - dies kann sehr langsam/ineffektiv mit einem großen Datensatz und einem älteren Browser sein. p.s. dies ist für 1.2 also nicht joomla 1.5 (außer custom'd) –

+0

Right Dimitar! Es war nur ein einfaches Beispiel, Ken den Weg zur Lösung dieses Problems wissen zu lassen! Dank lassen Sie mich und ihn wissen, wie der Code verbessert werden kann. Übrigens wusste ich über Fade, aber es war nur eine Möglichkeit, die Deckkraft "zurückzusetzen", und zwar mit setStyle ('opacity', 0). Um dem Benutzer den Effekt zu zeigen, kann ein anderer Weg durch Verketten eines Fx.Morphs gemacht werden. Ich stimme dir auch über Caching zu .. wenn ich 5 Minuten habe werde ich den Code reparieren;) – stecb

+0

Ich weiß, dass du das weißt, aber die Person, die die Frage gestellt hat oder die, die die Lösung betrachten wird, kann das nicht. :) –