0

当我使用jquery.inview处于特殊滚动位置时,我正在触发一个事件。如果元素在视口中,它通过添加类来工作。在我的脚本中我说以下

    var $BG = $('#BG')
$('#BG').bind('inview', function (event, visible) 
{
        if (visible == true) {
        $(this).addClass("inview");

        } else {

        $(this).removeClass("inview");
        }
    });

   if($BG.hasClass("inview")){

        $('#diagonal').css('left',0)
        $('#diagonal').css('top',0)

    }

但它会一次又一次地触发 .css 事件,但我希望它们仅在 #BG 第一次获得“inview”类时触发。谢谢泰德

4

4 回答 4

1

您可以使用 jQuery unbind 方法取消绑定事件处理程序,或者使用一种方法最多处理一次事件。

http://api.jquery.com/category/events/event-handler-attachment/

于 2013-02-08T09:52:44.437 回答
1

您可以添加一些 var 来告诉它是否已被解雇:

var $BG = $('#BG'), firedInView = false;

$BG.bind('inview', function (event, visible) {
    if(!firedInView) {
        firedInView = true; //set to true and it won't be fired
        //do your stuff
    }
});
于 2013-02-08T09:54:25.410 回答
0

.one()改为尝试.bind()

$('#BG').one('inview',
于 2013-02-08T09:47:48.443 回答
0

我假设您想在#BG 不在视线范围内时删除对角线上的样式?

我会把它分成两个听众

//If bg does not have class inview, addClass if it is visible
$('body').on('inview', '#BG:not(.inview)', function (event, visible) {
    if (visible == true) {
        $(this).addClass("inview");
        $('#diagonal').css({'left': 0, 'top': 0});
    }
});

//If bg does has class inview, removeClass if it is invisible
$('body').on('inview', '#BG.inview', function (event, visible) {
    if (visible == false) {
        $(this).removeClass("inview");
        $('#diagonal').css({'left': 'auto', 'top': 'auto'});
    }
});
于 2013-02-08T09:59:27.537 回答