2016-09-26 3 views
0

私はプログレスバーを作成していて、ビューポートにあるときに再生したいと思います。私はこれを稼働させましたが、コードは毎回実行されており、1回だけ実行する必要があります。これは複数のプログレスバーを作成するためです。 ;-) 以下のコードはJoomla Extensionで使用されています。jqueryは一度ビューポートで.one()を実行します

(function ($) { 
    $(document).ready(function() { 
    // Function that checks if it is in view. 
    $("<?php echo '#progress' . $module->id ?>").waypoint(function() { 
     // Function that makes sure it only runs once. 
     // -----------I need to use .one() here but how? 
     // The location of the progressbar code for now lets put a alert in. 
     alert("run only once"); 
    }, { 
     offset: '50%' 
    }); 
    }); 
})(jQuery); 

ここでは、.one()関数とその使用方法について読んでいます。しかし、私はclickreadyを使用した例を試しましたが、クリックは私が望むものではありませんが、準備はすべきですが、何も効果がありませんでした。

+0

_「が、コードは今たびに実行し、私はそれが一度だけ実行する必要があります。」_あなたは関数が(.ready 'で一度だけ呼び出されるべきであることを意味するか)'または一度各ブラウザについてセッション? – guest271314

+0

@ guest271314コードは.ready()で一度だけ呼び出されるべきだと思います。私はそれがページがロードされ、divが画面の中央にあるときに実行したい。 – purple11111

+0

@KevinB _ "ウェイポイントは、要素をスクロールするたびに関数を実行するのを容易にするライブラリです。" _ Believe OPはハンドラを最大で1回呼び出そうとしています。同じプラグインの場合は、[Waypoints](https://github.com/imakewebthings/waypoints)を参照してください。 – guest271314

答えて

1

$.Callbacks()"once"をパラメータとして使用できます。

(function ($) { 
    $(document).ready(function() { 

    function runOnce() { 
     // Function that makes sure it only runs once. 
     // -----------I need to use .one() here but how? 
     // The location of the progressbar code for now lets put a alert in. 
     alert("run only once"); 
    } 

    var callbacks = $.Callbacks("once"); 

    callbacks.add(runOnce); 
    // Function that checks if it is in view. 
    $("<?php echo '#progress' . $module->id ?>").waypoint(function() { 
     callbacks.fire(runOnce); 
    }, { 
     offset: '50%' 
    }); 
    }); 
})(jQuery); 
+0

"downvote"の説明はありますか? – guest271314

+0

これは完璧に動作します。私は最初に警告を出して試しました。ジャックポット。その後、プログレスバーコードを入力し、もう一度完璧な結果を返します。どうもありがとうございました。 – purple11111

+1

質問が下落した理由を知っていますか?またはあなたがdownvoteの理由を見ることができる場所! – purple11111

関連する問題