2011-12-19 4 views
1

перейти к: http://fancybox.net/ открыть любой пример (на нижней части страницы)FancyBox - как прокручивать страницы, когда FancyBox сфокусирована

, когда мышь завис над содержанием внутри FancyBox, главное окно браузера не могу быть прокручивается. когда мышь находится где-нибудь еще, она работает. Я не хочу этого поведения. как бы вы это исправили?

страница под пропиской fancybox modal doenst, когда mousecursor находится внутри fancyboxmodal.

+0

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

+0

, например, второй пример там «Inline - модальное окно». когда я открываю его и накладываю мышь на текст внутри fancybox «Lorem ipsum dolor sit amet, consectetur adipiscing elit» и попробуйте прокрутить всю страницу с помощью трекпада, страница не прокручивается. это застряло. возможно, это имеет какое-то отношение ко мне с помощью трекпада. – Hans

ответ

3

Просмотрите исходный код Fancybox и замените код, обозначенный if ($.fn.mousewheel) {...}, следующим текстом (Полный код может быть найден here).

if ($.fn.mousewheel) { 
     wrap.bind('mousewheel.fb', function(e, delta) { 
      if (!busy && $(e.target).get(0).clientHeight == 0 || $(e.target).get(0).scrollHeight === $(e.target).get(0).clientHeight) { 
       // Remove the next line too, if you want weird movements 
       // at the image gallery example... 
       e.preventDefault(); 
       $.fancybox[ delta > 0 ? 'prev' : 'next'](); 
      } 
     }); 
    } 

Создатели FancyBox инвалидов прокрутки на элементах FancyBox, без добавления опции для настройки этого. Следовательно, вам нужно вручную отредактировать код.

+0

"_ Создатели Fancybox отключили прокрутку на элементах Fancybox, не добавляя опцию для его настройки. Следовательно, вам нужно вручную отредактировать код.» «... ну, это не обязательно так. Вышеупомянутая функция предназначена для взаимодействия с плагином jQuery mousewheel. Хороший плагин позволит вам настроить параметры из исходного js-файла, и вы не должны редактировать исходный файл, если вы не хотите расширять его за пределы своих функций по умолчанию. – JFK

5

Действительно, бит кода, упомянутый Робом, является виновником. Но вместо изменения FancyBox самого вы можете сделать что-то вроде этого:

$('#fancybox-outer').mousewheel(function(event, delta) { 
    event.stopPropagation(); 
    $('#fancybox-wrap').trigger('mousewheel.fb', delta); 
}); 

Это поймать событие колесика на #fancybox-outer и предотвратить событие от барботирования до #fancybox-wrap.

Таким образом, поведение прокрутки по умолчанию будет иметь место, но вы также можете запускать обработчик события заблокированного mousewheel вручную, как я.

+0

Я запускаю событие mousewheel.fb, но это искусственное событие, а не оригинальное, поэтому код все еще работает. – ori

+0

Я вижу. Концепция в порядке, но она не работает, из-за заполнения '20px' на каждой стороне элемента' # fancybox-wrap'. +1 для этой идеи. –

1

Marcel,

Не усложняйтесь. Вам вообще не нужно возиться с файлом fancybox js. Упомянутая выше функция имеет свою цель.

Причина страница ведет себя так, как вы описали, это потому, что он загружен jQuery mousewheel plugin, который используется для навигации по галереям внутри FancyBox с помощью колеса мыши.

Если вы не загружаете плагин mousewheel (прилагается к загрузке fancybox), вы можете прокручивать родительскую страницу, независимо от того, наводите ли вы внутри содержимого fancybox или нет. Конечно, если у вас есть галереи, вам нужно использовать стрелки для навигации по ним.

7

Ну, самое простое решение - добавить $ ('# fancybox-wrap'). Unbind ('mousewheel.fb'); сразу после инициализации .fancybox().

+1

Это, безусловно, самый простой и правильный ответ. –

1

Если вам не нужна возможность прокрутки изображений в галерее с помощью колесика мыши, то хорошим решением является добавление $('#fancybox-wrap').unbind('mousewheel.fb'); только после .fancybox() инициализации, как указано на vbulant

2

В опциях FancyBox, вы можете сделать:

onComplete: function(){ 
    $("#fancybox-wrap").unbind('mousewheel.fb'); 
} 

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

0

для FancyBox - Jquery Plugin версии: 2.1.5

'afterShow': function() { 
    $(".fancybox-wrap").unbind('mousewheel.fb'); 
}, 

dosen't работа 'OnComplete' !!!