Archiv verlassen und diese Seite im Standarddesign anzeigen : link aufleuchten lassen (komplexer als sonst)
wie kann ich einen link (bzw beliebigen anderen text) aufleuchten und bei MouseOut langsam wieder langsam zur ursprungsfarbe zurückkehren lassen?
in diesem zusammenhang: was ist DOM?
Felix Kaiser
21.09.2002, 19:52
DOM bezeichnet das Document-Object-Model, eine Methode mit sämtliche Objekte im Dokument auch gezielt mittels JavaScript in einer Objekthierarchie abgerufen und verändert werden können.
Ich habe vor kurzer Zeit auch soetwas gebaut, schematisch so: Ich habe von jedem Link eine Objektinstanz in einem Array abgelegt. Jedem Link habe ich Zustandinformationen zugewiesen. Am Ende des Skriptes wird ein Timer gestartet, welcher im Interval von 50ms aufgerufen wird. Er ruft von jedem einzelnen Link den Zustand ab und ändert ggf. Farbeigenschaften:
<script type="text/javascript"><!--
var menus = new Array("foo");
function CheckItem(item)
{
if (item.ItemState) return;
menus[menus.length] = item;
item.ItemState = true;
item.ItemValue = 0xF0;
}
function MenuOver(item)
{
CheckItem(item);
item.ItemDirection = true;
}
function MenuOut(item)
{
CheckItem(item);
item.ItemDirection = false;
}
function HexByte(value)
{
var hc = new Array("0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F");
var h = (value >> 4) & 0x0F;
var l = value & 0x0F;
return hc[h]+hc[l];
}
function RGB(red,green,blue)
{
return "#"+HexByte(red)+HexByte(green)+HexByte(blue);
}
function MenuHover()
{
for (var i = 1; i < menus.length; i++) {
var item = menus[i];
if (item.ItemDirection && (item.ItemValue > 0xB0)) {
item.ItemValue -= 4;
item.style.backgroundColor = RGB(item.ItemValue,0xFF,item.ItemValue);
}
if (!item.ItemDirection && (item.ItemValue < 0xF0)) {
item.ItemValue += 2;
item.style.backgroundColor = RGB(item.ItemValue,0xFF,item.ItemValue);
}
}
}
setInterval("MenuHover();",50);
//--></script>
Dann als fertiger Link sähe es so aus:
<a href="download.html" onMouseOver="MenuOver(this);" onMouseOut="MenuOut(this);">Downloads</a>
mmm
ok, so weit so gut,
aber was ist, wenn ich die linkfarbe nicht -bg ändern möchte?
wenn ich item.style.color=... schreibe verändert sich garnichts mehr :/
außerdem habe ich das so gemeint, dass der link aufleuchtet (schnell, wie beim normalen a:hover) und dann erst bei MouseOut langsam zur ursprungsfarbe zurückkehrt.
Felix Kaiser
22.09.2002, 12:46
Mit style.color funktioniert alles bestens. Wichtig ist Groß/Kleinschreibung beachten. Zu dem würde ich dir empfehlen, ggf. den Timerinterval zu ändern, wenns langsamer gehn soll und vorallem auch die Farbwerte zu ändern.
RGB(item.ItemValue,0xFF,item.ItemValue);
wie verändere ich hier die farben? *verwirrtguck*
Felix Kaiser
22.09.2002, 13:33
RGB ermittelt aus einem Rot, einem Grün und einem Blauwert eine Farbe. Im Beispiel ist der Grünwert fest (0xFF / 255) und die über den Timer veränderten Laufwerte, werden für Rot und Blau genutzt.
Der Höchstwert für den Laufwert ist 0xF0 (240) und der Mindestwert ist 0xB0 (176). Im Normalzustand ist er 0xF0 (also sehr hell). Fährt man mit der Maus drüber, wird er kleiner, die Farbe wird also dunkler.
kann ich das nicht einfach mit #ffffff ´bzw #f0ffff (et c.) schreiben?
Felix Kaiser
22.09.2002, 14:33
Nein, die Farbwerte werden einzeln berechnet und zusammengefügt, damit der gewünschte Effekt entsteht.
mmm
habe hier nen anderen quälkot:
##################################
fadeColor = "#0090e0"; // Farbe des Fade Effektes
stepIn = 30; // Zeit bis zur Fade Farbe
stepOut = 20; // Zeit bis zur Normal Farbe
autoFade = true;
sloppyClass = true;
hexa = new makearray(16);
for(var i = 0; i < 10; i++)
hexa[i] = i;
hexa[10]="a"; hexa[11]="b"; hexa[12]="c";
hexa[13]="d"; hexa[14]="e"; hexa[15]="f";
document.onmouseover = domouseover;
document.onmouseout = domouseout;
fadeColor = dehexize(fadeColor.toLowerCase());
var fadeId = new Array();
function dehexize(Color){
var colorArr = new makearray(3);
for (i=1; i<7; i++){
for (j=0; j<16; j++){
if (Color.charAt(i) == hexa[j]){
if (i%2 !=0)
colorArr[Math.floor((i-1)/2)]=eval(j)*16;
else
colorArr[Math.floor((i-1)/2)]+=eval(j);
}
}
}
return colorArr;
}
function domouseover() {
if(document.all){
var srcElement = event.srcElement;
if ((srcElement.tagName == "A" && autoFade && srcElement.className != "nofade") || srcElement.className == "fade" || (sloppyClass && srcElement.className.indexOf("fade") != -1)) {
if (!srcElement.startColor) {
srcElement.startColor = (srcElement.style.color)? srcElement.style.color: srcElement.currentStyle.color;
srcElement.startColor = dehexize(srcElement.startColor.toLowerCase());
}
fade(srcElement.startColor,fadeColor,srcElement.uniqueID,stepIn);
}
}
}
function domouseout() {
if (document.all){
var srcElement = event.srcElement;
if ((srcElement.tagName == "A" && autoFade && srcElement.className != "nofade") || srcElement.className == "fade" || (sloppyClass && srcElement.className.indexOf("fade") != -1)) {
fade(fadeColor,srcElement.startColor,srcElement.uniqueID,stepIn);
}
}
}
function makearray(n) {
this.length = n;
for(var i = 1; i <= n; i++)
this[i] = 0;
return this;
}
function hex(i) {
if (i < 0)
return "00";
else if (i > 255)
return "ff";
else
return "" + hexa[Math.floor(i/16)] + hexa[i%16];
}
function setColor(r, g, b, element) {
var hr = hex(r); var hg = hex(g); var hb = hex(b);
element.style.color = "#"+hr+hg+hb;
}
function fade(s,e,element,step) {
var sr = s[0]; var sg = s[1]; var sb = s[2];
var er = e[0]; var eg = e[1]; var eb = e[2];
if (fadeId[0] != null && fade[0] != element) {
var orig = eval(fadeId[0]);
setColor(orig.startColor[0],orig.startColor[1],orig.startColor[2],orig);
var i = 1;
while(i < fadeId.length) {
clearTimeout(fadeId[i]);
i++;
}
}
for(var i = 0; i <= step; i++) {
fadeId[i+1] = setTimeout("setColor(Math.floor(" +sr+ " *(( " +step+ " - " +i+ " )/ " +step+ " ) + " +er+ " * (" +i+ "/" +
step+ ")),Math.floor(" +sg+ " * (( " +step+ " - " +i+ " )/ " +step+ " ) + " +eg+ " * (" +i+ "/" +step+
")),Math.floor(" +sb+ " * ((" +step+ "-" +i+ ")/" +step+ ") + " +eb+ " * (" +i+ "/" +step+ ")),"+element+");",i*step);
}
fadeId[0] = element;
}
##############################
der funkt aus irgendeinem grund nicht ganz, d.h. egal, was ich bei stepOut schreibe, der fadeOut dauert immer genausolange wie der fadeIn (und warum kann ich bei diesem quellcode normale farbangaben machen?).
PHiLiPWEB.de
24.02.2003, 14:40
ich habe mal eine frage zum fade:
gibt es eine möglichkeit, dass bild von schwarz/weiß ins farbige zu faden?? also das ich ein farbiges bild einfüge und das dann durch das script bei MouseOut schwarz/weiß ist und bei MouseOver wieder farbig??
Felix Kaiser
24.02.2003, 16:31
Ja, aber nur beim Internet Explorer, siehe CSS Image-Filter.
PHiLiPWEB.de
26.02.2003, 15:41
ich habe hier im forum und bei ggole nichts gefunden...
wie geht das genau??
Felix Kaiser
26.02.2003, 18:27
http://selfhtml.teamone.de/css/eigenschaften/filter.htm
Den Quatsch bräuchtest nur via DOM (siehe ebenfalls SelfHTML) ansprechen und ändern...
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.