#jquery #onchange
#jquery #onchange
Вопрос:
Я новичок в Jquery и пытаюсь привыкнуть к нему. Есть ли какое-либо событие, которое я могу привязать к странице, чтобы остановить таймер слайдера?
Что я хочу сделать, так это то, что когда пользователь меняет страницу или переходит на другую вкладку, я хочу перехватить это событие. Есть ли какое-либо событие или прослушиватель для этой системы?
Ответ №1:
Я бы выбрал onbeforeunload
вместо unload
, чтобы дать вам максимальное время. Однако, если вы планируете в это время отправлять запрос обратно на сервер (или делать что-либо асинхронно), вы можете оказаться в состоянии гонки, когда иногда запрос проходит, а иногда нет.
Это происходит потому, что страница перестает обрабатывать ваш запрос (или другое асинхронное действие) при выгрузке. Это может произойти почти сразу в современных браузерах и довольно быстро в старых версиях. Из-за этого очень редко имеет смысл что-то делать в любом из unload
beforeunload
событий or .
Если вы пытаетесь передать информацию о таймере следующему URL-адресу, вы можете просто изменить URL-адреса при нажатии на них.
$('a').click(function(){ this.href=this.href "#timer=" timerVar; });
Затем, когда вы переходите на следующую страницу, вы можете прочитать это последнее значение из URL.
Google Analytics решает эту проблему, добавляя задержку ко всем ссылкам:
$('a').click(function(){
var that = this;
setTimeout(function(){
window.location=that.href;
},100);
return false;
});
Это просто дает вашей странице дополнительное время для перехода по ссылкам. Хотя это не надежно, но это не имеет значения для Google, поскольку аналитика несколько временная (и они также используют параметры url для других более важных вопросов (например, кампаний)).
Комментарии:
1. Спасибо за ответ, Алекс. Но, я думаю, вы меня неправильно поняли. Я сделал простой слайдер с помощью jQuery. И у него есть таймер. Что я хочу сделать, так это остановить таймер, если пользователь переходит на другую вкладку, другой сайт или переходит в какой-либо другой браузер. Я хочу перехватить это событие, как и многие ООП, позволяющие управлять этими событиями с помощью «фокусировки» или «фокусировки». Но, когда я читаю документы jQuery, они используют фокус для элементов, а не для всей страницы. Может быть, я ошибаюсь. Как я уже сказал, я новичок в jQuery.
2. В моем ответе рассматривается, как вы остановите таймер, а затем отправите информацию на следующую страницу вашего сайта. Затем вы можете продолжить обработку этого события при загрузке новой страницы.
3. Как я понимаю (поправьте меня, если я ошибаюсь), этот код отправляет текущее время на «мою» другую страницу. Но то, что я хочу сделать, это перехватить событие, когда пользователь «фокусируется» на чем-то другом. какой-то другой веб-сайт, какой-то другой браузер, локальные файлы, что угодно.. просто когда пользователь «фокусируется» на моей странице. Также большое вам спасибо за ответы и попытки помочь
4. о, это немного сложнее. Я понимаю, что вы имеете в виду. Я думаю, что многие старые браузеры поддерживают
window.onfocus
, и в более новых браузерах вы могли бы понять это, используяrequestAnimationFrame
which срабатывает только при фокусировке окна. Хотя это довольно большой взлом. Ваш вызов.
Ответ №2:
Взгляните на это: http://api.jquery.com/unload /
Комментарии:
1. Спасибо, Сэм, но он не запускается, как говорится. Я имею в виду, что я пытался изменить страницу, используя кнопки назад и вперед. Но это не запускает даже образец по указанной вами ссылке. Нужно ли добавлять еще несколько кодов?
2. Если у вас возникают проблемы с отображением этих событий, это потому, что они запускаются, а затем консоль очищается, чтобы показать новую страницу. Большинство консолей (firebug и webkit) имеют возможность не удалять старые журналы после выгрузки страницы. Вам нужно будет использовать эти настройки.
3. Современные браузеры Webkit, такие как Chrome и Safari, не поддерживают этот метод выгрузки.
4. Я просто хочу остановить свой таймер, когда пользователь переходит на другую вкладку или проверяет свои папки или что-то в этом роде. Для использования меньшего объема памяти и процессора. В большинстве ООП у вас есть методы фокусировки, но не удалось найти рабочий для jQuery
Ответ №3:
http://www.webkit.org/blog/516/webkit-page-cache-ii-the-unload-event / этот пост в блоге должен помочь вам в этом..
Комментарии:
1. Я тоже попробовал этот метод.. На самом деле это имеет для меня больше смысла. Javascript проще, чем jQuery, но все равно он не запускается.