【问题标题】:Looking for a more efficient way to write this Javascript寻找一种更有效的方式来编写这个 Javascript
【发布时间】:2013-02-13 07:29:24
【问题描述】:

有没有更好的方法让我写toggleFullscreen()。我在每个浏览器上重复样式规则,这似乎非常不必要。

function toggleFullScreen() {   
  var elem = document.getElementById("video_container");
  var db = document.getElementById("defaultBar"); 
  var ctrl = document.getElementById("controls");

  if (!document.fullscreenElement &&    // alternative standard method
      !document.mozFullScreenElement && !document.webkitFullscreenElement) {  // current working methods
    if (document.documentElement.requestFullscreen) {
          db.style.background ='red';
          ctrl.style.width = '50%';
          ctrl.style.left = '25%';
          elem.requestFullscreen();
        } else if (document.documentElement.mozRequestFullScreen) {
          db.style.background ='red';
          ctrl.style.width = '50%';
          ctrl.style.left = '25%';
          elem.mozRequestFullScreen();
        } else if (document.documentElement.webkitRequestFullscreen) {
          db.style.background ='red';
          ctrl.style.width = '50%';
          ctrl.style.left = '25%';
          elem.webkitRequestFullscreen();
        }
  } else if (document.exitFullscreen) {
        db.style.background ='yellow';
        ctrl.style.width = '100%';
        ctrl.style.left = '0';        
        document.exitFullscreen();
        }
        else if (document.mozCancelFullScreen) {
        db.style.background ='yellow';
        ctrl.style.width = '100%';
        ctrl.style.left = '0'; 
        document.mozCancelFullScreen();
        }
        else if (document.webkitCancelFullScreen) {
        db.style.background ='yellow';
        ctrl.style.width = '100%';
        ctrl.style.left = '0';
        document.webkitCancelFullScreen();
        } 
}

【问题讨论】:

    标签: javascript html css dom-events event-listener


    【解决方案1】:

    页面加载后立即应用 out of fullScreen 样式规则。

    那是因为这段代码:

    full.addEventListener('click', toggleFullScreen(), false);
    

    If 立即执行toggleFullScreen() 并将返回值传递给addEventListener。代码应该是这样的:

    full.addEventListener('click', toggleFullScreen, false);
    

    此代码传递对函数的引用而不是其返回值。

    重构

    通过使用|| 运算符可以大大简化现有条件。

    var fullScreenElement = document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement;
    
    if (fullScreenElement) {
      var requestFullScreen = document.documentElement.requestFullscreen || document.documentElement.mozRequestFullScreen || document.documentElement.webkitRequestFullscreen
    
      db.style.background ='red';
      ctrl.style.width = '50%';
      ctrl.style.left = '25%';
      requestFullScreen.call(elem);
    } else {
      var exitFullScreen = document.exitFullscreen || document.mozCancelFullScreen || document.webkitCancelFullScreen;
    
      db.style.background ='yellow';
      ctrl.style.width = '100%';
      ctrl.style.left = '0';        
      exitFullScreen.call(document);
    }
    

    【讨论】:

    • 嗯,这总是小事。谢谢。
    • @Batman 没问题;更新了关于如何重构代码的答案。
    • 我在下面复制了这个: if (!document.fullscreenElement && // 替代标准方法 !document.mozFullScreenElement && !document.webkitFullscreenElement) { } 但是是的,它没有用。
    • 抱歉,我还是不能让它运行。你认为也许第一行应该是 var fullScreenElement = !document.fullscreenElement || !document.mozFullScreenElement 等有点像原始行如何检查是否不是全屏
    • @Batman “无法运行”是什么意思?错误?代码应类似于 this
    猜你喜欢
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 2015-07-16
    相关资源
    最近更新 更多