Полезная информация

Многие проблемы быстрее решаются поиском по форуму и чтением FAQ, чем созданием новой темы и томительным ожиданием ответа.

№103-12-2011 22:26:50

Dеff
Участник
 
Группа: Members
Зарегистрирован: 03-12-2011
Сообщений: 3
UA: Opera 11.5

сокрушительная Реакции браузера на событие $(window).resize

Задача стояла зафиксировать и изменения размеров окна браузера и выполнять корректировку стиля

Код jQuery

Выделить код

Код:

<script type="text/javascript">
var Onrez=true;
 $(window).resize(function(){if(Onrez){Onrez=false;alert("resized!");Onrez=false;}});
alert("A")
</script>

Итоговый Вид краха браузера

http://video.yandex.ru/users/hostjs-mybb2011/view/7/
Проверялось в версиях браузера от 3.6 до 8.0
в версиях  jQuery от 1.4.4 до 1.6.1

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


Плиз? - Кто может посоветовать иные рабочие Варианты данного события: изменения Окна браузера

Отредактировано Dеff (04-12-2011 12:30:48)

Отсутствует

 

№204-12-2011 00:07:27

banbot
Moderator
 
Группа: Moderators
Зарегистрирован: 23-12-2007
Сообщений: 5293

Re: сокрушительная Реакции браузера на событие $(window).resize

Тема перенесена из форума «Поддержка пользователей» в форум «Разработка».


Do you feel lucky, punk?

Отсутствует

 

№304-12-2011 03:17:44

hydrolizer
Участник
 
Группа: Extensions
Зарегистрирован: 22-07-2009
Сообщений: 1945
UA: Firefox 9.0

Re: сокрушительная Реакции браузера на событие $(window).resize

Dеff
Есть такой баг: https://bugzilla.mozilla.org/show_bug.cgi?id=626963.
Варианты, как избежать последствий бага:
1) не использовать в обработчике модальных диалогов - того же alert'а;
2) если без модальных диалогов никак - попробуйте вызывать их асинхронно;
3) выполнять нужные действия по окончании процесса изменения размеров - хотя в документации и написано, что

The resize event is fired

after

the window has been resized

но на самом деле даже при измении размеров от одиночного клика по кнопке заголовка maximize/restore, обработчик события resize будет вызван энное количество раз. Можно попробовать, например, по вызову обработчика запускать выполнение нужных вам действий асинхронно через setTimeout (или nsITimer, если у вас скрипт работает в chrome-контексте) с таймаутом А, при последующем вызове обработчика проверять разность с временем предыдущего вызова обработчика - если оно меньше B, где В<А, то прерывать асинхронный запуск, сделанный в предыдущем вызове, и запускать новый. Костыль, конечно, но хоть что-то.

Отсутствует

 

№404-12-2011 10:42:07

Dеff
Участник
 
Группа: Members
Зарегистрирован: 03-12-2011
Сообщений: 3
UA: Opera 11.5

Re: сокрушительная Реакции браузера на событие $(window).resize

hydrolizer пишет

Dеff
Есть такой баг: https://bugzilla.mozilla.org/show_bug.cgi?id=626963.
Варианты, как избежать последствий бага:разность с временем предыдущего вызова обработчика - если оно меньше B, где В<А, то прерывать асинхронный запуск, сделанный в предыдущем вызове, и запускать новый. Костыль, конечно, но хоть что-то.

СПС!
Cобственно попробовал без алерта - (мало чем отличается...
Попробую чисто по таймеру проверять переодически ширину окна, поскольку страшно нарваться на такое дело - много обработки в реальном времени отработки изменения размеров, просто могу не успевать. Главное единственный из пяти браузов с такой реакцией... Хотя нун и в  jQuery написать пусть думают( или фиксят в документации

Отредактировано Dеff (04-12-2011 10:42:31)

Отсутствует

 

№504-12-2011 11:53:37

Dеff
Участник
 
Группа: Members
Зарегистрирован: 03-12-2011
Сообщений: 3
UA: Opera 11.5

Re: сокрушительная Реакции браузера на событие $(window).resize

Найденное решение,  благодаря советам: - однозначной реакции на однократное изменение,
&#160; (*По факту фиксируем завершенность данного события, - * должно быть кроссбраузерно

Выделить код

Код:

<script>

    $(window).bind("resize",function(){ //Подключам событие изменение размеров Окна
    window_resize(); //Вызываем функцию Обработки окна
    return false});

var resizeTimeoutId; //Таймер задержки исполнения

function window_resize() {
     clearTimeout(resizeTimeoutId); //удаляем все предыдущие события "Дребезга контактов"
     resizeTimeoutId = setTimeout('alert_And_ResizeCode();', 10);
}

function alert_And_ResizeCode(){alert("Есть Cмена размера окна ");/*Тут Обработка события*/
 };

</script>

Легко проверяется  изменением размеров окна

Отредактировано Dеff (13-12-2011 03:34:30)

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]