Javascript 触摸设备中的VideoJS播放器覆盖按钮

Javascript 触摸设备中的VideoJS播放器覆盖按钮,javascript,jquery,ios,html5-video,video.js,Javascript,Jquery,Ios,Html5 Video,Video.js,我正在使用VideoJs player 4.2 当我在ios设备的safari浏览器中打开videojs播放器时,它默认在本机控件上工作。暂停播放器时,我会在视频上显示覆盖按钮(指向其他页面的链接)。如果我点击按钮,它不会在ios中启动。它在桌面浏览器中运行良好。 如果我将nativeControlsForTouch设置为false,它将显示自定义控件。这里的覆盖按钮和自定义控件工作,但它将是缓慢的,我无法滚动视频,它将不顺利,与本机控件相比。 请给我一些建议 如果我使用本机控件,那么覆盖按钮必

我正在使用VideoJs player 4.2

当我在ios设备的safari浏览器中打开videojs播放器时,它默认在本机控件上工作。暂停播放器时,我会在视频上显示覆盖按钮(指向其他页面的链接)。如果我点击按钮,它不会在ios中启动。它在桌面浏览器中运行良好。 如果我将nativeControlsForTouch设置为false,它将显示自定义控件。这里的覆盖按钮和自定义控件工作,但它将是缓慢的,我无法滚动视频,它将不顺利,与本机控件相比。 请给我一些建议

  • 如果我使用本机控件,那么覆盖按钮必须工作
  • 如果我使用自定义控件,那么视频播放器将与本机控件一样平滑
  • 这是我的密码

    videojs("ex_video",{"controls":true, "preload":"metadata","width":"auto", "height":"auto",
          "poster":"/images/test.png"},function(){
            var current_player=this; 
            current_player.imageOverlay({
              opacity: 0.5,
              height: '100%',
              width: '50%'
            });
          current_player.on("pause", function(){
            current_player.bigPlayButton.show();
    
          });
        current_player.on("play", function(){ 
          current_player.bigPlayButton.hide();
        });
    });
    
    覆盖按钮代码

    (function(vjs) {
      var
       extend = function(obj) {
        var arg, i, k;
        for (i = 1; i < arguments.length; i++) {
         arg = arguments[i];
         for (k in arg) {
          if (arg.hasOwnProperty(k)) {
          obj[k] = arg[k];
          }
        }
      }
    return obj;
    },
    
    defaults = {
      image_url: '',
      click_url: '',
      start_time: null,
      end_time: null,
      opacity: 0.7,
      height: '15%',
      width: '100%'
    },
    
    imageOverlay = function(options) {
    
    var player = this,
        settings = extend({}, defaults, options || {}),
        showingImage = false;
    
    if (settings.start_time === null)
      settings.start_time = 0;
    
    if (settings.end_time === null)
      settings.end_time = player.duration() + 1;
    
    overlay = {
    
      showImage: function() {
        if (showingImage) {
    
          return;
        }
        showingImage = true;
        var holderDiv = document.createElement('div');
        holderDiv.id = 'vjs-image-overlay-holder';
        holderDiv.style.height = settings.height;
        holderDiv.style.width = settings.width;
        holderDiv.style.opacity=settings.opacity;
    
        var overlayLbl1= document.createElement('label');
        overlayLbl1.setAttribute('class','heading-overlay-video');
        overlayLbl1.innerHTML= "Like this class? Why not:";
        var topVideoP=overlay.createEl(overlayLbl1);
        topVideoP.className=topVideoP.className+' top-video-control-overlay';
        holderDiv.appendChild(topVideoP);
    
        //Save to queue
        var overlayBtn1=document.createElement('button');
        overlayBtn1.value = 'Save to queue';
        overlayBtn1.innerHTML='Save to queue';
        overlayBtn1.setAttribute('class','white medium');
        holderDiv.appendChild(overlay.createEl(overlayBtn1));
    
        //Add to series button
        var overlayBtn2=document.createElement('button');
        overlayBtn2.value = 'Add to series';
        overlayBtn2.innerHTML='Add to series';
        overlayBtn2.setAttribute('class','white medium');
        holderDiv.appendChild(overlay.createEl(overlayBtn2));
    
        var overlayLbl2= document.createElement('label');
        overlayLbl2.innerHTML= "music credits";
        overlayLbl2.setAttribute('class','msg-blue');
        var btmVideoP=overlay.createEl(overlayLbl2);
        btmVideoP.className=btmVideoP.className+' bottom-video-control';
        holderDiv.appendChild(btmVideoP);
    
    
    
        player.el().appendChild(holderDiv);
      },
      hideImage: function() {
        if (!showingImage) {
          return;
        }
        showingImage = false;
        player.el().removeChild(document.getElementById('vjs-image-overlay-holder'));
      },
      createEl:function(ele_obj){
        var overlayP=document.createElement('p');
        overlayP.setAttribute('class','overlay-video-content-in');
        overlayP.appendChild(ele_obj);
        return overlayP ;
      }
    };
    var setTimeoutControl;
    
    player.on('pause', function(){
     setTimeoutControl= setTimeout(function(){overlay.showImage()},5000);
    
    });
    player.on('play', function(){ 
      clearTimeout(setTimeoutControl);
      overlay.hideImage();
    });    
    }; 
    vjs.plugin('imageOverlay', imageOverlay); 
    }(window.videojs));
    
    (函数(vjs){
    变量
    扩展=功能(obj){
    var-arg,i,k;
    对于(i=1;i
    默认情况下,浏览器中的HTML5视频将在iPod、IPhone的本机播放器中打开。 您必须在webview中包装HTML内容,并像本地应用程序一样运行它,才能在iPod、Iphone中查看视频

    看到这个了吗

    因此,这两个更改必须在HTML中完成

    <video id="xxx" width="xx" height="xx" webkit-playsinline>
    

    在所有其他设备中,如果没有这些,它将正常工作。

    最好使用HammerJS()。对于EmberJS,我们有一个附加组件

    显示您的代码。你试过什么?谢谢你的回复,我没有用obj-c。它只是一个html5视频播放器(videojs)。我在视频标签中使用了webkit playsinline,但它不起作用。除非你将HTML5视频包装到本机webview并添加这两个属性,否则你无法在iPod或IPhone中使用自定义控件播放HTML5视频。请举个例子,告诉我如何在Javascript中使用webview.allowsInlineMediaPlayback=是纯HTML和JS是不可能的,您需要通过web view将其转换为本机应用程序,才能在iPod/iPhone中播放视频
    webview.allowsInlineMediaPlayback = YES;