можно отключить прокрутку в браузере (только для браузеров прокрутки), пока открыто диалоговое окно jQuery UI.
Примечание. Я хочу, чтобы прокрутка была включена внутри диалогового окна
можно отключить прокрутку в браузере (только для браузеров прокрутки), пока открыто диалоговое окно jQuery UI.
Примечание. Я хочу, чтобы прокрутка была включена внутри диалогового окна
Вы не можете полностью отключить прокрутку, но вы можете остановить прокрутку с помощью колеса мыши и кнопок, которые обычно выполняют прокрутку.
Посмотрите этот ответ, чтобы понять, как это делается. Вы можете вызвать эти функции на создать событие и вернуть все в норму, close.
$(formObject).dialog({
create: function(event, ui) {
$("body").css({ overflow: 'hidden' })
},
beforeClose: function(event, ui) {
$("body").css({ overflow: 'inherit' })
}
});
Или, как я упоминаю в комментарии ниже:
var dialogActiveClassName="dialog-active";
var dialogContainerSelector="body";
$(formObject).dialog({
create: function(event, ui) {
$(dialogContainerSelector).addClass(dialogActiveClassName);
},
beforeClose: function(event, ui) {
$(dialogContainerSelector).removeClass(dialogActiveClassName);
}
});
Но на самом деле, честно говоря, вы должны убедиться, что создание диалога создает пузырьки события до вашего оконного объекта, где вы будете наблюдать за указанными событиями, примерно так же, как это псевдо:
var dialogActiveClassName="dialog-active";
var dialogContainerSelector="body";
$(window).on("event:dialog-opened", function(){
$(dialogContainerSelector).addClass(dialogActiveClassName);
});
$(window).on("event:dialog-closed", function(){
$(dialogContainerSelector).removeClass(dialogActiveClassName);
});
Мне нужно было сделать то же самое, просто сделайте это, добавив класс в тело:
.stop-scrolling {
height: 100%;
overflow: hidden;
}
Добавьте класс, затем удалите, когда вы хотите снова включить прокрутку, протестированную в IE, FF, Safari и Chrome.
$('body').addClass('stop-scrolling')
Справочник JS Bin для переполнения CSS
Просто добавьте
$('body').css('overflow','hidden');
к вашей функции, которая показывает модальный.
И
$('body').css('overflow','scroll');
к вашей функции, что закрывает модальный.
Вот лучшее, что я мог придумать для решения этой проблемы (у меня была та же проблема), используя функции, указанные в ответе JasCav выше (эти функции):
dialogClass: 'dialog_fixed',
create: function(event, ui) {
disable_scroll(); // disable while dialog is visible
$('#dialog_form').hover(
function() { enable_scroll(); }, // mouse over dialog
function() { disable_scroll(); } // mouse not over dialog
);
},
beforeClose: function(event, ui) {
enable_scroll(); // re-enable when dialog is closed
},
css:
.dialog_fixed { position:fixed !important; }
и он просто фиксирует диалог на странице, что, возможно, нам больше не нужно.
Это позволяет прокручивать мышью, когда мышь находится над диалогом, но не тогда, когда она находится вне диалогового окна. К сожалению, он по-прежнему будет прокручивать главную страницу, когда мышь находится над диалогом, и вы прокручиваете конец содержимого внутри диалогового окна (в IE сразу, в Safari и Firefox после небольшой задержки). Я хотел бы знать, как это исправить.
Я тестировал это в Safari 5.1.5, Firefox 12 и IE 9.
Останавливает прокрутку, настраивает положение диалога и возвращает пользователя к части страницы, которую они просматривали, после закрытия диалогового окна
$('<div/>').dialog({
open : function(event, ui) {
$('html').attr('data-scrollTop', $(document).scrollTop()).css('overflow', 'hidden');
$(this).dialog('option','position',{ my: 'center', at: 'center', of: window });
},
close : function(event, ui) {
var scrollTop = $('html').css('overflow', 'auto').attr('data-scrollTop') || 0;
if( scrollTop ) $('html').scrollTop( scrollTop ).attr('data-scrollTop','');
}
});
Старый пост, но так, как я это делал:
open: function(event, ui) {
$('html').css('overflow', 'hidden');
$('.ui-widget-overlay').width($(".ui-widget-overlay").width() + 18);
},
close: function(event, ui) {
$('html').css('overflow', 'hidden');
}
Это, кажется, работает довольно хорошо
Искал долгое время. Наконец, следующая ссылка меня спасает. Надеюсь, что это поможет другим.
Он использует контейнер для основного тела. Диалог прокрутки не влияет на контейнер фона.
http://coding.abel.nu/2013/02/prevent-page-behind-jquery-ui-dialog-from-scrolling/
попробуйте этот. он используется http://jqueryui.com сам
html { overflow-y: scroll; }
create:
событие Заставляет полосы прокрутки исчезать при первой загрузке страницы
Я меняю его на open:
и теперь работаю как шарм
Создайте этот класс css:
.stop-scrolling {
overflow:hidden;
height: 100%;
left: 0;
-webkit-overflow-scrolling: touch;
position: fixed;
top: 0;
width: 100%;
}
Затем добавьте это в свой диалог init:
$("#foo").dialog({
open: function () {
$('body').addClass('stop-scrolling');
},
close: function () {
$('body').removeClass('stop-scrolling');
},
// other options
});
Если вы уже используете open: и закрываете: для вызова других функций просто добавьте строки addClass и removeClass в нужное место.
Лучшее решение, предотвращающее прыжки тела вверх, когда всплывающее окно закрыто:
$(document).ready(function(){
var targetNodes = $(".cg-popup");
var MutationObserver = window.MutationObserver || window.WebKitMutationObserver;
var myObserver = new MutationObserver (mutationHandler);
var obsConfig = { attributes : true, attributeFilter : ['style'] };
// ADD A TARGET NODE TO THE OBESERVER. CAN ONLY ADD ONE NODE AT TIME
targetNodes.each ( function () {
myObserver.observe (this, obsConfig);
} );
function mutationHandler (mutationRecords) {
var activate_scroll = true;
$(".cg-popup").each(function( index ) {
if($(this).css("display") != "none"){
$('html, body').css({'overflow-y': 'hidden', 'height': '100%'});
activate_scroll = false;
return;
}
});
if(activate_scroll){
$('html, body').css({'overflow-y': 'auto', 'height': 'auto'});
}
}
});
Эта проблема исправлена, Решение. Просто откройте свой bootstap.css и измените, как показано ниже.
body.modal открыть,
.modal-open.navbar-fixed-top,
.modal-open.navbar-fixed-bottom {
margin-right: 15px;
}
to
body.modal открыть,
.modal-open.navbar-fixed-top,
.modal-open.navbar-fixed-bottom {
/margin-right: 15px;/
}
Пожалуйста, просмотрите приведенное ниже видео на YouTube менее 3 минут, и ваша проблема будет исправлена ... https://www.youtube.com/watch?v=kX7wPNMob_E
Это потому, что вы должны добавить modal: true
в свой код; это предотвратит взаимодействие пользователя с фоном.