Событие onbeforeunload документа не подходит для того, о чем просит Дэвид.
В противоположность обычным событиям (и тому, что говорит ajm), возвращение логического значения не влияет на это событие. Возвращение false не блокирует навигацию и не может быть предотвращено по умолчанию.
Браузеры выполняют обработчик событий, поэтому любой синхронный код, запускаемый внутри, может практически задержать переключение страницы, однако выполнение каких-либо асинхронных операций (таких как анимация jQuery) невозможно и просто не будет выполняться, так как только функция заканчивается, страница убивается и начинается запрос следующей страницы.
Единственное возвращаемое значение для этого обработчика событий, которое используется браузером, - это строка, которая отображается как часть подтверждающего сообщения, спрашивающего пользователя, предпочитает ли он сказать или уйти. Нет никакого способа заставить любой выбор.
См. Также Документация MDN для window.onbeforeunload . В Firefox 4+ есть ошибка.
Абстрагирование от реализации обратно к практической цели: показать анимацию между загрузками страниц. Несколько возможностей, которые, вероятно, имеют массу отдельных вопросов и руководств по SO в Интернете:
Используйте AJAX для загрузки контента
При каждом щелчке по внутренней ссылке отображается значок загрузчика, запускается AJAX-запрос на содержимое другой страницы. В то же время, когда по-прежнему показывается старый контент, лучше продолжать показывать его со спиннером вверху, чем показывать пустую страницу только со спиннером. В обратном вызове ajax создайте свою причудливую анимацию для элемента содержимого (например, jQuery slideUp ()), затем поменяйте содержимое новым содержимым, скройте спиннер и выполните следующую причудливую анимацию (например, jQuery slideDown ()).
Перехватить теги привязки и перенаправить вручную
Работать с AJAX все хорошо, но если вы не хотите этого делать, вы также можете попробовать обойти ограничение onbeforeunload: вместо того, чтобы задерживать onbeforeunload, убедитесь, что событие не было вызвано в первую очередь.
Привяжите делегированное событие ко всем тегам привязки на вашей странице и предотвратите дефолт (или верните false), чтобы браузер не переходил по ссылке. Затем выполните анимацию и в обратном вызове выполните навигацию вручную, установив window.location для URL-адреса из атрибута href атрибута щелкающего тега.