b-phase: IE 8 Cleartyp

Hallo zusammen

ich habe ein Fading Script zum Einblenden von Text umgeschrieben, das normalerweise für Bilder entwickelt wurde. Im Firefox funktioniert das wunderbar, nur im IE scheint der Browser die Cleartype-Einstellung bei Fettschrift zu verlieren. Markiert man den Text beispielsweise mit der Mouse, so wir Cleartyp wiederhergestellt, aber nur solange der Text markiert ist. Hat von euch jemand vielleicht Erfahrung mit diesem Effekt und wie kann man den IE möglicherweise wieder dazu bringen Cleartype herzustellen? Nachfolden das entsprechende Script:

function blendDiv(opacity, id){
var object = document.getElementById(id).style;
object.opacity = (opacity / 100);
object.MozOpacity = (opacity / 100);
object.KhtmlOpacity = (opacity / 100);
object.filter = "alpha(opacity=" + opacity + ")";
}

function setDiv(x) {
var millisec = 400;
var speed = Math.round(millisec / 100);
var timer = 0;
for(i = 0; i <= 100; i++) {
document.getElementById(x).style.visibility = "visible";
setTimeout("blendDiv(" + i + ",'" + x + "')",(timer * speed));
timer++;
}
}

Vielen Dank schon mal
Gruß
Wolfgang

  1. Hat von euch jemand vielleicht Erfahrung mit diesem Effekt und wie kann man den IE möglicherweise wieder dazu bringen Cleartype herzustellen?

    Ja. Du musst den Filter am Ende der Animation wieder entfernen. Solange der Filter aktiv ist, ist ClearType deaktiviert.

    styleObject.removeAttribute('filter', false);

    oder

    styleObject.filter = '';

    setTimeout("blendDiv(" + i + ",'" + x + "')",(timer * speed));

    Das lässt sich etwas übersichtlicher und performanter mit einem Funktionsausdruck lösen:

    setTimeout(function () {  
       blendDiv(i, x);  
    }, timer * speed);
    

    Mathias

    1. Hallo Mathias,
      erstmal vielen Dank für die plausible Antwort. Leider kann ich das Ganze erst morgen testen, da ich bei mir zuhause den IE9 verwende und der Kompatibilitätsmodus den Browser nicht wirklich in den Zustand des IE8 versetzt. In meinem Fall könnte ich die Fadingfunktion dann letztendlich so schreiben wenn ich dich richtig verstanden habe:

      function blendMenu(opacity, id){
      var object = document.getElementById(id).style;
      object.opacity = (opacity / 100);
      object.MozOpacity = (opacity / 100);
      object.KhtmlOpacity = (opacity / 100);
      object.filter = "alpha(opacity=" + opacity + ")";
      object.removeAttribute('filter', false);
      }

      schönen Gruß
      Wolfgang

    2. Halt stop, es würde doch ausreichen den Filter nach jedem Funktionsdurchlauf zu entfernen mit:

      function blendMenu(opacity, id){
      var object = document.getElementById(id).style;
      object.opacity = (opacity / 100);
      object.MozOpacity = (opacity / 100);
      object.KhtmlOpacity = (opacity / 100);
      object.filter = "alpha(opacity=" + opacity + ")";
      object.filter = "false";
      }

      so bekomme ich zumindest keinen Scriptfehler, ob es funktioniert weiß ich erst morgen.

      VG
      Wolfgang

      1. Halt stop, es würde doch ausreichen den Filter nach jedem Funktionsdurchlauf zu entfernen mit:

        Nein. Wie ich schrieb, sollst du den Filter *nach Ablauf der Animation* löschen.

        Dieser Fall ist gegeben, wenn opacity den Wert 1 erreicht.

        object.filter = "alpha(opacity=" + opacity + ")";
        object.filter = "false";

        Das ist Quatsch. Damit hast du im IE gar keine Animation, da du den soeben gesetzten Filter wieder mit (einem fehlerhaften Wert) überschreibst.

        Mathias

        1. dankeschön, werds morgen ausprobieren.

          VG
          Wolfgang