2016-04-11 9 views
0

Ok, ich habe dynamisch div für eine Legende in einem Diagramm mit der Klasse .legend erstellt.Div auf Schweben - machen Sie es durch und ändern Sie seine Opazität, ohne zu blinken

Der Benutzer muss in der Lage sein, auf Diagrammlinien zu schweben (um seine Werte zu sehen), aber nicht durch die Legende div, die über dem Diagramm liegt.

enter image description here

Ich habe versucht, mit pointer-events:none wie folgt aus:

$("#placeholder").on({ 
    mouseenter: 
     function() 
     { 
     $(".legend").css("opacity", "0.2"); 
     $(".legend").css("pointer-events", "none"); 
     }, 
    mouseleave: 
     function() 
     { 
     $(".legend").css("opacity", "1"); 
     $(".legend").css("pointer-events", "auto"); 
     } 
    }, ".legend" 
); 

... und es funktioniert, aber es blinkt bei jeder Mausbewegung. Wie jedes Mal, wenn ich Zeiger innerhalb dieses div verschiebe, ob ich div verließ oder nicht, löscht es das Ereignis.

Gibt es einen reibungsloseren Weg, dies zu tun?

Der beste Weg wäre, wenn ich könnte, auf dem erste Maus eingeben, alle Zuhörer Mausereignis stoppen für die div außer mouseleave, und nachdem ich div mit Zeigern, verlassen sollte es wieder befestigen.

HTML-Code sieht wie folgt aus:

<div id="placeholder"> 

... 

    <div class="legend"> 
    <div style="position: absolute; width: 114px; height: 48px; top: 17px; right: 19px; opacity: 0.85; background-color: rgb(255, 255, 255);"></div> 
    <table style="position:absolute;top:17px;right:19px;;font-size:smaller;color:#545454"> 
     <tbody> 
     <tr><td class="legendColorBox"><div style="border:1px solid #ccc;padding:1px"><div style="width:4px;height:0;border:5px solid darkorange;overflow:hidden"></div></div></td><td class="legendLabel">Temperature (C)</td></tr> 
     <tr><td class="legendColorBox"><div style="border:1px solid #ccc;padding:1px"><div style="width:4px;height:0;border:5px solid blue;overflow:hidden"></div></div></td><td class="legendLabel">Minimum: 22.48 C</td></tr> 
     <tr><td class="legendColorBox"><div style="border:1px solid #ccc;padding:1px"><div style="width:4px;height:0;border:5px solid red;overflow:hidden"></div></div></td><td class="legendLabel">Maximum: 24.85 C</td></tr> 
     </tbody> 
    </table> 
    </div> 

... 

</div> 

Irgendwelche Ideen, Abhilfen oder Ratschläge gebeten.

+0

Können Sie Ihre HTML-Struktur zeigen? – Harish

+0

Ich bearbeitet, HTML-Code hinzugefügt. – Tinmar

+0

Es kann mit reinem CSS getan werden. Warten. – Harish

Antwort

1

Try in Fiddle.

Verwenden Sie folgendes Skript.

$("#placeholder").mouseenter(function() { 
    $(".legend").animate({opacity: 0.25}, 600); 
}).mouseleave(function() { 
    $(".legend").animate({opacity: 1}, 600); 
}); 
+0

OK, erstes Problem ist: Ich kann nicht durch '.legend' 'div' mit Ihrem Code (Sie setzen nie' pointer-events' auf 'none') und es beginnt auf 0,2 verblassen, wenn ich den Zeiger auf # Platzhalter setzen nicht auf '.legend'. Zweitens: "opacity" wird nur dann auf 1 zurückgesetzt, wenn ich '# placeholder' verlasse, nicht' .legend' 'div'. Ich hoffe, dass Sie richtig verstanden haben, was ich versuche ... – Tinmar

+0

Ändern Sie Selektor und Code wie oben. Der Code, den Sie für zwei verschiedene Ereignisse erwartet haben. Für Mausereignis von '# placeholder' und' .legend'. Ich denke dafür brauchen wir Javascript. Warten Sie eine Weile. – Harish

+0

Wird Ihnen das helfen? Ich habe Fiddle Link aktualisiert. – Harish

Verwandte Themen