多屏顯示播放頁面,同時支持全屏顯示以及動態設備選擇功能


幾天由於要實現一個16:9多屏顯示播放頁面,同時支持全屏顯示以及動態設備選擇功能。

前端技術框架layui。

接下來介紹實現過程:

1.16:9屏幕布局實現

HTML

<div class="box">
  <div class="scale">
    <img src="http://img17.3lian.com/201612/16/88dc7fcc74be4e24f1e0bacbd8bef48d.jpg" class="item"/>
  </div>
</div>

CSS

.box {
  width: 80%;
}

.scale {
  width: 100%;
  padding-bottom: 56.25%;
  height: 0;
  position: relative;
}

.item {
  width: 100%;
  height: 100%;
  background-color: aquamarine;
  position: absolute;
}

實現效果:

 

 參考地址:https://www.cnblogs.com/yf-html/p/9626000.html

 技術總結:

1)該方式基於padding-bottom: 56.25%;height: 0;實現

2)父級元素中設置position:relative;子元素中設置position:absolute;這樣子元素中可以獲取到正常的height值,有利於子元素中添加新樣式時設置高度問題

2、指定元素全屏實現方案

 直接上代碼,同時處理了兼容性:

//  做個全屏的構造函數
    var FullScreen = function(elem){
        this.elem = document.querySelector(elem);
    }
    //  全屏
    FullScreen.prototype.in = function() {
        if (this.elem.requestFullscreen) {
            this.elem.requestFullscreen();
        } else if (this.elem.webkitRequestFullscreen) {
            this.elem.webkitRequestFullscreen();
        } else if (this.elem.mozRequestFullScreen) {
            this.elem.mozRequestFullScreen();
        } else if (this.elem.msRequestFullscreen) {
            //  IE的實現沒有實測過,不過據網上的資料說IE11以下可實現的
            this.elem.msRequestFullscreen();
        }
    }
    //  退出全屏
    FullScreen.prototype.out = function() {
        if (document.exitFullscreen) {
            document.exitFullscreen();
        } else if (document.webkitExitFullscreen) {
            document.webkitExitFullscreen();
        } else if (document.mozCancelFullScreen) {
            document.mozCancelFullScreen();
        } else if (document.msExitFullscreen) {
            document.msExitFullscreen();
        }
    }

 

使用:

 初始化時傳入要全屏的元素即可

var fullScreen = new FullScreen("#screen");
//  全屏
fullScreen.in();//  退出
fullScreen.out();

//為了保證選擇框進入或者退出時位置不變化,需要添加全屏事件的監聽

/**
* 監聽是否進入或者推送全屏操作
*/
document.addEventListener("fullscreenchange", function (e) {
if (document.fullscreenElement) {
console.log('進入全屏');
var alertPage = $(".layui-layer-page");
alertPage.appendTo("#screen");
} else {
console.log('退出全屏');
var alertPage = $(".layui-layer-page");
alertPage.appendTo("body");
}
});

 

 

 接下來我們使用layui中彈出層,可以根據顯示的屏幕動態選擇攝像頭,效果如下:

 

 

 

 

貌似效果實現,可當我們在全屏下進行操作的時,彈出框顯示已經彈出,但是不能顯示。

3、完美適配解決方案

此時我們分析問題,我們看layui彈出層實現的機制:

我們參考下基於iframe中彈出層解決遮罩層覆蓋到全屏方案:

參考:https://www.pianshen.com/article/92951324452/

因為layui官網說  如果彈層的內容content是某個DOM元素的話,要放在body的根節點下。不能放在div里面了。

 所以如果不在body根目錄下的話會導致遮罩遮擋全屏,因為最后生成的遮罩DOM元素的位置是body的子級,所以知道彈層的DOM要和遮罩的DOM 要在同一層。
如圖:

 

 

 

 所以這里再彈層的success的事件里面進行了處理,將遮罩的DOM位置挪動了一下,和彈層DOM元素同一級,代碼如下:

 

 

 給彈框定義名稱,關閉時可使用layer.close(彈框變量名)。

以上是解決方案,全屏的時候是不是也是類似問題呢?

我通過檢索發現:vue頁面或者網頁全屏后,modal 彈框或者下拉框無法顯示的問題,這篇文章介紹,參考:https://blog.csdn.net/woyaojinali/article/details/110958317

其實無論layui還是bootstrap中model,都是基於父級顯示的,默認情況下layui彈出層是基於body左右參考元素的,那么我們現在的解決方案就是在彈出層success成功后,

設置

layer.open({
    type: 1,
    title: '開通產品數量',
    area: ['700px', '600px'], //寬高
    shade: 0,
    shadeClose:false,
    anim: 3,
    zIndex:9999999999999999999,
    content: "#openProductBox",
    success: function() {
        var alertPage = $(".layui-layer-page");
        alertPage.appendTo("#screen"); //全屏模式下設置彈出層的父級參考標准
    }
});

此時完整效果如下:

 

 至此問題得到解決。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM