0

我有一个脚本在显示弹出框时禁用正文元素的滚动,但是我不想禁用弹出框(或主体以外的任何其他滚动条)的滚动,我已经建立通过选择弹出框中的元素我想要什么,但是我希望它适用于所有内容,而不仅仅是那个元素。

 $('html').on('mousewheel DOMMouseScroll', "body", function(e) {
    var scrollTo = null;

    if (e.type == 'mousewheel') {
        scrollTo = (e.originalEvent.wheelDelta * -1);
    }
    else if (e.type == 'DOMMouseScroll') {
        scrollTo = 40 * e.originalEvent.detail;
    }

    if (scrollTo) {
        e.preventDefault();
        $(this).scrollTop(scrollTo + $(this).scrollTop());
    }
});


$('div').on('mousewheel DOMMouseScroll', ".photos", function(e) {
    e.stopPropagation();

});

所以我想要做的是第二个脚本,而不是直接选择 .photos ,只是选择 <body> 的任何孩子

4

1 回答 1

3

尝试使用>子选择器,不要在委托节点集上使用选择器。

$('body > *').on('mousewheel DOMMouseScroll', null, function(e) {
    e.stopPropagation();
});

如果您想要任何后代,请body删除该>规则。

编辑:
前面的代码使用了一个选择器,这会使委托无效。感谢@RichardNeilIlagan 指出这一点。

编辑 2:
如果您只想滚动弹出框中的内容,为什么不让您的弹出框使用 100% W x 100% H 覆盖,就像 jQuery UI 对话框在“模态”模式下所做的那样?然后你可以将你的无滚动处理程序附加到全窗口覆盖stopPropagation上,不是吗。除非您要求弹出窗口后面的内容仍然可以访问,否则这将起作用。

于 2012-10-03T17:47:48.310 回答