0

複数のメディアを含むページを作成しました。それぞれが非表示の div 内にあり、メニュー リンクをクリックすると jquery ツール オーバーレイに読み込まれます。リンクをクリックしたときに達成したいことはいくつかあります。

  1. オーバーレイにロードされたときのビデオの自動再生
  2. オーバーレイを閉じるとビデオが一時停止または停止する
  3. 同じリンクをもう一度クリックすると、ビデオのリロードと自動再生

#2 は達成しましたが、#1 と #3 で失敗しました。以下のコードでは、ビデオ プレーヤーとメディアがオーバーレイに読み込まれますが、自動再生されず、リンクを閉じて再度開き直そうとしてもプレーヤーの読み込みに失敗します。

次のコードで何が間違っていましたか?

<div id="menu">
   <a href="#"><img src="images/image1.jpg" rel="#overlay1"/></a>
   <a href="#"><img src="images/image2.jpg" rel="#overlay2"/></a>
   <a href="#"><img src="images/image3.jpg" rel="#overlay3"/></a>
</div>
<div class="overlay" id="overlay1">
   <video class="player" id="bbb" controls="controls" poster="http://sandbox.thewikies.com/vfe-generator/images/big-buck-bunny_poster.jpg" width="640" height="360">
     <source src="http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4" type="video/mp4" />
     <source src="http://clips.vorwaerts-gmbh.de/big_buck_bunny.webm" type="video/webm" />
     <source src="http://clips.vorwaerts-gmbh.de/big_buck_bunny.ogv" type="video/ogg" />
     <object type="application/x-shockwave-flash" data="http://releases.flowplayer.org/swf/flowplayer-3.2.1.swf" width="640" height="360">
        <param name="movie" value="http://releases.flowplayer.org/swf/flowplayer-3.2.1.swf" />
        <param name="allowFullScreen" value="true" />
        <param name="wmode" value="transparent" />
        <param name="flashVars" value="config={'playlist':['http%3A%2F%2Fsandbox.thewikies.com%2Fvfe-generator%2Fimages%2Fbig-buck-bunny_poster.jpg',{'url':'http%3A%2F%2Fclips.vorwaerts-gmbh.de%2Fbig_buck_bunny.mp4','autoPlay':true}]}" />
        <img alt="Big Buck Bunny" src="http://sandbox.thewikies.com/vfe-generator/images/big-buck-bunny_poster.jpg" width="640" height="360" title="No video playback capabilities, please download the video below" />
      </object>
   </video>
</div>
<div class="overlay" id="overlay2">(same as above, different media)</div>
<div class="overlay" id="overlay2">(same as above, different media)</div>

<script>
$(function() {
    $("a [rel]").overlay({
        effect: 'apple',        
        expose: '#101010',
        closeOnClick: 'false',
        closeOnEsc: 'false',
        onLoad: function(content) {
            this.getOverlay().find(".player").flowplayer(0).load();
            $('#bbb').get(0).play()
        },
        onClose: function(content) {
            $(".overlay").children().filter("video").each(function(){
                this.pause();
            });
        }
    });         
    $(".player").flowplayer("http://releases.flowplayer.org/swf/flowplayer-3.2.11.swf", {clip: {autoPlay: true}});
}); 
</script>
4

1 に答える 1

0

これを行う簡単な簡単な方法は、マウスアウトでオーバーレイコンテンツを空にし、オーバーレイを表示する前にマウスオーバーでそれらを入力することです。このようにして、ブラウザがすべての作業を代行します。domの操作により、パフォーマンスがわずかに低下する可能性がありますが、言及する価値はほとんどありません。

何かのようなもの:

<div class="overlay" id="overlay1" data-vsrc-mp4="...mp4" data-vsrc-webm="...webm" data-vsrc-ogv="...ogv" data-vsrc-poster="...jpg">

これで、要素のデータ属性に必要なものがすべて揃ったので、次のようなことができます。

var videoTemplate = 
'<video class="player" id="bbb" controls="controls" poster="##poster##" width="640" height="360"><source src="##mp4##" type="video/mp4" /><source src="##webm##" /><source src="##ogv##" type="video/ogg" /><object type="application/x-shockwave-flash" data="http://releases.flowplayer.org/swf/flowplayer-3.2.1.swf" width="640" height="360"><param name="movie" value="http://releases.flowplayer.org/swf/flowplayer-3.2.1.swf" /><param name="allowFullScreen" value="true" /><param name="wmode" value="transparent" /><param name="flashVars" value="config={\'playlist\':[\'##poster##\',{\'url\':\'##mp4##\',\'autoPlay\':true}]}" /><img alt="Big Buck Bunny" src="##poster##" width="640" height="360" title="No video playback capabilities, please download the video below" /></object></video>';

$("div.overlay").hover(function(){
   var newhtml = videoTemplate.replace(/##poster##/g,$(this).data("vsrc-poster")//....and so on for all data elements
   $(this).empty().append(newhtml);
},function(){
   $(this).empty();
});

私はこれをテストしていませんが、アイデアは健全です...

お役に立てば幸いです。

于 2012-06-13T07:14:38.040 に答える