JavaScript DOM元素長寬等比例縮放
阿新 • • 發佈:2018-11-13
我們經常遇到長寬隨視窗變化等比縮放的例子,比如視訊網上中間的視訊案例、等比縮放的盒子圖片等等。
公式
我們已經知道根據比例求長寬公式是:
求寬度 w = h / ratio
求高度 h = w * ratio
準備
根據公式此時我們需要準備,一個外容器dom和一個進行等比縮放的容器dom
核心程式碼
let h = wrapW * ratio;
if (h <= wrapH) {
cW = wrapW;
cH = h;
} else {
let w = wrapH / ratio;
cW = w;
cH = wrapH;
}
複製程式碼
上述程式碼中,wrapW
與wrapH
是外容器的,cW
與cH
是要進行比例調控的容器。 首先我們要先計算出一個方向的縮放寬度,判斷是否超出外容器,如果沒有超出,那麼表示等比縮放在該外容器內,如果超出,則反向進行計算。
原始碼
/**
* 比例縮放js
* @param wrap 外容器
* @param container 比例調控的容器
* @param ratio 比例值
* @returns {{width: number, height: number, residueW: number, residueH: number}}
* 返回值:width:比例寬度, height:比例高度, residueW: 剩餘的寬度, residueH: 剩餘的高度
*/
function aspectRatio(wrap, container, ratio = 9 / 16) {
// w = h / ratio, h = w * ratio
let wrapW = wrap.clientWidth;
let wrapH = wrap.clientHeight;
let cW = container.clientWidth;
let cH = container.clientHeight;
let h = wrapW * ratio;
if (h <= wrapH) {
cW = wrapW;
cH = h;
} else {
let w = wrapH / ratio;
cW = w;
cH = wrapH;
}
return {
width: cW,
height: cH,
residueW: wrapW - cW,
residueH: wrapH - cH
};
};
// 呼叫示例
// aspectRatio(wrapDom, ContainerDom, (9 / 16)); // {{width: number, height: number, residueW: number, residueH: number}}
複製程式碼
注意:考慮到結果精度問題,此原始碼內結果集沒有進行整行運算,如有需求可以在使用該結果處進行整形或者在原始碼內補充即可!
執行效果圖
寬屏
高屏
方形屏
*版權宣告:本文為博主原創文章,未經博主允許不得轉載。