1

特定のページに、リンクをクリックするとビデオが表示されるFancyboxアイテムのインスタンスが複数あります。

それとは別に、URLからデータを取得し、戻り値に基づいて別のファンシーボックスを表示する関数が5秒ごとに実行されています。

問題は、setInterval関数が常に実行されるため、実際のビデオが再生されても、$。fancybox.close()を使用すると、そのビデオが閉じられることです。

私が欲しかったのは、myModalによって識別されたファニーボックスだけを閉じることです。

これは私が使用するjQueryです。

$(document).ready(function() {           

    function myplugin() {             
         $.getJSON("get-status.php", function (data) {                        
             $.each(data, function (key, status) {   
                 if(status > 0) {
                    $("#myModal").fancybox().click();
                 }else{
                    $.fancybox.close(); // Works. But closes other open Fancybox if any
                    //$("#myModal").fancybox().close();    // Does not work
                 }
             });       
        });  
    };

    $(function() {
       setInterval(function() { myplugin() }, 5000);
    });
});
4

2 に答える 2

1

さて、あなたの質問を完全に理解したかどうかはわかりません#myModalが、現在fancyboxで開かれているかどうか(fancybox関数自体の外)を知るのは簡単ではないため、fancybox内から有効になるフラグまたはスイッチを作成しますコールバックIF #myModalは、現在開かれている要素です。

次に、スイッチが(現在の要素である)myplugin()かどうかを検証し、そうである場合は、fancyboxを閉じます。true#myModal

スクリプトは次のようになります(私は実際に何をするのかわからないため、テストされていませんmyplugin()):

// declare a switch to set if #myModal is open in fancybox
var myModal = false;

$(document).ready(function () {
    function myplugin() {
        $.getJSON("get-status.php", function (data) {
            $.each(data, function (key, status) {
                if (status > 0) {
                    $("#myModal").fancybox({
                        // use a callback to set the switch = true
                        afterShow: function () {
                            $(this.element).attr("id") == "myModal" ? myModal = true : myModal = false;
                        }
                    }).click();
                } else {
                    // close fancybox if myModal == true
                    if (myModal) {
                        $.fancybox().close();
                        myModal = false; // reset switch ?
                    }
                }
            });
        });
    };
    // you don't need $(function(){ }); since you have declaread .ready() above
    setInterval(function () {
        myplugin()
    }, 5000);
});
于 2013-03-08T06:44:53.873 に答える
0

私はこれを1つ下で試しましたが、うまくいきました。

$("#myModal").parents("div .fancybox-skin").hide();

これを行う他のより良い方法があればアドバイスしてください。

于 2013-03-08T06:43:30.157 に答える