第一次停止事件

时间:2013-02-08 09:44:07

标签: javascript jquery

我正在使用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 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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
    }
});

答案 2 :(得分:0)

尝试使用.one()代替.bind()

$('#BG').one('inview',

答案 3 :(得分: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'});
    }
});