2013-12-03 2 views
0

Прочитали, что можно обнаружить свиток с этой линии:Jquery обнаружить свиток однажды

$('window').one('scroll', function() { }); 

Если есть этот встроенный код:

var TimeVariable=setInterval(function(){ DoJQueryStuff() },300); 

function DoJQueryStuff() 
{ 
if(typeof jQuery == "undefined") return; 
window.clearInterval(TimeVariable); 
$('body').one('mousemove', function() { alert('mouse'); }); 
$('window').one('scroll', function() { alert('scroll'); }); 
} 

DoJQueryStuff называется каждые 300 мс до тех пор, JQuery не загружен. Если я перемещаю мышь в любом месте экрана, я получил предупреждение «мышь». Если я прокручу вниз, я НЕ получаю предупреждение «прокрутки». т. Е. Он не стреляет.

Любая помощь была бы принята с благодарностью.

Дэвид

+1

Вместо того, чтобы проверять каждые 300 мс до тех пор, JQuery нагрузки, было бы возможно, чтобы добавить функцию в 'ready' функции? '$ (document) .ready (function() {do stuff});' – Kyle

+0

Kyle, $ (document) без загрузки Jquery приведет к ошибке. jquery загружается после загрузки страниц (теперь это то, что предлагает Google). Пример вашей идеи будет оценен – Cymro

ответ

4

первый, пожалуйста, используйте JQuery readyhttp://api.jquery.com/ready/ метод. Я не хочу сказать, что ваша реализация неверна, но медленнее, чем метод jquery ready.

Ваша функция прокрутки не выполняется в основном потому, что вы привязываете ее к неправильному объекту. , когда вы ссылаетесь на объект window с jquery, не заверните его в апострофы.

если вы сделаете так, JQuery будет стажер вызвать document.getElementsByTagName и не может найти тэг window потому что window не является дочерним window.document узла. поэтому функция обнаружения прокрутки никогда не запускается, потому что jquery не может связать eventListener с вашим тэгом отправленного элемента.

просто привяжите его к window без апострофов. это заставляет jquery привязывать событие прокрутки непосредственно к объекту DOM window, где ваша функция правильно запускается при прокрутке.

Пример:

$(window).ready(function(){ 
    $(this).one('mousemove', function() { 
     // mouse move 
    }).one('scroll', function(){ 
     // scroll 
    }); 
}); 
+0

Google сообщает нам загружать jquery после загрузки страницы. Это то, что я делаю. Затем я устанавливаю таймер, чтобы проверить, действительно ли загружен jquery. Я обнаруживаю перемещение мыши или прокрутку для загрузки внешнего js-файла. Почему мое обнаружение прокрутки должно быть в готовой функции? – Cymro

+0

Я обновил свое объяснение - надеюсь, что теперь станет более понятным – ins0

+0

Вы можете использовать функцию onload при загрузке jQuery для запуска любого кода, который зависит от него. Если вы используете библиотеку, у нее должен быть способ добавить функцию onload. Если вы этого не сделаете, вы можете использовать '

Смежные вопросы