постепенное появление jQuery оставляет текст не сглаженным в IE7

использовать group_concat()

select group_concat(id), attrib, attrib_value from table 
where attrib='Router'
20
задан chrisdillon 23 December 2012 в 12:33
поделиться

7 ответов

Существует известная ошибка с IE и функциями fadeIn / fadeOut и их влиянием на текстовые элементы. Проверьте информацию здесь:

http://blog.bmn.name/2008/03/jquery-fadeinfadeout-ie-cleartype-glitch/

Похоже, моя исходная ссылка с тех пор перестала работать. Обновлено с помощью решения, отличного от комментариев:

http://malsup.com/jquery/cycle/cleartype.html

Временное решение: удалить свойство filter элемента в функции обратного вызова после fadeIn ( ) закончил.

20
ответ дан 29 November 2019 в 23:17
поделиться

Из того, что я помню, устанавливаемый атрибут фильтра вызывает это. После завершения fadeIn удалите атрибут фильтра из элемента.

$('p.quote').fadeIn(2000, removeFilter);

function removeFilter() {
  $('p.quote').removeAttr("filter");
}
5
ответ дан 29 November 2019 в 23:17
поделиться

Я нашел лучшее, более общее решение на http://jquery.malsup.com/fadetest.html .

Я взял это и адаптировал его в отдельный файл JavaScript для включения в страницы, использующие методы jQuery fade * ().

//
//  jQuery IE Fade Fix
//
//  Adapted from code found at http://jquery.malsup.com/fadetest.html.
//
//  This is only needed for IE 7 and earlier, so this is best added to your page using IE's conditional comments
//  (http://msdn.microsoft.com/en-us/library/ms537512%28VS.85%29.aspx) as follows:
//      <!--[if lt IE 8]><script type="text/javascript" src="jquery-ie-fade-fix.js"></script><![endif]-->
//
(function($) {
    $.fn.fadeIn = function(speed, callback) {
        if ($.isFunction(speed) && callback == undefined) {
            callback = speed;
            speed = 'normal';
        }
        return this.animate({opacity: 'show'}, speed, function() {
            if ( $.browser.msie )
            {
                this.style.removeAttribute('filter');
            }
            if ( $.isFunction(callback) )
            {
                callback.call(this);
            }
        });
    };

    $.fn.fadeOut = function(speed, callback) {
        if ($.isFunction(speed) && callback == undefined) {
            callback = speed;
            speed = 'normal';
        }
        return this.animate({opacity: 'hide'}, speed, function() {
            if ( $.browser.msie )
            {
                this.style.removeAttribute('filter');
            }
            if ( $.isFunction(callback) )
            {
                callback.call(this);
            }
        });
    };

    $.fn.fadeTo = function(speed, to, callback) {
        if ($.isFunction(speed) && callback == undefined) {
            callback = speed;
            speed = 'normal';
        }
        return this.animate({opacity: to}, speed, function() {
            if ( to == 1 && $.browser.msie )
            {
                this.style.removeAttribute('filter');
            }
            if ( $.isFunction(callback) )
                {
                callback.call(this);
            }
        });
    };
})(jQuery);

РЕДАКТИРОВАТЬ: Включено исправление joeformd для обратных вызовов.

EDIT2: Добавлено исправление для углового случая, когда скорость не определена, а обратный вызов - -Tomi

17
ответ дан 29 November 2019 в 23:17
поделиться

Похоже, в принятом ответе теперь мертвая ссылка. Думаю, та же информация теперь доступна на http://blog.wolffmyren.com/2009/05/28/jquery-fadeinfadeout-ie-cleartype-glitch/ .

Чтобы сохранить информацию в StackOverflow, вот содержание этой ссылки:

Спасибо Бенджамину Майклу Новаковичу для этого исправления!

jQuery fadeIn / fadeOut IE cleartype glitch

При использовании библиотеки javascript jQuery сегодня на работе я заметил глюк под IE7. При исчезновении HTML узел с .fadeIn () и .fadeOut () функций в jQuery, IE удаляет рендеринг Windows Cleartype; который приводит к очень уродливому тексту. Эта проблема кажется очень распространенной, но ни у кого нет хорошего решения для проблема.

Самый распространенный способ решить эту проблему - удалить фильтр CSS атрибут. В обычном javascript это будет выглядеть так:

 document.getElementById ('узел'). style.removeAttribute ('filter');

а в jQuery это будет выглядеть так:

 $ ('# node'). FadeOut ('slow', function () {
 this.style.removeAttribute ('фильтр');
});

через Бенджамина Майкла Новаковича » jQuery fadeIn / fadeOut IE cleartype глюк.

2
ответ дан 29 November 2019 в 23:17
поделиться

Просто примените цвет фона к конкретному элементу, который вы затемняете ... насколько я помню, он не будет работать с дочерними элементами, если вы примените к родительскому элементу, поэтому он должен быть на этом самом элементе, который получает псевдоним.

3
ответ дан 29 November 2019 в 23:17
поделиться
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Добавьте это поверх ваших html-документов. Работает в IE 8.07xxxx. Я не уверен, что этот метод работает в IE 7.

1
ответ дан 29 November 2019 в 23:17
поделиться

Добавьте это в свой JS. Он исправляет ошибку и поддерживает правильную область видимости. При добавлении в jQuery он по-прежнему проходит все модульные тесты:

(function($){
    $.each(['fadeIn', 'fadeOut'], function(i, method){
        var _fn = $.fn[method];
        $.fn[method] = function(easing, callbackå, cancel) {
            if ($.isFunction(easing)) {
                callback = easing;
                easing = 'normal';
            }
            return _fn.call(this, easing, function(){
                jQuery.browser.msie && !cancel && this.style.removeAttribute('filter');
                (callback || $.noop).call(this);
            });
        }
    })
})(jQuery);

Написано мной :)

1
ответ дан 29 November 2019 в 23:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: