發現問題
之前在做EasyNVR 的web頁面開發過程中,力求的都是一個播放效果的、功能的展示。對於兼容性也有注意,但有些細節還是難免有所疏忽。
內部測試發現:由於我們是流媒體的實時視頻直播,在web的直播頁面中,我們都是屏蔽、刪除播放器的暫停按鈕、功能的。我們的web頁面播放rtmp、hls使用的是videojs。他是一個開源的播放器,網上也有相關的文檔。
基於需求,結合現實,學習手冊,落實開發,我們通過設置css屬性來完成這個需求:
- 屏蔽單機頁面暫停
.video-js .vjs-tech {
pointer-events: none;
}
這個屬性設置 很好的在chrome中完成了需求。但是在IE中似乎就沒有能夠完成自己應有的任務了。
結合:
- 隱藏暫停、開始按鈕
.vjs-progress-control,.vjs-remaining-time-display{
visibility: hidden;
}
.video-js .vjs-play-control.vjs-playing {
visibility: hidden;
}
還可以將他的樣式也一併的隱藏起來。
但是,在IE瀏覽器下,這些屬性好像並沒有起到作用。
當我們單擊播放器時,依然會出現暫停的情況。
分析問題
我的第一想法是,是否是videojs對於ie瀏覽器的不兼容。才結果來看, 我在這個方面做了很多的無用功。雖然問題是出現在videojs的播放器上面,但是罪魁禍首不是它。
讓我們完成需求的操作其實是“pointer-events: none;”這個CSS屬性的設置;於是我對這個屬性進行了小小的瞭解。
pointer-events: none
元素永遠不會成爲鼠標事件的target。但是,當其後代元素的pointer-events屬性指定其他值時,鼠標事件可以指向後代元素,在這種情況下,鼠標事件將在捕獲或冒泡階觸發父元素的事件偵聽器。
也就是說,這個屬性的IE還沒有很好的支持;
解決問題
我是我們就需要找個其他方式,來解決這個問題,來完成我們的需求;
我們在js中動態的設置:
$(".vjs-tech").prop("disabled",true);
後面.prop是設置對象的屬性。
後面兩個參數是設置:disabled的屬性爲false,就是設置爲可用可編輯的意思;
disabled的屬性爲true,就是設置爲不可用、不可編輯的意思。
依然可以達到需求的效果: