Эффект JQuery при загрузке

Я хотел бы использовать эффект jquery slideUp, когда пользователь уходит со страницы, просто чтобы страница выглядела круто при закрытии.

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

Один из вариантов, который пришел в голову, - это эффективно перехватить функцию закрытия страницы, сохранить ее в какой-либо переменной, а затем выполнить ее после того, как я запустил свой эффект, но я понятия не имею, как я это сделаю.

Любые предложения или альтернативные идеи более чем приветствуются


person jcuenod    schedule 17.06.2009    source источник


Ответы (7)


Насколько мне известно, единственный способ запретить пользователю покинуть страницу - это событие onbeforeunload, которое нельзя отменить. Вместо этого вы возвращаете строку из этого метода, браузер предлагает пользователю диалог «Да / Нет», жизнь продолжается. 276660 имеет подробнее об этом.

Я не думаю, что тебе повезет с этим.

person Dan F    schedule 17.06.2009

то, что вы ищете, - это событие onbeforeunload.
но просто предупреждение ... оно должно быть действительно быстро ... или ваши посетители, вероятно, собираются ненавижу это, как бы круто это ни выглядело

Что касается предотвращения перехода страницы до завершения анимации, это более серьезная проблема ... любая анимация будет полагаться на setTimeout / setInterval, и страница не будет ждать их завершения перед выходом.

person Jonathan Fingland    schedule 17.06.2009
comment
Даже если бы он захотел использовать событие onBeforeUnload, это не сработало бы, поскольку для анимации требуется отложенное действие - ожидается, что обработчик onBeforeUnload что-то вернет сразу. - person James; 17.06.2009
comment
@ J-P да и нет. Обработчик onbeforeunload не должен возвращать что-то сразу. Например, вы можете выполнить синхронный запрос ajax или очень длинный цикл while внутри обработчика onbeforeunload .... при условии, что вы не превысите тайм-аут для скриптов, выполняющихся слишком долго. Тем не менее, я бы не рекомендовал это делать. - person Jonathan Fingland; 17.06.2009

Делать что-либо, кроме закрытия окна по запросу пользователя, нарушает договор с пользователем. Окно браузера - это не ваше, это пользователи, и как бы круто ни было эффект, оно неминуемо будет раздражать большинство ваших пользователей.

Возможности события onbeforeunload очень ограничены. Он должен возвращать строку, которая затем используется для запроса у пользователя подтверждения о выходе со страницы. Это не сработает для крутых анимаций.

person Magnar    schedule 17.06.2009

почему бы и нет, вместо того, чтобы создавать "крутой" эффект, когда пользователь просто хочет уйти с вашего веб-сайта (даже если пользователь закроет браузер / вкладку, событие выгрузки будет быть уволенным) и надоедать простому пользователю этим ... не позволяя ему / ей вернуться снова ...

... сделать этот "крутой" эффект, когда пользователь впервые заходит на ваш веб-сайт? как обычный вступительный эффект?

Я сделал это просто, вы можете увидеть это здесь: http://www.balexandre.com/jmfc < / а>

person balexandre    schedule 17.06.2009
comment
Я хочу добиться эффекта, когда на моем сайте осуществляется навигация по страницам, чтобы пользователь не был раздражен, потому что страница просто загружает новый контент. После загрузки новой страницы я воспользуюсь эффектом slideDown, и это будет выглядеть так, как будто информация в сдвинутой части содержимого была только что изменена. - person jcuenod; 17.06.2009
comment
Поэтому я также хочу проверить, где страница будет решать, применять ли эффект - person jcuenod; 17.06.2009
comment
в зависимости от содержания, почему бы не использовать слайдер для таких вещей? и приятное и нормальное сообщение о загрузке для остальных, например, у нас есть все необходимое для создания этой страницы, которую вы хотите ... почти готово ... вот! Наслаждаться. - person balexandre; 17.06.2009

Я бы на 100% согласился с ответом Джонатана Фингланда и добавил это.

В IE (я не уверен, какие версии поддерживают это, я знаю, что IE6 поддерживает), вы можете использовать некоторые правильные метатеги для достижения исчезновения и т. д. при выходе со страницы. Однако это ограничено в браузерах (только IE), поэтому вы застряли в кроссбраузерности.

person alex    schedule 17.06.2009

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

Я бы посмотрел на использование формы слайдера, упомянутого выше (см., Например, http://webdesignledger.com/tutorials/13-super-useful-jquery-content-slider-scripts-and-tutorials), или просто загружая панели содержимого в ответ на щелчки пользователя.

person Luke H    schedule 17.05.2010
comment
Я бы также добавил, что для доступности это должно происходить путем перехвата реальных ссылок, а не системы, предназначенной только для JS. - person Jonathan Fingland; 08.09.2010

Единственный способ отсрочить закрытие окна, который я нашел, - это использование предупреждения. Если это приемлемый компромисс для вашего случая, он действительно задержит разрушение окна в памяти и позволит запускать таймеры страниц (конечно, если пользователь не закроет всплывающее окно с предупреждением раньше, чем завершится ваша анимация).

Недавно я использовал этот подход, поэтому я мог вызвать гибкий метод через FABridge (который в противном случае был бы уничтожен до завершения вызова гибкого метода). Я хотел бы услышать ваши комментарии по этому поводу.

person alex    schedule 08.04.2010
comment
Идея заключалась в том, чтобы страница выглядела неестественно, чтобы предупреждение было неуместным, но спасибо за мысль. Кроме того, я не уверен, что анимация будет работать на фоне предупреждения, мне нужно попробовать, но я подозреваю, что это может не быть ... - person jcuenod; 09.04.2010