Video.js indique o ecrã completo ao tocar

Ando à procura há muito tempo, mas ainda não encontrei uma solução válida para o meu problema. Não consigo que o leitor de vídeo entre em ecrã completo. A API tem muitos exemplos, mas nenhum deles parece funcionar.

A versão jQuery incluída na página em que estou a trabalhar é 1.8.2. Além disso, estou a usar o parallax-1.1.js e bibliotecas exigiram que ele funcionasse corretamente para que isso também pudesse ser um problema.

O cliente para quem trabalho quer que o site tenha design responsivo, com a capacidade do jogador de ir diretamente para o ecrã completo quando o botão" Play " é clicado. Esta funcionalidade deve ser acessível tanto no ecrã como nos navegadores móveis/tablet. Na página de vídeo, deve haver 3 jogadores de vídeo, cada um deles tem IDs únicos, e eles também têm uma classe CSS comum.

Alguns dos códigos que tentei não funcionaram bem. Aqui está um exemplo de excerto de código JS que controla um do HTML de vídeo etiqueta.

Exemplo:

player1 = _V_('video-1');

player1.on("play",
    function () {
        this.requestFullScreen();
});

player1.on("ended",
    function () {
        this.cancelFullScreen();
});

o código gera este erro:

Uncaught TypeError: Object [object Object] has no method 'requestFullScreen'
Estou a trabalhar com a última versão do Google Chrome.

Author: Filip Filipović, 2013-06-17

4 answers

Há dois problemas a resolver aqui.

Primeiro, você não pode ir para o ecrã completo dentro de um controlador de eventos 'play'. Para segurança e boa experiência do usuário, os navegadores só lhe permitirão ativar o ecrã completo dentro de um evento ativado pelo usuário, como um 'clique'. Você não pode ter todas as páginas da web indo para tela cheia assim que você visita-lo, e você pode fazer com que um vídeo para começar a jogar automaticamente, o que violaria essa regra. Então você precisa mover isso para um controlador 'click' sobre a jogada real botao.

O segundo é um grande problema com o vídeo.js 4.0.x, que é que é minificado usando o compilador de Encerramento do Google com optimizações avançadas . Muitas das propriedades e métodos públicos são ofuscados, tornando-os difíceis/impossíveis de usar. Neste caso, requestFullScreen é agora player1.Pa(). E, tanto quanto sei, não existe.

Aqui estão algumas opções para Como lidar com isto:

  1. Usar o nome do método ofuscado. Eu não ... recomende isto, porque a) o nome irá mudar com cada actualização de versão menor (por exemplo, 4.0.5) e b) irá tornar o seu código ilegível, e C) Você não pode usar cancelFullScreen.

  2. Arranja um vídeo de cópia não minificado.js e apresenta-o tu. (Você pode usar Uglify ou outro minifier que não vai mexer com os nomes do método.) Video.js não fornece este arquivo, então você tem que clonar o git repo e executar o script de compilação você mesmo. E você não tem a vantagem de usar o vídeo.CDN da js para livre.

  3. Utilize uma versão mais antiga do vídeo.js e espera até às 4.o x está pronto para o horário nobre.

  4. Não uses vídeo.js de todo. Considere o jPlayer e o jwPlayer ou role o seu próprio.

Eu recomendo 2 ou 3.

Update: parece que este problema em particular foi corrigido, mas ainda não chegou ao lançamento.

 7
Author: brianchirls, 2013-06-18 16:31:47
Usei pessoalmente uma ligação personalizada que despoleta tanto o play como o fullscreen.
<a class="enter-fullscreen" href="#">Play fullscreen</a>

E a parte js:

<script type="text/javascript">

    $('.enter-fullscreen').click(function(e) {
        e.preventDefault();
        $('.vjs-play-control').click();
        $('.vjs-fullscreen-control').click();
    });

</script>
Isto é improvável, mas simples e faz o trabalho.
 1
Author: Alain Tiemblo, 2017-02-22 20:12:03
Em vídeo.ficheiro js ir para estas linhas
BigPlayButton.prototype.handleClick = function handleClick(event) {

        var playPromise = this.player_.play();

E adicionar

BigPlayButton.prototipo.handleClick = function handleClick (event) {
        var playPromise = this.player_.play();
        document.getElementsByClassName('vjs-fullscreen-control')[0].click()
        // exit early if clicked via the mouse
        if (this.mouseused_ && event.clientX && event.clientY) {
            silencePromise(playPromise);
            return;
        }
 0
Author: Hamzeh Salhi, 2018-09-09 15:44:43

Uma maneira fácil de resolver o problema:

document.querySelector('.vjs-big-play-button').addEventListener('click', player.requestFullscreen)

O vídeo vai em ecrã completo e o evento regular do botão play faz com que ele comece a tocar.

 0
Author: oldsea, 2018-09-23 19:26:11