transform實現(xiàn)HTML5 video標簽視頻比例拉伸實例詳解
曾幾何時,項目中有碰到視頻比例拉伸的需求,但是發(fā)現(xiàn)這個看似再普通不過的一個需求,找遍全網(wǎng)至今都沒有找到解決方法。因為強制給video標簽設(shè)置width和height的話只會將video的顯示區(qū)域拉伸,但是里面的視頻還是保持原始比例,怎么調(diào)都沒用:
因為當我橫向拉伸時:

當我縱向拉伸時:

2016-09-21 11:15:40 更新:
感謝 @RileyRen 提醒,原來還有object-fit這一屬性,把它設(shè)置為fill就滿足需求了,淚奔~,這篇文章就當看個笑話吧,哎,不過可以看看我家喵星人的處女秀。
<style>
video {
object-fit:fill;
width:800px;
height:320px;
}
</style>
<h1>測試視頻比例拉伸:</h1>
<video src="http://7xnzpx.com1.z0.glb.clouddn.com/miaoxingren_360p.mp4" controls autoplay loop></video>
不過這一屬性兼容性不太好,IE全軍覆沒,安卓要4.4.3以上才支持:

所以我這個方法還是有一點點價值的,哈哈。
解決方法一
有人會說,既然網(wǎng)頁上拉伸不了比例,那么直接把視頻用轉(zhuǎn)碼工具拉伸比例然后重新轉(zhuǎn)碼不就是了?
沒錯,這就是我說的第一種解決方法,但是這對于少量視頻沒啥問題,如果有很多個視頻,全部轉(zhuǎn)碼又重新上傳也不太現(xiàn)實。剛開始我也確實是這么做的,但是后來發(fā)現(xiàn)還有其它方法。
解決方法二
就是標題說的,借用transform來實現(xiàn)視頻比例拉伸。分2種情況,寬高比變大和寬高比變小。
完整DEMO演示
先來看個完整的DEMO,視頻主角是我家的喵星人,阿喵說:哎呀,要露臉了,好害羞~~~
http://demo.liuxianan.com/2016/01/09/html5-video-resize/
寬高比變大
保持寬度不變,調(diào)整rotateX即可實現(xiàn)高度變小,也就是寬高比變大了??聪聢D:

舉個例子,假如原始視頻分辨率是640*320(16:9),我想把它調(diào)成16:7,也就是640*280,那么:
cos θ = 新高度 / 舊高度 = 280 / 360
用js計算角度(單位是deg):
var rotate = (Math.acos(280/360)*180/Math.PI).toFixed(2); // 新高度 / 舊高度
寬高比變小
寬高比減小時,以高度為基準,調(diào)整rotateY即可實現(xiàn)寬度變小,也就是寬高比變小了。
舉個例子,假如原始視頻分辨率是640*320(16:9),我想把它調(diào)成4:3,也就是480*320,那么:
cos θ = 新寬度 / 舊寬度 = 480 / 640
用js計算角度(單位是deg):
var rotate = (Math.acos(480/640)*180/Math.PI).toFixed(2); // 新寬度 / 舊寬度
總結(jié)
綜上,有了這2個方法就可以實現(xiàn)任意比例的視頻拉伸了,不過變形過程中需要注意位置可能發(fā)現(xiàn)的變化。
附
附上前面演示選擇的DEMO:
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>旋轉(zhuǎn)比例模擬</title>
<style type="text/css">
.content {
position: absolute;
width: 400px;
height: 300px;
-webkit-perspective: 400px;
perspective: 400px;
left: 100px;
top: 100px;
}
.wrapper {
position: absolute;
width: 320px;
height: 240px;
transform: rotateY(-30deg) rotateX(0deg);
border: solid 2px #000;
}
.wrapper.rotate{
transform: rotateY(-30deg) rotateX(50deg);
}
.wrapper:after {
content: '';
display: block;
position: absolute;
width: 400px;
left: -40px;
top: 120px;
height: 2px;
background: black;
}
.wrapper img{
width: 100%;
height: 100%;
}
</style>
</head>
<body>
<div class="content">
<div class="wrapper">
<img src="http://test.liuxianan.com/sample.jpg"/>
</div>
<div class="wrapper rotate">
<img src="http://test.liuxianan.com/sample.jpg"/>
</div>
</div>
</body>
</html>
相關(guān)文章
elasticsearch索引index之merge底層機制的合并講解
這篇文章主要為大家介紹了elasticsearch索引index之merge底層機制的合并,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-04-04
VScode設(shè)置語言為中文以及解決中文注釋亂碼問題
VSCode默認是英文語言環(huán)境,習慣了用中文,下面這篇文章主要給大家介紹了關(guān)于VScode設(shè)置語言為中文以及解決中文注釋亂碼問題的相關(guān)資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2023-12-12
將Sublime?Text?設(shè)置成中文版的完整教程
這篇文章主要介紹了將Sublime?Text?設(shè)置成中文版的完整教程,需要自己添加之后才會有這一項,對Sublime?Text中文版設(shè)置方法感興趣的朋友一起看看吧2022-01-01
i++循環(huán)與i-–循環(huán)的執(zhí)行效率(遞增與遞減效率)
i++循環(huán)與i-–循環(huán)的執(zhí)行效率(遞增與遞減效率),需要的朋友可以參考下。2011-01-01
npm script 的文件監(jiān)聽和自動刷新的命令詳解
文件監(jiān)聽的作用是為了實現(xiàn)自動化,釋放雙手和精力,提高效率,讓開發(fā)者更加關(guān)注于開發(fā)。這篇文章主要介紹了npm script 的文件監(jiān)聽和自動刷新,需要的朋友可以參考下2019-06-06

