2 Stimmen

IE6 Unit PNG fix + Javascript Swap Image funktioniert nicht

Ich verwende Unitpngfix für IE6 PNG-Transparenz. Alles bewegt sich gut.

Jetzt muss ich eine Menüschaltfläche in png implementieren, die beim Überfahren mit der Maus ausgetauscht wird. Ich habe Dreamweaver "Verhalten hinzufügen > Bild tauschen" verwendet. Es erzeugt einen Java-Skript-Code.

Skript Bild austauschen:

function MM_preloadImages() { 
var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() {
var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
  d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() 
{ //v3.0

  var i,j=0,x,a=MM_swapImage.arguments; 
  document.MM_sr=new Array; 
  for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null)
   {
       document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];
   }
}

Skript zur Korrektur von Unitpng:

var clear="clear.gif"; //path to clear.gif

document.write('<script type="text/javascript" id="ct" defer="defer" src="javascript:void(0)"><\/script>');var ct=document.getElementById("ct");ct.onreadystatechange=function(){pngfix()};pngfix=function(){var els=document.getElementsByTagName('*'),ip=/\.png/i,al="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='",i=els.length,uels=new Array(),c=0;while(i-->0){if(els[i].className.match(/unitPng/)){uels[c]=els[i];c++;}}if(uels.length==0)pfx(els);else pfx(uels);function pfx(els){i=els.length;while(i-->0){var el=els[i],es=el.style,elc=el.currentStyle,elb=elc.backgroundImage;if(el.src&&el.src.match(ip)&&!es.filter){es.height=el.height;es.width=el.width;es.filter=al+el.src+"',sizingMethod='crop')";el.src=clear;}else{if(elb.match(ip)){var path=elb.split('"'),rep=(elc.backgroundRepeat=='no-repeat')?'crop':'scale',elkids=el.getElementsByTagName('*'),j=elkids.length;es.filter=al+path[1]+"',sizingMethod='"+rep+"')";es.height=el.clientHeight+'px';es.backgroundImage='none';if(j!=0){if(elc.position!="absolute")es.position='static';while(j-->0)if(!elkids[j].style.position)elkids[j].style.position="relative";}}}}}}

HTML-Code:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script src="swapimage.js" language="javascript"></script>
<!--[if lt IE 7]>
<script type="text/javascript" src="unitpngfix.js"></script>
<![endif]--> 
</head>

<body onload="MM_preloadImages('images/ann-nav-on.png')">
<div id="menu"><img src="images/ann-nav-off.png" class="myswap" id="Image1" onmouseover="MM_swapImage('Image1','','images/ann-nav-on.png',1)" onmouseout="MM_swapImgRestore()" /></div>
</body>
</html>

Das Swap-Image-Konzept zusammen mit der png-Transparenz funktioniert in allen Browsern einwandfrei.

Aber ich bekomme einen Fehler im IE6, wenn ich mit der Maus darüber fahre. Ohne Maus über auf anfängliche Seite laden Menü-Schaltfläche mit png-Transparenz ist in IE6 arbeiten, wenn ich die Maus über das Bild nehmen die Swapping-png-Bild kommt aber die Transparenz ist weg.

Ich glaube, das Unitpngfix-Skript wird beim Überfahren mit der Maus deaktiviert.

Benötige einige Vorschläge/Hilfe, um die png-Transparenz beim Überfahren mit der Maus zu aktivieren.

1voto

Laurent Punkte 5812

Die Lösung besteht darin, die Liste aller Bilder auf der Seite durchzugehen und zu prüfen, ob es sich um png-Bilder handelt, und wenn ja, eine css-Eigenschaft "Filter" (die nur vom IE erkannt wird) hinzuzufügen, um den Transparenzeffekt zu erzielen. Dies geschieht beim Laden der Seite, so dass, wenn das Bild ersetzt wird, das neue Bild nicht seine Filter-Eigenschaft gesetzt und erscheint nicht transparent.

Um das Problem zu beheben, müssen Sie beide Skripte zusammen integrieren: Wenn das Hover-Skript das Bild ersetzt, muss es auch das pngfix-Skript aufrufen, um das CSS hinzuzufügen, damit das neue Bild transparent wird.

Hoffentlich ist der Quellcode von unitpngfix kurz genug, dass Sie ihn lesen können und den Teil, der die Transparenz für ein einzelnes Bild aktiviert, leicht finden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X