2016-06-16 11 views
0

Ich möchte das Youtube-Video mit Iframe-API laden. dh. Laden Sie nur das Posterbild zu Beginn und wenn der Benutzer darauf klickt, laden Sie nur das eigentliche Bild und seinen Inhalt.Lazy Laden Youtube-Video von Iframe API

+1

Im Moment möchte ich etwas essen, aber ich muss zuerst danach suchen. z.B. Geben Sie einen Code für Dinge an, die Sie ausprobiert haben. –

+0

Meinst du sowas? http://www.newmediacampaigns.com/blog/lazyytjs-a-jquery-plugin-to-lazy-load-youtube-videos – Atticweb

+0

Ich konnte es funktionierende Antwort bekommen ist im Kommentarabschnitt. – madhuhc

Antwort

-2

Schließlich arbeitete sie unter Code in AngularJS ist.

HTML

<div data-ng-repeat="video in videoIds track by $index"> 
    <div id="uniQueId" ng-click="playVideo(video, 'player' + $index)"> 
     <div class="video-play-button"></div> 
    </div> 
</div> 

JS

$scope.playVideo = function(videoId, id) { 
     $scope.players[id] = new YT.Player(id, { 
      videoId: videoId, 
      width: '400', 
      height: '300', 
      playerVars: { 'autoplay': 1 }, 
      events: { 
       'onStateChange': $scope.onPlayerStateChange 
      } 
     }); 
    }; 
+0

es gibt "YT nicht definiert" errot – lakshay

0

Das meiste davon stammt aus dem Abschnitt "Erste Schritte" auf der youtube page.

<!-- 1. The <iframe> (and video player) will replace this <div> tag. --> 
 
    <div id="player"></div> 
 

 
    <script> 
 
     // 2. This code loads the IFrame Player API code asynchronously. 
 
     var tag = document.createElement('script'); 
 

 
     tag.src = "https://www.youtube.com/iframe_api"; 
 
     var firstScriptTag = document.getElementsByTagName('script')[0]; 
 
     firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); 
 

 
     // 3. This function creates an <iframe> (and YouTube player) 
 
     // after the API code downloads. 
 
     var player; 
 
     function onYouTubeIframeAPIReady() { 
 
     player = new YT.Player('player', { 
 
      height: '390', 
 
      width: '640', 
 
      videoId: 'M7lc1UVf-VE', 
 
      events: { 
 
      'onReady': onPlayerReady, 
 
      'onStateChange': onPlayerStateChange 
 
      } 
 
     }); 
 
     } 
 

 
     // 4. The API will call this function when the video player is ready. 
 
     function onPlayerReady(event) { 
 
     event.target.playVideo(); 
 
     } 
 

 
     // 5. The API calls this function when the player's state changes. 
 
     // The function indicates that when playing a video (state=1), 
 
     // the player should play for six seconds and then stop. 
 
     var done = false; 
 
     function onPlayerStateChange(event) { 
 
     if (event.data == YT.PlayerState.PLAYING && !done) { 
 
      setTimeout(stopVideo, 6000); 
 
      done = true; 
 
     } 
 
     } 
 
     function stopVideo() { 
 
     player.stopVideo(); 
 
     } 
 
    </script>

Dieses Beispiel lädt das Video, wenn es fertig ist.

So ändern wir es ein wenig, um ein Platzhalterbild hinzuzufügen und beim Klicken verstecken Sie das Bild und spielen Sie das Video ab.

Wickeln Sie den Tag (Schritt 2) in Funktion

function loadYT() { 
     var tag = document.createElement('script'); 
     tag.src = "https://www.youtube.com/iframe_api"; 
     var firstScriptTag = document.getElementsByTagName('script')[0]; 
     firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); 
    } 

Fügen Sie ein Bild prüfen this question für weitere Details zu den Größen.

<div id="placeholder"> 
    <img src="http://img.youtube.com/vi/M7lc1UVf-VE/sddefault.jpg" /> 
</div> 

dann auf Klick verstecken den Platzhalter Bild und laden den Player

document.getElementById("placeholder").addEventListener("click", function(){ 
    this.style.display = 'none'; 
    loadYT() 
}); 

Endergebnis unten zu sehen ist.

<div id="placeholder"> 
 
<img src="http://img.youtube.com/vi/M7lc1UVf-VE/sddefault.jpg" /> 
 
</div> 
 
</div> 
 
<div id="player"></div> 
 

 
<script> 
 

 
document.getElementById("placeholder").addEventListener("click", function(){ 
 
    this.style.display = 'none'; 
 
    loadYT() 
 
}); 
 
    // 2. This code loads the IFrame Player API code asynchronously. 
 
    function loadYT() { 
 
    var tag = document.createElement('script'); 
 
    tag.src = "https://www.youtube.com/iframe_api"; 
 
    var firstScriptTag = document.getElementsByTagName('script')[0]; 
 
    firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); 
 
    } 
 

 
    // 3. This function creates an <iframe> (and YouTube player) 
 
    // after the API code downloads. 
 
    var player; 
 

 
    function onYouTubeIframeAPIReady() { 
 
    player = new YT.Player('player', { 
 
     height: '390', 
 
     width: '640', 
 
     videoId: 'M7lc1UVf-VE', 
 
     events: { 
 
     'onReady': onPlayerReady, 
 
     'onStateChange': onPlayerStateChange 
 
     } 
 
    }); 
 
    } 
 

 
    // 4. The API will call this function when the video player is ready. 
 
    function onPlayerReady(event) { 
 
    event.target.playVideo(); 
 
    } 
 

 
    // 5. The API calls this function when the player's state changes. 
 
    // The function indicates that when playing a video (state=1), 
 
    // the player should play for six seconds and then stop. 
 
    var done = false; 
 

 
    function onPlayerStateChange(event) { 
 
    if (event.data == YT.PlayerState.PLAYING && !done) { 
 
     setTimeout(stopVideo, 6000); 
 
     done = true; 
 
    } 
 
    } 
 

 
    function stopVideo() { 
 
    player.stopVideo(); 
 
    } 
 

 
</script>

1

Wie wäre das?

HTML

<div class="wrapper"> 
    <ul> 
     <li><a title="video 1" data-video="http://www.youtube.com/embed/X0DeIqJm4vM">Motherlover</a></li> 
     <li><a title="video 2" data-video="http://www.youtube.com/embed/GI6CfKcMhjY">Jack Sparrow</a></li> 
     <li><a title="video 3" data-video="http://www.youtube.com/embed/TcK0MYgnHjo">Ras trent</a></li> 
     <li><a title="video 4" data-video="http://www.youtube.com/embed/8yvEYKRF5IA">Boombox</a></li> 
     <li><a title="video 5" data-video="http://www.youtube.com/embed/6_W_xLWtNa0">Shy Ronnie 2</a></li> 
    </ul> 
    <iframe id="videoArea" width="350" height="250" src="http://www.youtube.com/embed/X0DeIqJm4vM" frameborder="0" allowfullscreen></iframe> 
</div> 

JS

var initVideos = function() { 
    var videoArea = $("#videoArea"), 
     divs = $("ul li a"); // or some other data format 

    // bind your hover event to the divs 
    divs.click(function(ev) { 
     ev.preventDefault(); 
     videoArea.prop("src", $(this).data('video')); 
     divs.removeClass("active"); 
     $(this).addClass("active"); 
    }); 
}; 

// once the DOM is ready 
$(function() { 
    initVideos(); 
}); 

DEMO

0

Warum auf klicken, um die Videos laden, und zwar nicht nur, wenn der Benutzer sie sieht? Verwenden Sie jQuery.Lazy und Sie haben nichts mehr zu tun.:)

Fügen Sie das Plugin auf Ihre Seite: (Sie werden auch jQuery oder Zepto brauchen)

<script type="text/javascript" src="//cdn.jsdelivr.net/jquery.lazy/1.7.1/jquery.lazy.min.js"></script> 
<script type="text/javascript" src="//cdn.jsdelivr.net/jquery.lazy/1.7.1/plugins/jquery.lazy.youtube.min.js"></script> 

Bereiten Sie Ihre iFrames: (Notiz die data-loader und data-src Attribute)

<iframe data-loader="youtube" data-src="1AYGnw6MwFM" width="560" height="315"></iframe> 

Und fange mit Lazy an:

$(function() { 
    $("iframe[data-src]").Lazy(); 
}); 

Das war's! Die iFrames werden geladen, sobald der Benutzer sie durch Scrollen erreicht. Weitere Informationen here.