0

わかりました、非常に強力な jQuery プラグインjplayerのカスタマイズによって作成された、この非常にクールなマリオをテーマにしたメディア プレーヤーがあります。

そのため、ウェブサイトのバックグラウンドで音楽を自動再生するかどうかを選択するオプションをユーザーに提供したいと思います。

これはビジネスであると想定されているため、デフォルトでオフにしています。通常の非営利サイトであっても、特にオーディオの開始と停止の方法が明確でない場合、バックグラウンドの音楽は非常にイライラする可能性があります.

とにかく、直感的なjQuery cookie pluginを使用して、これを行うために Cookie を設定しようとしています。

モーダルダイアログボックスのボタンがクリックされたときに設定しているコードは次のとおりです。

 buttons: {
  'Without Music': function() {
   $(this).dialog('close');
   $.cookie('autoPlay', 'no', { expires: 365 * 10 });
  },
  'With Music': function() {
   $(this).dialog('close');
   $.cookie('autoPlay', 'yes', { expires: 365 * 10 });
  }
 }

ここで、自動再生 Cookie の値が yes であるか no であるかをミリ秒ごとにチェックするタイマーを実行しています (はい、これは簡単に調整できますが、すぐに結果が欲しいだけです!)。

 setInterval(function() {
  if ($.cookie('autoPlay') == no) {
   displayPlayList();
   playListInit(false); // Parameter is a boolean for autoplay.
  }
 }, 1); // checks every millisecond (i.e. 1/1000 of a second)
  // need to do speed tests, and see if fast checking results in bogged down pages, difference between 1 millisecond and even 100-300 are nearly negligible
 setInterval(function() {
  if ($.cookie('autoPlay') == yes) {
   displayPlayList();
   playListInit(false); // Parameter is a boolean for autoplay.
  }

そのため、何らかの理由で、[はい] を選択した後、ページを更新すると。プレーヤーは本来の自動再生を行いません。今、問題が私の条件文の原因である可能性があると思います。確信はないけど..

アップデート:

これは、この問題に対処する必要があるコードを含む、新しい jplayer.js ファイル全体です。

$(document).ready(function(){

    $("#jpId").jPlayer( {
      swfPath: "/js"
    });

    var playItem = 0;

    var myPlayList = [
       {name:"SMB Overworld",mp3:"/audio/MushroomKingdomSMB.mp3"}, 
       {name:"SMB Underworld",mp3:"/audio/UnderworldSMB.mp3"}, 
       {name:"SMB Underwater",mp3:"/audio/UnderwaterSMB.mp3"}, 
       {name:"SMW Castle",mp3:"/audio/CastleSMW.mp3"} 
    ];

    // Local copy of jQuery selectors, for performance.
    var jpPlayTime = $("#jplayer_play_time");
    var jpTotalTime = $("#jplayer_total_time");

    $("#jquery_jplayer").jPlayer({
        ready: function() {
            displayPlayList();
            playListInit(false); // Parameter is a boolean for autoplay.
        }
    })
    .jPlayer("onProgressChange", function(loadPercent, playedPercentRelative, playedPercentAbsolute, playedTime, totalTime) {
        jpPlayTime.text($.jPlayer.convertTime(playedTime));
        jpTotalTime.text($.jPlayer.convertTime(totalTime));
    })
    .jPlayer("onSoundComplete", function() {
        playListNext();
    });

    $("#jplayer_previous").click( function() {
        playListPrev();
        $(this).blur();
        return false;
    });

    $("#jplayer_next").click( function() {
        playListNext();
        $(this).blur();
        return false;
    });

    function displayPlayList() {
        $("#jplayer_playlist ul").empty();
        for (i=0; i < myPlayList.length; i++) {
            var listItem = (i == myPlayList.length-1) ? "<li class='jplayer_playlist_item_last'>" : "<li>";
            listItem += "<a href='#' id='jplayer_playlist_item_"+i+"' tabindex='1'>"+ myPlayList[i].name +"</a></li>";
            $("#jplayer_playlist ul").append(listItem);
            $("#jplayer_playlist_item_"+i).data( "index", i ).click( function() {
                var index = $(this).data("index");
                if (playItem != index) {
                    playListChange( index );
                } else {
                    $("#jquery_jplayer").jPlayer("play");
                }
                $(this).blur();
                return false;
            });
        }
    }

    function playListInit(autoplay) {
        if(autoplay) {
            playListChange( playItem );
        } else {
            playListConfig( playItem );
        }
    }

    function playListConfig( index ) {
        $("#jplayer_playlist_item_"+playItem).removeClass("jplayer_playlist_current").parent().removeClass("jplayer_playlist_current");
        $("#jplayer_playlist_item_"+index).addClass("jplayer_playlist_current").parent().addClass("jplayer_playlist_current");
        playItem = index;
        $("#jquery_jplayer").jPlayer("setFile", myPlayList[playItem].mp3, myPlayList[playItem].ogg);
    }

    function playListChange( index ) {
        playListConfig( index );
        $("#jquery_jplayer").jPlayer("play");
    }

    function playListNext() {
        var index = (playItem+1 < myPlayList.length) ? playItem+1 : 0;
        playListChange( index );
    }

    function playListPrev() {
        var index = (playItem-1 >= 0) ? playItem-1 : myPlayList.length-1;
        playListChange( index );
    }
    $('#text_music').click(function() {
        $('#jplayer').slideToggle(500);
    });

    $("#player").bind( "clickoutside", function(event){
        if($('#jplayer').is(':visible')) {
            $('#jplayer').slideToggle(500);
        }
    });

    setInterval(function() {

      if($('a#jplayer_playlist_item_0').hasClass('jplayer_playlist_current')) {
       $("#bg_3, #bg_4, #map_4, #sprites_4, #platforms_4, #bg_5, #bg_6, #map_6, #sprites_6, #bg_7, #bg_8, #map_8, #sprites_8, #behindsprites_8").hide();
       $("#bg_1, #bg_2, #map_2, #sprites_2").show();
      };

      if($('a#jplayer_playlist_item_1').hasClass('jplayer_playlist_current')) {
       $("#bg_1, #bg_2, #map_2, #sprites_2, #bg_5, #bg_6, #map_6, #sprites_6, #bg_7, #bg_8, #map_8, #sprites_8, #behindsprites_8").hide();
       $("#bg_3, #bg_4, #map_4, #sprites_4, #platforms_4").show();
      };

      if($('a#jplayer_playlist_item_2').hasClass('jplayer_playlist_current')) {
       $("#bg_1, #bg_2, #map_2, #sprites_2, #bg_3, #bg_4, #map_4, #sprites_4, #platforms_4, #bg_7, #bg_8, #map_8, #sprites_8, #behindsprites_8").hide();
       $("#bg_5, #bg_6, #map_6, #sprites_6").show();
      };

      if($('a#jplayer_playlist_item_3').hasClass('jplayer_playlist_current')) {
       $("#bg_1, #bg_2, #map_2, #sprites_2, #bg_3, #bg_4, #map_4, #sprites_4, #platforms_4, #bg_5, #bg_6, #map_6, #sprites_6").hide();
       $("#bg_7, #bg_8, #map_8, #sprites_8, #behindsprites_8").show();
      };
    }, 1); // checks every millisecond (i.e. 1/1000 of a second)
           // need to do speed tests, and see if fast checking results in bogged down pages, difference between 1 millisecond and even 100-300 are nearly negligible

    setInterval(function() {
        if ($.cookie('autoPlay') === 'no') {
            displayPlayList();
            playListInit(false); // Parameter is a boolean for autoplay.
        }
    }, 1); // checks every millisecond (i.e. 1/1000 of a second)
        // need to do speed tests, and see if fast checking results in bogged down pages, difference between 1 millisecond and even 100-300 are nearly negligible
    setInterval(function() {
        if ($.cookie('autoPlay') === 'yes') {
            displayPlayList();
            playListInit(true); // Parameter is a boolean for autoplay.
        }
    }, 1); // checks every millisecond (i.e. 1/1000 of a second)
        // need to do speed tests, and see if fast checking results in bogged down pages, difference between 1 millisecond and even 100-300 are nearly negligible       
    /*
    $('#jquery_jplayer')
    playListInit(true)
    */
    $('#infobutton').click(function() {
        $('#music_descrip').dialog('open');
}   );
    $('#music_descrip').dialog({
        title: '<img src="/images/text/text_mario_planet_jukebox.png" id="text_mario_planet_jukebox"/>',
        autoOpen: false,
        height: 375,
        width: 500,
        modal: true,
        resizable: false,
        buttons: {
            'Without Music': function() {
                $(this).dialog('close');
                $.cookie('autoPlay', 'no', { expires: 365 * 10 });
            },
            'With Music': function() {
                $(this).dialog('close');
                $.cookie('autoPlay', 'yes', { expires: 365 * 10 });
            }
        }
    });

});
-->

それはまだ同じ問題を抱えているようです..私はそれを解決しようとしていますが、私が行う前にエラーを見つけたら、私に知らせてください! :)

4

1 に答える 1

1

次のように、文字列と比較する必要があります。

 if ($.cookie('autoPlay') == 'yes') {

また、チェックyesしていても合格falseしているように見えますtrue

そして、全体的に次のように、少なくとも 50 ミリ秒間隔を上げます。

setInterval(function() {
  displayPlayList();
  playListInit($.cookie('autoPlay') === 'yes');
}, 1);

ただし、一般的には、間隔で Cookie をまったくチェックしないでください。アクションを実行しているものは何でも、Cookie の設定とアクションの実行の両方を行います... でプレーヤーを最初にセットアップするときにのみ Cookie を使用document.readyします。

于 2010-09-03T12:55:50.600 に答える