我遇到了一些非常奇怪的事情!IE正在丟失ClearType
我有一個div,我隱藏與JS(jQuery)。 像這樣:
$('#myDiv').hide();
然後當我做一個淡入這樣的:
$("#myDiv").fadeIn('slow');
則文本丟失的ClearType在IE瀏覽器而不是在FF。如果我使用的是切換到淡入淡出的狀態,那麼一切都很好。
IE是什麼,並有任何解決方案,因爲它看起來很可怕。 (我對你也許在這一點上理解的ClearType)
我遇到了一些非常奇怪的事情!IE正在丟失ClearType
我有一個div,我隱藏與JS(jQuery)。 像這樣:
$('#myDiv').hide();
然後當我做一個淡入這樣的:
$("#myDiv").fadeIn('slow');
則文本丟失的ClearType在IE瀏覽器而不是在FF。如果我使用的是切換到淡入淡出的狀態,那麼一切都很好。
IE是什麼,並有任何解決方案,因爲它看起來很可怕。 (我對你也許在這一點上理解的ClearType)
關於這個問題的快速搜索顯示如下:
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);
當褪色適用於IE瀏覽器,它是(至少通過jQuery)的dxtransform類,這將使其失去任何抗鋸齒效果,直到將它它的不透明度又回到了一個。
我讀過Firefox 2中使用自己的文字渲染引擎,只要不透明度應用(至少在Mac)。這有時看起來很奇怪。
我這個CSS打擊這(和它似乎並沒有在所有影響性能)
body {
-moz-opacity: 0.99;
}
在IE這可能工作過。哦,但你需要使用IE的專有filter
屬性。
一種方法是在div(通常)白色上設置背景色。
確定這裏是我有史以來最糟糕的解決方案:
<head>
<script>
$(function() {
$(document.body).fadeIn(0);
});
</script>
</head>
<body>
<script>
$(document.body).hide();
</script>
body text
</body>
立即藏起了身體,並在當文件完成消除它。然後,你基本上禁用cleartype。
哦和請不要任何人做這個。或者如果它真的似乎對你有意義,那麼測試它。只記得在整個DOM被加載之前你什麼也看不到。我也看到了一些奇怪的圖形故障。
我設法拉了一個'通用'的解決方案。 的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
...
希望這會有所幫助...
我設法拉了一個'通用'的解決方案。如果不透明度爲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
...
希望這將有助於...
grr爲什麼他們不能把這個標準淡入。只是確認它不在1.3.1(至少不需要額外配置),所以可能不存在 – 2009-01-26 11:42:59
即使使用此解決方案,在我看來它仍然看起來非常糟糕。其顯而易見的是有一個小故障。儘可能嘗試淡出彩色框並讓文本瞬間顯示 – 2009-01-26 12:07:08