2013-07-05 3 views
1

Мне нужно передать переменную внутри функции «привязать колесо мыши» и запустить эту функцию, когда пользователь нажимает на ссылку.jQuery bind mouse wheel

Я просто не знаю, как это сделать, поскольку я не могу установить привязку внутри обработчика событий. Это просто не работает.

Это, как я попробовал:

$('.link').click(function(e) 
{ 
    e.preventDefault(); 

    var nbr=$(this).data('article_nbr'); 

    $("#overlay").bind("mousewheel", function (event,delta,nbr) 
    { 
     ... 
     scrollTop = $("#article"+nbr).scrollTop(); 
     scrollTopNew = scrollTop - (delta * 30); 
     ... 
    } 
}); 

Я могу себе представить, что это совершенно неправильно, но я просто не могу понять, правильный способ получить то, что мне нужно.

До сих пор я могу использовать привязку только тогда, когда документ готов, но здесь он должен быть запущен в соответствии с некоторыми событиями или событиями.

+1

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

+0

Хорошо: я показываю статьи (один за другим) на оверлее без обновления страницы на веб-сайте, который не имеет переполнения. Поэтому мне нужно создать свою собственную систему прокрутки на оверлее с учетом высоты, рассчитанной в соответствии с длиной текущей статьи. Итак, когда пользователь нажимает на ссылку, я получаю номер статьи, который определяет статью div. Теперь я пытаюсь использовать эти данные внутри связывания, без каких-либо успехов: 1) я не знаю, как запустить привязку при возникновении события; 2) я не знаю, как передать переменную, полученную из этого события использовать его внутри «bind». Спасибо за помощь. – Baylock

ответ

2

Вам нужно определить дельту и NBR снаружи, как глобалов, а затем вы можете использовать его внутри ,

var delta = 10; 
var nbr = 'some_value'; 

$('.link').click(function(e) 
{ 
    e.preventDefault(); 

    var nbr=$(this).data('article_nbr'); 

    $("#overlay").bind("mousewheel", function (event,delta,nbr) 
    { 
     ... 
     scrollTop = $("#article"+article_nbr).scrollTop(); 
     scrollTopNew = scrollTop - (delta * 30); 
     ... 
    } 
}); 
+0

Спасибо. Именно то, что мне нужно. Я всегда думал, что, пока я передаю переменную в качестве параметра через функцию, я был в порядке. Не думал о том, чтобы сделать его глобальным, поскольку я полагал, что это не будет иметь никакого значения. Очевидно, так оно и есть. Понятно, что я не все понял, но в конце концов. Спасибо. – Baylock

+0

WAAAAAAAAT Почему бы вам не объявить глобальность? – FlavorScape

+0

У меня это * [Нарушение] Добавлен непассивный прослушиватель событий к событию «mousewheel» с блокировкой прокрутки. Рассмотрите маркировку обработчика событий как «пассивную», чтобы сделать страницу более отзывчивой * – Elshan

0

Если я получил то, что хотел сделать, свиток() будет выполнять работу

http://api.jquery.com/scroll/

$("#overlay").scroll(function(){ 
    // scroll happened ! 
}); 
+0

Проблема остается такой же, как я не могу поместить ее внутри обработчика кликов. – Baylock

+1

«1) Я не знаю, как запустить привязку при возникновении события» Прокручивает ответ? «2) Я не знаю, как передать переменную, которую я получил из этого события, чтобы использовать ее внутри« привязки ». Спасибо за вашу помощь» использовать глобальную переменную как указано @Polakete – isThisLove

+0

Да, это была проблема , Спасибо – Baylock