Javascript-форум (https://javascript.ru/forum/)
-   Opera, Safari и др. (https://javascript.ru/forum/css-html-browser/)
-   -   jQuery Использование textIndent при анимации (https://javascript.ru/forum/css-html-browser/6194-jquery-ispolzovanie-textindent-pri-animacii.html)

slim-v 17.11.2009 19:47

jQuery Использование textIndent при анимации
 
Ну собственно вот код который отлично работает в ИЕ и FF, а вот Opera этого не понимает что ли ...

$(document).ready(function(){
    $("#enterhere").focus(function()
    {
        if($(this).attr("value")=="что ищем?")
        {
           $(this).animate({"textIndent":"-100"},"slow",0,function()
           {
                $(this).attr("value","");
                $(this).css("textIndent","0");
           });
        }

    });
});

Octane 17.11.2009 19:55

Отрицательный textIndent не работает?

slim-v 17.11.2009 20:03

Цитата:

Сообщение от Octane
Отрицательный textIndent не работает?

Ну отрицательный или не отрицательный особо роли не играет. Такое впечатление, что для Opera нельзя использовать этот параметр в анимации.

Анимация отрабатывает textIndent=-100 а визуально этого как то не видно :).

Octane 17.11.2009 20:06

Ну так попробуйте в CSS записать, чтобы проверить, работает ли в Opera отрицательный text-indent для элементов ввода?

slim-v 17.11.2009 20:09

Цитата:

Сообщение от Octane
Ну так попробуйте в CSS записать, чтобы проверить, работает ли в Opera отрицательный text-indent для элементов ввода?

Всмысле хотел сказать работает отрицательный, проверял.

Работает и в том случае если писать вот так вот
$(this).css("textIndent","-100");
а вот сама анимация с textIndent не работает.

Octane 17.11.2009 20:22

А если единицы измерения написать?
$(this).animate({"textIndent":"-100px"}, …

slim-v 17.11.2009 20:25

Цитата:

Сообщение от Octane (Сообщение 35587)
А если единицы измерения написать?
$(this).animate({"textIndent":"-100px"}, …

Пробовал, не помагает. Мне кажеться это чет не так с Оперой. Ибо textIndent изменяеться, но не отрисовывается. Вообще станно как то.

Octane 17.11.2009 20:45

Да, действительно не работает, проверил. Ну попробуйте как-то так:
$(document).ready(function(){
	$("#enterhere").focus(function () {
		if(this.value == "что ищем?") {
			var input = this;
			(function () {
				if (input.value) {
					input.value = input.value.slice(1);
					setTimeout(arguments.callee, 100);
				}
			}());
		}
	});
});

slim-v 17.11.2009 21:43

Цитата:

Сообщение от Octane (Сообщение 35589)
Да, действительно не работает, проверил. Ну попробуйте как-то так:
$(document).ready(function(){
	$("#enterhere").focus(function () {
		if(this.value == "что ищем?") {
			var input = this;
			(function () {
				if (input.value) {
					input.value = input.value.slice(1);
					setTimeout(arguments.callee, 100);
				}
			}());
		}
	});
});

Ну именно этот код не пробовал, завтра попробую отпишу, пробовал в цикле менять без animate jQuery. Былы предпосылки на то что именно в нем проблема. Оказалось нет. Старнная штука получилась. Если менять в цикле или по таймеру свойство textIndent, то он меняеться в Опере но не отрисовывается (не видно визуально эфекта от изменения). А вот если просто задать это свойство все ок. Старнно но факт остается фактом. Чую нашел баг, и стоит проинформировать разработчиков ибо до версии 10 он присутсвует. Я прав?

Octane 17.11.2009 22:10

Цитата:

Сообщение от slim-v
Чую нашел баг

Да в Опера баг на баге от версии к версии, не удивительно :)
http://www.opera.com/support/bugs/

Flounder 23.11.2009 12:45

да опера вообще галимый недобраузер. Задрали её тупые глюки.

subzey 23.11.2009 13:15

Ругаться все горазды. А читать стандарты кто будет?
Цитата:

text-indent
Applies to: block-level elements, table cells and inline blocks
А input у нас что? Text control. Соответственно, чтобы в инпуте работал text-indent, ему нужно установить "display" в "block", "inline-block", или "table-cell".

Минус в карму тебе, Flounder, не захотел разобраться даже.

Flounder 23.11.2009 13:29

Цитата:

Сообщение от subzey (Сообщение 36016)
Минус в карму тебе, Flounder, не захотел разобраться даже.

О, точно, я тут один не захотел разобраться. А ты тут такой умный... И сразу минус. И сразу мне (а чего с меня взять то, всеравно в карме 0), на батьку то стрёмно, да? ))) ыыы.. А я лишь в общем сказал, потому что это действительно так. И те же самые стандарты Оперой не всегда соблюдаются.
Зануда ты какой то, subzey. Поставь ещё штоль минус, может из меня отрицательный персонаж получиться тут :)

subzey 23.11.2009 20:31

Повторюсь, ругаться все горазды.

Octane 23.11.2009 20:47

Цитата:

Сообщение от subzey
не захотел разобраться даже

subzey, а ты пробовал так сделать, заработало?

subzey 24.11.2009 11:52

Гхм-м... Провел изолированный тесу, оказалось, что помогает не display, а то, что я вместо .style.textIndent="..." использовал .style="text-indent: ...".

Flounder, извини меня, пожалуйста, я баклан и пи?добол.

subzey 24.11.2009 13:52

А вот и фикс для сложившейся ситуёвины.
if (window.opera){ // Опера онли
	document.addEventListener('DOMAttrModified', function(e){ // при изменении аттрибута любого элемента на странице
		if (arguments.callee.skip || e.attrName != "style") return; // если установлен .skip, или если изменился аттрибут не style - на выход
		var trigger = (e.srcElement||e.target); // кто же вызвал объект?
		switch (trigger.tagName.toLowerCase()){ // и в зависимости от его имени тега
			case "input":
			case "textarea":
			case "select":
			case "option":
			case "optgroup":
				arguments.callee.skip = true; // временно дизаблим себя же. Это безопасно, никто вклиниться не успеет.
				trigger.style = e.newValue; // прописываем style явным образом.
				arguments.callee.skip = false; // снова подключаем себя
			break;
		};
	}, true); // капчуринг
};


Подключать на странице как можно выше.

Flounder 24.11.2009 16:39

Цитата:

Сообщение от subzey (Сообщение 36118)
Flounder, извини меня, пожалуйста

Лишь карму изменив обратно в 0 мне
Прощения заслужишь ты тотчас...
А фичу, что ты выше изложил
Придумал то случайно уж не сам ли?
Респект тебе тогда и уважуха.

e1f 24.11.2009 18:08

Цитата:

Сообщение от Flounder (Сообщение 36014)
да опера вообще галимый недобраузер. Задрали её тупые глюки.

Да. Но пока в ФФ не сделают такой же кэш, как и в Опере -- я ее буду использовать :) (не говоря уже про то, чтобы писать под нее).

subzey 24.11.2009 18:31

«Вы должны добавить отзыв кому-то ещё, прежде чем сможете снова добавить его Flounder.»
Уже трижды плюсанул других, все равно такая ерунда. Не забуду. Вечером пойду по форуму нести возмездие во имя луны творить добро во имя восстановления справедливости.

Фикс, да, самописный. Раз уж .style="text-indent: …" работает, грех этим не воспользоваться.

Вообще, при всей моей привязанности к Опере, мне начинает казаться, что суровые норверские девелоперы поторопились с релизом. Хотя, ходят слухи о том, что версии 10.2 не будет, а будет сразу 10.5, и это все может быть неспроста.

Upd: Вернул взад.

Flounder 24.11.2009 19:34

Цитата:

Сообщение от e1f (Сообщение 36186)
Да. Но пока в ФФ не сделают такой же кэш, как и в Опере -- я ее буду использовать :) (не говоря уже про то, чтобы писать под нее).

Это да. Кэш и javascript работают мегабыстро. Да и по безопасности до выхода ИЕ8 была всех лучче. Я вообще одно время подумал на неё перейти, но вот зная некоторые её баги изнутри она меня почему то отталкивает. Да и плагинов к ней с гулькин х*р. И привычка.

e1f 24.11.2009 19:40

Для использования ее как браузера, а не средства для разработки (тут плохо, спору нет) -- имхо очень хороша. А если пользователю нравится -- он использует, и разработчикам так или иначе придется под нее подстраиваться (возьмите ИЕ6).

Kolyaj 11.10.2010 16:48

Подниму-ка темку.

Кто-нибудь знает, как заставить Оперу реагировать на text-indent в textarea?

НиколайКут 19.12.2010 12:17

Мой сайт в Opera-11 тоже перестал работать.
Проблема тоже с ОТРИСОВКОЙ при анимации.
Т.е. animate работает, но не орисовывается результат.
Два дня искал причину.
Нашел. Делюсь.
У меня была конструкция:
<div class=...>
<span class=...>
<div class=...>

меню с анимацией.

</div>
</span>
</div>

(Коментировать не надо. Сам знаю.)
Так вот проблема в этом <span>
Убрал (заменил на div) и все заработало.

И еще:
Увидеть, что именно отрисовка не работает легко. Достаточно во время анимации прокрутить окно обозревателя по вертикали.
Или после анимации распахнуть поверх другое окно и опять схлопнуть...

НиколайКут 19.12.2010 13:08

Вдогонку.
Глубоко не копал, но ощещение, что проблема в установке по умолчанию "displey:" для span (а может и не только).
Я пробовал ставить у своего span displey:block и начинало отрисовываться...
Аналогично :inline-block

x-yuri 19.12.2010 18:07

именно displey:block?

НиколайКут 19.12.2010 18:16

Ну апчепятка. Ну бывает.
Здесь же форум вовсе не языкознавцев...
Признаю свою вину, меру, степень, глубину...
Но решение именно там. Сегодня проделал несколько экспериментов и все более убежден, что animate глючит именно из-за display: по умолчанию.
У меня вообще примитив... Никаких там textIndent.
И не отрисовывалось.


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