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

発射されたかどうかを伝える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 に答える
1

jQuery unbind メソッドを使用してイベント ハンドラーをアンバインドするか、1 つのメソッドを使用してイベントを最大 1 回処理することができます。

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

于 2013-02-08T09:52:44.437 に答える
0

#BGが表示されていないときに、対角線上のスタイルを削除したいと思いますか?

これを2つのリスナーに分割します

//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 に答える
0

.one()代わりに試してください.bind()

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