1. 程式人生 > 其它 >video 適配通屏展示、針對不同解析度 禁止變形處理

video 適配通屏展示、針對不同解析度 禁止變形處理

CSSobject-fit屬性

object-fit: fill|contain|cover|scale-down|none|initial|inherit;

樣式上

video{

height:100%;

width:100%

}

需求:

1、視訊需要通屏展示,去掉上下黑邊

object-fit:cover; fill  需要考慮的,視訊比例是否引起拉伸變形,解決如下~~~


第一種:通過樣式,可以參考獲取視訊寬高,實際視訊寬沒問題,缺點:高上下不通

<view class="video">
       <video object-fit="" style="height:{{height}}px; width:{{width}}px;"
            src="" 
            bindloadedmetadata="videometa" 
            binderror="videoErrorCallback" 
        ></video>
</view>

  

videometa:function (e) {
    var that = this;
    //獲取系統資訊
    wx.getSystemInfo({
      success (res) {
        //視訊的高
        var height = e.detail.height;
        
        //視訊的寬
        var width = e.detail.width;
 
        //算出視訊的比例
        var proportion = height / width;
 
        //res.windowWidth為手機螢幕的寬。
        var windowWidth = res.windowWidth;
 
        //算出當前寬度下高度的數值
        height = proportion * windowWidth;
        that.setData({
          height,
          width:windowWidth
        });
      }
    })
  },

  

第二種方法:動態切換 object-fit:cover | contain 屬性值

監聽視訊方法:metadata 獲取視訊寬與高,算出視訊的比例 var proportion = height / width;

if(proportion > 1.3){

type='cover'

}else{

type='contain'

}

這樣大部分視訊 都會滿足需求,切圖參考:根據不同的視訊比例使用不同的屬性

圖1,比例1

圖2:同屏

有更好的方案請留言。。。

屬性值

描述嘗試一下
fill 預設,不保證保持原有的比例,內容拉伸填充整個內容容器。
嘗試一下 »
contain 保持原有尺寸比例。內容被縮放。 嘗試一下 »
cover 保持原有尺寸比例。但部分內容可能被剪下。 嘗試一下 »
none 保留原有元素內容的長度和寬度,也就是說內容不會被重置。 嘗試一下 »
scale-down 保持原有尺寸比例。內容的尺寸與 none 或 contain 中的一個相同,取決於它們兩個之間誰得到的物件尺寸會更小一些。 嘗試一下 »
initial 設定為預設值,關於initial
inherit 從該元素的父元素繼承屬性。關於inherit