2009-01-04 36 views
14

我遇到了一些非常奇怪的事情!IE正在丟失ClearType

我有一個div,我隱藏與JS(jQuery)。 像這樣:

$('#myDiv').hide(); 

然後當我做一個淡入這樣的:

$("#myDiv").fadeIn('slow'); 

則文本丟失的ClearType在IE瀏覽器而不是在FF。如果我使用的是切換到淡入淡出的狀態,那麼一切都很好。

IE是什麼,並有任何解決方案,因爲它看起來很可怕。 (我對你也許在這一點上理解的ClearType)

回答

24

關於這個問題的快速搜索顯示如下:

jQuery fadeIn/fadeOut IE cleartype glitch

這個問題似乎是CSS的「過濾器」的屬性不會被自動刪除。 最簡單的解決方案這個問題會被手動刪除它:

$('#myDiv').fadeIn('slow', function() { 
    this.style.removeAttribute('filter'); 
}); 

如上博客文章解釋說,這是一個相當混亂的解決方案。從博客文章

摘錄,包括清潔的解決方案這個問題:

這意味着,每一次我們 要褪色的元素,我們需要 去除過濾器屬性, 使我們的代碼看起來凌亂。

一個簡單的,更優雅的解決方案將是 經由 的jQuery的插件接口的自定義功能 以包裹.fadeIn()和 .fadeOut()函數。該代碼將與 完全相同,但不是直接調用 淡入淡出的函數,我們將其稱爲 包裝器。像這樣:

$('#node').customFadeOut('slow', function() { 
    //no more fiddling with attributes here 
}); 

那麼,你是如何得到這個工作?只要 包含以下代碼, 包含用於 添加功能的jQuery庫。

(function($) { 
    $.fn.customFadeIn = function(speed, callback) { 
     $(this).fadeIn(speed, function() { 
      if(jQuery.browser.msie) 
       $(this).get(0).style.removeAttribute('filter'); 
      if(callback != undefined) 
       callback(); 
     }); 
    }; 
    $.fn.customFadeOut = function(speed, callback) { 
     $(this).fadeOut(speed, function() { 
      if(jQuery.browser.msie) 
       $(this).get(0).style.removeAttribute('filter'); 
      if(callback != undefined) 
       callback(); 
     }); 
    }; 
})(jQuery); 
+1

grr爲什麼他們不能把這個標準淡入。只是確認它不在1.3.1(至少不需要額外配置),所以可能不存在 – 2009-01-26 11:42:59

+2

即使使用此解決方案,在我看來它仍然看起來非常糟糕。其顯而易見的是有一個小故障。儘可能嘗試淡出彩色框並讓文本瞬間顯示 – 2009-01-26 12:07:08

2

當褪色適用於IE瀏覽器,它是(至少通過jQuery)的dxtransform類,這將使其失去任何抗鋸齒效果,直到將它它的不透明度又回到了一個。

0

我讀過Firefox 2中使用自己的文字渲染引擎,只要不透明度應用(至少在Mac)。這有時看起來很奇怪。

我這個CSS打擊這(和它似乎並沒有在所有影響性能)

body { 
    -moz-opacity: 0.99; 
} 

在IE這可能工作過。哦,但你需要使用IE的專有filter屬性。

5

一種方法是在div(通常)白色上設置背景色。

-1

確定這裏是我有史以來最糟糕的解決方案:

<head> 
    <script> 
     $(function() { 
       $(document.body).fadeIn(0); 
     }); 
    </script> 
</head> 

<body> 

    <script> 
     $(document.body).hide(); 
    </script> 

    body text 
</body> 

立即藏起了身體,並在當文件完成消除它。然後,你基本上禁用cleartype。

哦和請不要任何人做這個。或者如果它真的似乎對你有意義,那麼測試它。只記得在整個DOM被加載之前你什麼也看不到。我也看到了一些奇怪的圖形故障。

1

我設法拉了一個'通用'的解決方案。 的removeAttribute如果不透明度爲0和1之間,所以我的兩分錢溶液如下不起作用:

將這個代碼只是jQuery的動畫方法定義的第一行之後(jquery.xxxjs)

animate: function(prop, speed, easing, callback) { 
var optall = jQuery.speed(speed, easing, callback); 

/* 
* IE rendering anti-aliasing text fix. 
*/ 
// fix START 
var old_complete_callback = optall.complete; 
optall = jQuery.extend(optall, {complete: function(){ 
     if (jQuery.browser.msie) { 
      var alpha = $(this).css('opacity'); 
     if(alpha == 1 || alpha == 0) { 
      this.style.removeAttribute('filter'); 
     } 
     } 
     if (jQuery.isFunction(old_complete_callback)) { 
     old_complete_callback.call(this); 
     } 
    } 
}); 
// fix END 

    ... 

希望這會有所幫助...

1

我設法拉了一個'通用'的解決方案。如果不透明度爲0和1之間,所以我的兩分錢溶液的removeAttribute如下不起作用:

將這個代碼只是jQuery的動畫方法定義的第一行之後(jquery.xxxjs)

animate: function(prop, speed, easing, callback) { 
var optall = jQuery.speed(speed, easing, callback); 

/* 
* IE rendering anti-aliasing text fix. 
*/ 
// fix START 
var old_complete_callback = optall.complete; 
optall = jQuery.extend(optall, {complete: function(){ 
    if (jQuery.browser.msie) { 
     var alpha = $(this).css('opacity'); 
     if(alpha == 1 || alpha == 0) { 
      this.style.removeAttribute('filter'); 
     } 
    } 
    if (jQuery.isFunction(old_complete_callback)) { 
     old_complete_callback.call(this); 
    } 
}}); 
// fix END 

... 

希望這將有助於...