работа settimeout с разной скоростью
Никто не замечал что settimeout в разных браузерах работает с разной скоростью? К примеру ставлю задержку 10 - в FF, chrom, safari работает одинаково быстро, в Opera просто ОЧЕНЬ быстро, а в ие(любом) ООЧень медлинно, - если скажем увеличиваю картинку, так вобще практически слайдшоу получается.
Нет ни у каво идей как это компенсируется, или выравнивается? |
Давайте вы сначала код покажите, чтобы мы не гадали, что там за мистика со временем творится?
|
код показывать не буду, поскольку вы мозги сломаете :), но смысл мне кажется я уже догоняю: у меня запускается одновременно несколько таймеров, для всех браузеров это нормально, а вот ие тупит... Тормозит. Как будто он думает так: ага, таймер хочет запустится, стоп а вот ещё один, и ещё... нет, давайте-ка я всех поочереди, ибо я уродское, гадкое, и навсё наплюющее творение майкрософт :)
Я прав? А несколько таймеров - это когда мышкой ведёш по ряду картинок, по наведению все картинки увеличиваются, по убиранию уменьшаются. |
не прав! нет плохих браузеров есть плохие программисты :)
|
я спрашивал не про хороший/плохой ли браузер
|
arma, тебе видней конечно о чем ты спрашивал, но вот я тоже сперва подумал, что в посте №3 вопрос о браузерах. По вопросу из первого поста, возможно, поможет эта статья: http://javascript.ru/tutorial/events/timing
|
Octane, код скажем такой:
<img id="1" src="fig.gif" count="0" width="100" height="100" onmouseover="dotime(this.id)" /> <img id="2" src="fig2.gif" count="0" width="100" height="100" onmouseover="dotime(this.id)" /> <img id="3" src="fign.gif" count="0" width="100" height="100" onmouseover="dotime(this.id)" />
function dotime(id)
{
размер фотки++
if (document.getElementById(id).count<10)
{
setTimeout(function(){dotime(id), 10);
document.getElementById(id).count++;
}
else
{
chekout(id);
}
}
function chekout(id)
{
если мыш вылезла за пределы изображения
{
out(id);
}
else
{
setTimeout(function(){chekout(id), 10);
}
}
function out(id)
{
размер фотки--;
if (document.getElementById(id).count>0)
{
setTimeout(function(){out(id), 10);
document.getElementById(id).count--;
}
}
поясню, что функция chekout ждёт, когда мыш вылезет за картинку, т.к. onmouseout бывает не срабатывает, когда по картинке очень быстро провести мышкой, или резко её с неё убрать. |
Riim, я считаю, что веб-програмирование, - это бесконечная борьба с браузерами. В данной задаче меня выбешивает ИЕ, чаще бывает иначе. В посте 3 я спрашмвал, правильно ли то, что ие тупит из за того, что запущенно много таймеров, а про браузеры у меня своё сложившиеся мнение, которое веб-програмисту обсуждать с другими веб-програмистами просто тупа (а ля я считаю что этот круче, этот хуже... - заказчику на это глубако пливать).
За статью спасибо. Интересно. |
Зачем передавать id, если можно передать ссылку на элемент, чтобы не выполнять потом поиск этого элемента с помощью getElementById? :D
<img src="fig.gif" count="0" width="100" height="100" onmouseover="dotime(this)" alt="" />
function dotime(node)
{
//размер фотки++
if (node.count<10)
{
setTimeout(function(){ dotime(node) }, 10);
node.count++;
}
else
{
chekout(node);
}
}
Кстати, так заметно быстрее должно заработать. Оптимизируйте, сделать один таймаут не сложно. |
я думал ссылка на элемент по таймауту не передаётся :blink:
Блин, когда много пишеш некогда проверять, лиш бы работало :) Спасибо! |
| Часовой пояс GMT +3, время: 12:49. |