【问题标题】:jquery 1.9.1 and safari on macbook air, .on() event handler doesn't workjquery 1.9.1 和 macbook air 上的 safari,.on() 事件处理程序不起作用
【发布时间】:2013-12-17 09:05:48
【问题描述】:

我正在使用以下代码:

$jq191('html, body').on('DOMMouseScroll mousewheel touchmove', '.fancybox-overlay', function( e ){ e.preventDefault(); e.stopPropagation(); });

我也试过了:

$jq191('html, body').on('DOMMouseScroll mousewheel touchmove', function( e ){ e.preventDefault(); e.stopPropagation(); });

但事件处理程序永远不会在带有 safari 的 macbook air 上触发。我不知道我做错了什么。如果我将 html 正文设置为溢出:隐藏,正文不会滚动,但是我不希望花哨的框在删除/添加垂直滚动条时移动正文的内容。谢谢。

编辑 在文档中的 jquery 中它说: 如果选择器被省略或为空,则事件处理程序被称为直接或直接绑定。每次在选定元素上发生事件时都会调用处理程序,无论是直接发生在元素上还是来自后代(内部)元素的冒泡。

那么为什么这不能阻止冒泡事件将花式框一直滚动到正文? (使用:$jq191('html, body').on('DOMMouseScroll mousewheel touchmove', function(e){ e.preventDefault(); e.stopPropagation(); }); )

另一个奇怪的事情是,当滚动覆盖时,当调试器打开时,它会在事件上中断,但在事件中断后,正文无论如何都会立即滚动。可能是一个错误。

编辑 做了一个 jsfiddle @http://jsfiddle.net/Sa7AP/ 如果你在 chrome 和 safari 中滚动,在粉色框内,一旦你到达粉色框的末端并继续滚动,背景也会滚动。我试图在幻想框内滚动时阻止背景滚动。

【问题讨论】:

  • 我的理解是你想停止在 fancybox 中滚动吗?
  • 我想停止fancybox中的传播,我希望fancybox仍然滚动,但我不希望它在背景上滚动。

标签: jquery safari mousewheel jquery-1.9 touchmove


【解决方案1】:

已编辑(javascript 逻辑已更改 - 工作)

好的,我发现了另一个 SO 问题,并使用了他们稍微修改过的版本:jsfiddle:http://jsfiddle.net/Sa7AP/20/

html:

<div class="container">
    <div class="fancybox-wrap">
       inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text inner pink text 
    </div>
    random text random text random text random text random text random text random text random text random text random text random text random text random text random text random text random text random text random text random text random text random text random text random text random text random text random text random text random text random text random textrandom text random text random text random text random text random text random text random text random text random text random text random text random text random text random textrandom text random text random text random text random text random text random text random text random text random text random text random text random text random text random textrandom text random text random text random text random text random text random text random text random text random text random text random text random text random text random textrandom text random text random text random text random text random text random text random text random text random text random text random text random text random text random textrandom text random text random text random text random text random text random text random text random text random text random text random text random text random text random textrandom text random text random text random text random text random text random text random text random text random text random text random text random text random text random textrandom text random text random text random text random text random text random text random text random text random text random text random text random text random text random textrandom text random text random text random text random text random text random text random text random text random text random text random text random text random text random textrandom text random text random text random text random text random text random text random text random text random text random text random text random text random text random textrandom text random text random text random text random text random text random text random text random text random text random text random text random text random text random textrandom text random text random text random text random text random text random text random text random text random text random text random text random text random text random textrandom text random text random text random text random text random text random text random text random text random text random text random text random text random text random textrandom text random text random text random text random text random text random text random text random text random text random text random text random text random text random text
</div>

javascript:

function isBeyond( element, event )
{
    var el = $( element );
    var scrollTopHeight= el[0].scrollHeight - el[0].clientHeight;
    var delta= event.originalEvent.wheelDelta || -event.originalEvent.detail;
    if ( ( el.scrollTop() <= 0 &&  delta > 0 ) || ( el.scrollTop() >= scrollTopHeight && delta < 0 ) ) {
      return true;
    }
    return false;
}

jQuery('.fancybox-wrap').on('DOMMouseScroll mousewheel touchmove', function(e) { if( isBeyond( this, e) )
{
     e.preventDefault();
} });

【讨论】:

    【解决方案2】:

    试试这个

    $jq191('body').on('DOMMouseScroll mousewheel touchmove', '.fancybox-overlay', function( e ){ e.preventDefault(); e.stopPropagation(); });
    

    $jq191('html body').on('DOMMouseScroll mousewheel touchmove', '.fancybox-overlay', function( e ){ e.preventDefault(); e.stopPropagation(); });
    

    【讨论】:

    • 嘿,谢谢,但在花式框弹出窗口内滚动时它不会停止传播。但是,当在 fancybox 叠加层上滚动时,它正在工作。一定有它不能在弹出窗口上工作的原因,指定 .on() 时委托类是否必须是最顶层的元素?
    • 是的,看起来确实如此。当尝试在我指定的类的边距内滚动时,它也可以工作。所以我应该指定一个不同的类。谢谢你,先生。
    • 我有很多元素需要委托,有没有办法只委托容器中的所有事件?因为当我尝试时它似乎不起作用: $jq191('html body').on('....', .container, function(){ e.stopPropagation() });
    • 我没听懂你...你能用 jsfiddle 来展示你的代码吗?这将有助于我理解您的问题。
    • 这一定是一个错误。当我现在打开调试器时,使用 $jq191('html body').on( '...', '.fancybox-wrap', function( e ){ e.stopPropagation(); });当我关闭调试器时,主体仍然滚动,但如果我打开调试器,stopPropagation 工作。很奇怪。
    猜你喜欢
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多