【问题标题】:HTML5 video custom controlsHTML5 视频自定义控件
【发布时间】:2016-05-27 02:53:03
【问题描述】:

我正在尝试向我的 html 5 视频添加一些自定义控件,但无法正常工作。

我需要添加一个切换按钮暂停和播放。这是我的代码的一部分 我得到的错误是 Uncaught TypeError: Cannot set property 'title' of null

var billboardC, video, playpause;
var videoBGPlayer;

function init(){

    billboardC = document.getElementById('billboardC');

    video = document.getElementById('video-player');
    playpause = document.getElementById('playpause');
}


function OpenVideo(e){
    console.log('open video');
    billboardC.innerHTML += "<div class='closeButton'></div>";
    billboardC.innerHTML += "<a href='www.google.com' target='blank'     class='fombutton'>Find Out More</a>";
    billboardC.style.visibility = 'visible';
    billboardC.innerHTML += "<video id='video-player'     class='videoSquare' poster='' muted> <source src='my-video.mp4'     type='video/mp4' /></video><div id='controls'><button id='playpause'      onclick='togglePlayPause()' title='play'>Play</button></div>";

}

function togglePlayPause() {
    if (video.paused || video.ended) {
      playpause.title = "pause";
      playpause.innerHTML = "pause";
      video.play();
      console.log('play');
   }
   else {
      playpause.title = "play";
      playpause.innerHTML = "play";
      video.pause();
      console.log('pause');
   }
}


window.onload = function(){ init(); }

谢谢

【问题讨论】:

  • OpenVideo(e) 放在init() 中同时将最后一行更改为window.onload = init;

标签: javascript html html5-video


【解决方案1】:

Snippet 中的 cmets 中有详细说明。

片段

    var billboardC = document.getElementById('billboardC');
    var videoBGPlayer;

/*
The variables that were within init() were not accessible by other functions. 

Normally you would just place the variables outside to become global and accessible. But all of the elements do not exist until OpenVideo() is finished parsing them, so the variables are undefined. 

In order to create useful references, I placed the needed variables within togglePlayPause().

*/
/* 
OpenVideo() was never invoked, therefore no HTML, no dice. So I placed OpenVideo within init() so it would be the first function (besides init() of course to be invoked.
*/
function init(){
    OpenVideo();
}

function OpenVideo(){
    console.log('open video');
    billboardC.innerHTML += "<div class='closeButton'></div>";
    billboardC.innerHTML += "<a href='www.google.com' target='_blank'     class='formbutton'>Find Out More</a>";
    billboardC.style.visibility = 'visible';
    billboardC.innerHTML += "<video id='video-player' class='videoSquare' poster='' muted> <source src='my-video.mp4' type='video/mp4'></video><div id='controls'><button id='playpause' onclick='togglePlayPause()' title='play'>Play</button></div>";

}

function togglePlayPause() {
  var video = document.getElementById('video-player');
  var playpause = document.getElementById('playpause');
    if (video.paused || video.ended) {
      playpause.title = "pause";
      playpause.innerHTML = "pause";
      video.play();
      console.log('play');
   }
   else {
      playpause.title = "play";
      playpause.innerHTML = "play";
      video.pause();
      console.log('pause');
   }
}

/*
When using window.onload = foo; do not use the functions parenthesis `()`. If you leave out the paranthesis, that will tell the renderer that it is up to it to decide when init should execute.
*/
window.onload = init;
<!--#billboardC didn't exsist and it wasn't included in OpenVideo()-->
<main id="billboardC"></main> 

【讨论】:

    猜你喜欢
    • 2011-12-02
    • 1970-01-01
    • 2014-07-16
    • 1970-01-01
    • 1970-01-01
    • 2014-07-13
    • 2017-01-18
    • 1970-01-01
    • 2012-02-12
    相关资源
    最近更新 更多