2

我有这个脚本可以在滚动时将我的菜单栏修复到浏览器上。这里没有什么真正需要改变的(按原样工作)。但是,您可能需要它...

var div = $('#wizMenuWrap');
var editor = $('#main_wrapper');
var start = $(div).offset().top;

$(function fixedPackage(){   
    $.event.add(window, "scroll", function() {
        var p = $(window).scrollTop();
        $(div).css('position',((p)>start) ? 'fixed' : 'static');
        $(div).css('top',((p)>start) ? '0px' : '');

        //Adds TOP margin to #main_wrapper (required)
        $(editor).css('position',((p)>start) ? 'relative' : 'static');
        $(editor).css('top',((p)>start) ? '88px' : '');
    }); 
});

现在讨论手头的问题。我有另一个调用模式弹出窗口的脚本函数(它再次正常工作)。但是,当我在模式打开时滚动页面时,从 UI 的角度来看,它并不光滑。所以我想在调用下面的模态脚本时禁用上面的脚本。换句话说,当我单击打开模式弹出窗口时,上面的脚本应该不起作用。

$(function () {

var setUp = $('.setupButton');

// SHOWS SPECIFIED VIEW

$(setUp).click(function () {        
    $('#setupPanel').modal('show');
    //PREVENTS PACKAGE SELECT FIXED POSITION ON SCROLL
    $(setUp).unbind('click',fixedPackage);
});

})

正如您在上面看到的,我尝试取消绑定滚动功能(第一个代码片段),但这是不正确的。

这两个脚本位于两个独立的 js 库中。

4

4 回答 4

3

我强烈不同意你应该绑定和解除绑定事件。没必要!滚动事件中的一些逻辑来检查模式是否打开应该可以解决这个问题:

$(function fixedPackage(){   
    $(window).bind("scroll", function() {

        // if the modal is displayed, do nothing
        if ($('#setupPanel').is(':visible'))
            return;

        // -- existing code here --
    }); 
});

这样,如果模态元素可见,代码就会停止在它所在的位置。隐藏元素后,代码将继续像以前一样工作,而无需在其他脚本中管理事件状态……令人困惑!

另外,正如其他一些评论中提到的,不要使用$.event.add,使用公共 API 方法bind

文档

于 2012-06-26T21:11:29.107 回答
1

当您将 jquery 对象存储到 var 中时,您可以直接调用函数:

var setUp = $('.setupButton');
var div = $('#wizMenuWrap');
var editor = $('#main_wrapper');

setUp.click(...);
seTup.unbind(...);

editor.css(...);

div.css(...);
于 2012-06-26T21:05:51.803 回答
0

尝试

  $(setUp).unbind('click').die('click')
于 2012-06-26T21:03:23.160 回答
0

您需要做的就是将脚本更改为:

$(function () {

var setUp = $('.setupButton');

// SHOWS SPECIFIED VIEW

$(setUp).bind('click',function () {        
    $('#setupPanel').modal('show');
    //PREVENTS PACKAGE SELECT FIXED POSITION ON SCROLL
    $(setUp).unbind('click');
});

})

如 jQuery 文档中所述,Event handlers attached with .bind() can be removed with .unbind(). 有关绑定和取消绑定的更多信息:

.bind()

.unbind()

于 2012-06-26T21:05:32.847 回答