Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Jquery, Ajax, IE (https://javascript.ru/forum/jquery/8565-jquery-ajax-ie.html)

doniv 02.04.2010 11:34

Jquery, Ajax, IE
 
http://www.ooo-tibis.ru/index.html

Вот на этом сайте, в верхнем меню(Телекоммуникации, Безопасность...) по ссылкам подгружается содержимое. Дак вот, в браузере IE6-8 подгружаемый текст не сглаживается. В чем тут дело?

sysya 02.04.2010 15:26

в IE7 тоже не сглаживает, интересно почему, гугляну ка...

e1f 02.04.2010 16:40

Очень странно...
Из "Arial, Tahoma, Verdana" уберите Ариал, и сглаживание работает.

doniv 02.04.2010 16:44

Цитата:

Сообщение от e1f (Сообщение 49898)
Очень странно...
Из "Arial, Tahoma, Verdana" уберите Ариал, и сглаживание работает.

Хм, нет. Как-то не работает. Все равно подгружается без сглаживания.

e1f 02.04.2010 17:07

Везде убрали?

doniv 02.04.2010 17:10

Цитата:

Сообщение от e1f (Сообщение 49900)
Везде убрали?

Ага, везде. Браузер IE 8.0.76

sysya 02.04.2010 22:05

скорее в настройках шрифта дело, у меня скрипт делает три клона, и добавляет, текст сглаженый

в css настройки текста font-family: arial, verdana, sans-serif;

Octane 02.04.2010 22:24

Это из-за фильтра Alpha. Удалите его вообще по окончании анимации и текст будет сглажен.
элемент.style.cssText = "";

doniv 03.04.2010 09:47

Цитата:

Сообщение от Octane (Сообщение 49925)
Это из-за фильтра Alpha. Удалите его вообще по окончании анимации и текст будет сглажен.
элемент.style.cssText = "";

Видимо я что-то не правильно сделал, но сглаживания все равно нет.

$(".inlink a").click(function(){
		var cont = $(this).attr('id');
		var ysl = $(this).attr('class');
		var dbox = $(".text-sec");
		var linkclass = $(this);

	$.ajax({
		url: 'textsec/'+cont+'.html',
		beforeSend: function(){
		dbox.addClass('loading');
     },
     success: function(boxtext){
				if	($(linkclass).attr("class") != "active") {
					dbox.animate({ opacity: "0.1"  }, 0).animate({ opacity: "1"  }, 400);
					dbox.removeClass('loading');
					dbox.html(boxtext);
				}
					$(".inlink a").removeClass("active");
					linkclass.addClass("active");
	}
	});
});


Вот код, который подгружает содержимое. Где именно удалить?

Айба 03.04.2010 10:12

Цитата:

Сообщение от doniv (Сообщение 49948)
dbox.removeClass('loading');

В IE эта строка не отрабатывает и класс loading остается, из-за этого по видимому и сглаживания нет.

Octane 03.04.2010 10:16

Для эмуляции CSS-свойства opacity в IE jQuery использует фильтр Alpha. Для всех элементов, к которым применяется фильтр, IE отключает сглаживание текста. Важен факт наличия фильтра, а не значение параметра opacity, поэтому фильтр нужно удалить вообще, что можно сделать очисткой свойства cssText (или удалением подстроки с описанием фильтра), так как jQuery добавляет CSS-стили в атрибут style элемента.

Айба 03.04.2010 10:16

а не отрабатывает она потому что:
Цитата:

var dbox = $(".text-sec");
а в тот момент элемент не:
$(".text-sec")

а
$(".text-sec loading")

я с jquery не сильно знаком, но думаю смысл понятен.

можно попробовать вместо присвоения
Цитата:

var dbox = $(".text-sec");
использовать :
$(".text-sec");

Octane 03.04.2010 10:34

Айба, совсем не в тему.

Айба 03.04.2010 10:44

Octane,
ну значит я заметил просто особенность поведения данной программы в ie, подумал что это важно. Это было просто предположение ;)

doniv 03.04.2010 10:45

Цитата:

Сообщение от Айба (Сообщение 49953)
В IE эта строка не отрабатывает и класс loading остается, из-за этого по видимому и сглаживания нет.

Неа, хотя класс действительно не там удалял :) спасибо :)

doniv 03.04.2010 10:55

Цитата:

Сообщение от Octane (Сообщение 49954)
Для эмуляции CSS-свойства opacity в IE jQuery использует фильтр Alpha. Для всех элементов, к которым применяется фильтр, IE отключает сглаживание текста. Важен факт наличия фильтра, а не значение параметра opacity, поэтому фильтр нужно удалить вообще, что можно сделать очисткой свойства cssText (или удалением подстроки с описанием фильтра), так как jQuery добавляет CSS-стили в атрибут style элемента.

Я меняю это:

success: function(boxtext){
				if	($(linkclass).attr("class") != "active") {
					dbox.animate({ opacity: "0.1"  }, 0).animate({ opacity: "1"  }, 400);
					dbox.html(boxtext);
				}
					dbox.removeClass('loading');
					$(".inlink a").removeClass("active");
					linkclass.addClass("active");
	}


На это:
success: function(boxtext){
				if	($(linkclass).attr("class") != "active") {
					dbox.animate({ opacity: "0.1"  }, 0).animate({ opacity: "1"  }, 400);
					dbox.html(boxtext);
				}
					dbox.removeClass('loading');
					$(".text-sec").style.cssText = "";
					$(".inlink a").removeClass("active");
					linkclass.addClass("active");
	}


И ничего. Где я косячу? запутался. :help:

Octane 03.04.2010 11:01

$(".text-sec").get(0).style.cssText = "";


Screenshot

doniv 03.04.2010 11:15

Цитата:

Сообщение от Octane (Сообщение 49965)
$(".text-sec").get(0).style.cssText = "";


Screenshot

Эм, все верно. Стиль очищается. Но сглаживание не возвращается :)

Octane 03.04.2010 15:00

Все сглаживается нормально

У вас не выходит из-за того, что функция animate асинхронно выполняется. Очищайте стиль в callback-функции, вызываемой по окончании анимации.

doniv 03.04.2010 15:39

Цитата:

Сообщение от Octane (Сообщение 49992)
Все сглаживается нормально

У вас не выходит из-за того, что функция animate асинхронно выполняется. Очищайте стиль в callback-функции, вызываемой по окончании анимации.

Мне уже на самом деле стыдно, но как это сделать?
Совсем тупость вымораживает. По какому событию делать, где именно?
А почему не получается сделать после выполнения запроса, например в complete?

Octane 03.04.2010 16:10

Цитата:

Сообщение от doniv
где именно?

Метод animate принимает последним аргументом ссылку на функцию (callback), которая будет вызвана по окончанию анимации:
Цитата:

Сообщение от jQuery API
$('#book').animate({
    opacity: 0.25,
    left: '+=50',
    height: 'toggle'
  }, 5000, function() {
    // Animation complete.
  });

Цитата:

Сообщение от doniv
По какому событию

Цитата:

Сообщение от doniv
if  ($(linkclass).attr("class") != "active") {
                    dbox.animate({ opacity: "0.1"  }, 0).animate({ opacity: "1"  }, 400);
                    dbox.html(boxtext);
                }
                    dbox.removeClass('loading');
                    $(".text-sec").style.cssText = "";

Анимация выполняется асинхронно, поэтому выполнение последующего кода не замораживается на 400 миллисекунд, он выполняется сразу, после вызова aimate, следовательно фильтр Alpha в style элемента записывается еще и после того, как его удалили здесь.

doniv 03.04.2010 16:18

Цитата:

Сообщение от Octane (Сообщение 49995)
Метод animate принимает последним аргументом ссылку на функцию (callback), которая будет вызвана по окончанию анимации:



Анимация выполняется асинхронно, поэтому выполнение последующего кода не замораживается на 400 миллисекунд, он выполняется сразу, после вызова aimate, следовательно фильтр Alpha в style элемента записывается еще и после того, как его удалили здесь.

Большое вам спасибо! +1


Часовой пояс GMT +3, время: 12:29.