2017-04-11 3 views
1

Ich habe mit diesem Code von jemand anderem geschrieben und es ist ein Bild und ein YouTube Video zu laden. Ich verstehe sein, dass ich die Priorität des Skripts ändern kann. Momentan scheint es so, als würde jemand, der mit einem iPhone auf diese Website geht und die Play-Taste vor dem Bild drückt, das Video nicht abspielen, weil das Script nicht fertig geladen ist. Wie kann ich den folgenden Code ändern, sodass der Endbenutzer keine Schaltfläche zum Abspielen sehen kann, wenn die Seite oder das Skript nicht vollständig geladen wurde?So priorisieren Sie Javascript

Übrigens, dieses Problem passiert nicht auf einem Android-Gerät, so dass ich nicht sicher bin, ob diese Information als Anhaltspunkt dienen wird.

Ich hoffe, das macht Sinn, weil ich immer noch versuche, meinen Kopf darum zu wickeln.

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

tag.src = "//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 player1; 
var player2; 

function onYouTubeIframeAPIReady() { 
    player1 = new YT.Player('player', { 
    height: '390', 
    width: '640', 
    playerVars: { 
     'controls': 0, 
     'rel': 0 
    }, 
    events: { 
     'onReady': onPlayerReady, 
     'onStateChange': onPlayerStateChange 
    } 
    }); 
} 

// 4. The API will call this function when the video player is ready. 
function onPlayerReady(event) { 
    jQuery('.video-overlay').click(function() { 
    event.target.setVolume(100); 
    event.target.setPlaybackQuality('hd1080'); 
    setTimeout(function() { 
     jQuery('.video-overlay').css('transform', 'scale(0)'); 
     jQuery('.homepage-tagline').hide(); 
    }, 300); 
    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) { 
    jQuery('.video-overlay').click(function() { 
    event.target.setPlaybackQuality('hd1080'); 
    jQuery('.video-overlay').hide(); 
    jQuery('.slider-overlay').hide(); 
    event.target.playVideo(); 
    }); 
} 

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

Ich habe versucht, dieses Stück Code hinzufügen:

jQuery('.video-overlay').css('opacity', 0); 

aber es viel nicht tun.

+0

den Spieler 0 Undurchsichtigkeit geben und fügen Sie Code in der 'onPlayerReady' Funktion Damit wird es auf 1 gesetzt. Auch die Erwähnung von * Plattformen * ist viel weniger relevant als die Erwähnung von * Browsern *. Hat Chrom auf iOS das gleiche Verhalten wie Android oder Safari? Sehen? –

+0

sieht aus wie Sie Video-Overlay ist das, was Sie klicken, um es zu spielen, also warum nicht verstecken Sie es in CSS und dann eine '.show' in Ihrem Video-Player bereit – Pete

Antwort

0

Es wäre am besten, die Zeiger-Ereignisse keine zu setzen und wenn onPlayerReady abgefeuert wird, stellen Sie die target.style.pointerEvents = „all“

+0

Also würde ich event.target.setVolume (0) in der onPlayerReady-Funktion? – Daniel

+0

Interessant, mir wurde gesagt, dass dies mit der Änderung der Priorität von Javascript zu tun hat, aber es scheint, dass es mit Zeiger-Ereignissen zu tun hat, mit denen ich keine Erfahrung habe. – Daniel

+0

@Daniel, das die Zeiger-Ereignisse in CSS auf keine setzt, verbietet allen Ereignis-Listenern das Durchlaufen (z. B. Klicks), so dass der Benutzer nicht auf die Wiedergabeschaltfläche klicken kann, bis Sie die ersteScriptTag.style.pointerEvents = "all" festgelegt haben. Auf diese Weise wird es funktionieren, aber es wird nicht die beste Benutzererfahrung machen - es verwirrt den Benutzer, warum es nicht spielt, wenn es beim ersten Mal auf den Play-Button klickt. Es wird zumindest das Problem beheben, obwohl –

Verwandte Themen