Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
現(xiàn)代前端開發(fā)中,動態(tài)加載圖片尺寸及其寬高比是一項(xiàng)基本而重要的技能。它不僅有助于提升頁面的響應(yīng)速度和用戶體驗(yàn),還能在進(jìn)行布局設(shè)計(jì)時提供更大的靈活性。本文將介紹如何使用JavaScript實(shí)現(xiàn)一個高效的方法loadImageSize,以異步方式準(zhǔn)確獲取網(wǎng)絡(luò)圖片的寬度、高度和寬高比。
Promise是JavaScript中用于處理異步操作的重要概念。它代表一個尚未完成但預(yù)期將會完成的操作。通過Promise,我們可以組織代碼以更直觀地處理異步事件,如圖片加載。圖片的寬度、高度和縱橫比(寬度除以高度的比值)是基本的圖形屬性,對于許多應(yīng)用場景如布局和響應(yīng)式設(shè)計(jì)至關(guān)重要。
我們提供的loadImageSize方法使用Promise來加載圖片并獲取其尺寸和縱橫比。該方法接收一個圖片URL作為參數(shù),并返回一個對象,其中包含圖片的寬度、高度和縱橫比。
const loadImageSize = (url: string) => {
return new Promise<{ width: number, height: number, aspectRatio: number }>((resolve, reject) => {
const img = new Image();
img.onload = () => {
const aspectRatio = img.width / img.height;
resolve({ width: img.width, height: img.height, aspectRatio });
};
img.onerror = reject;
img.src = url;
});
}
下面是如何使用loadImageSize方法的示例:
loadImageSize('https://example.com/image.jpg')
.then(({ width, height, aspectRatio }) => {
console.log(`Width: ${width}, Height: ${height}, Aspect Ratio: ${aspectRatio}`);
})
.catch(error => {
console.error('Failed to load image:', error);
});
這段代碼展示了如何處理異步返回的圖片尺寸信息及錯誤處理。
雖然異步加載圖片提供了許多優(yōu)勢,但我們?nèi)匀恍枰紤]如何優(yōu)化性能。預(yù)加載關(guān)鍵圖片或使用圖片懶加載技術(shù)可以進(jìn)一步提升頁面的加載速度和用戶體驗(yàn)。
在使用loadImageSize方法時,可能會遇到跨域圖片的問題。為了解決這個問題,我們可以設(shè)置Image對象的crossOrigin屬性。此外,要避免內(nèi)存泄露,確保不再需要的Image對象能夠被垃圾回收。
通過本文的介紹,我們學(xué)會了如何使用JavaScript以及Promise異步處理機(jī)制,有效地加載并獲取網(wǎng)絡(luò)圖片的尺寸和寬高比。這不僅能優(yōu)化頁面加載性能,還能提升用戶體驗(yàn)。希望讀者能夠通過實(shí)踐掌握這一技能,并在日常開發(fā)中加以應(yīng)用。
如果喜歡,可以點(diǎn)贊收藏,關(guān)注喲~
用方案
1、設(shè)置根 font-size:625%(或其它自定的值,但換算規(guī)則 1rem 不能小于 12px)
2、通過媒體查詢分別設(shè)置每個屏幕的根 font-size
3、CSS 直接除以 2 再除以 100 即可換算為 rem
優(yōu):有一定適用性,換算也較為簡單。
劣:有兼容性的坑,對不同手機(jī)適配不是非常精準(zhǔn);需要設(shè)置多個媒體查詢來適應(yīng)不同手機(jī),單某款手機(jī)尺寸不在設(shè)置范圍之內(nèi),會導(dǎo)致無法適配。
網(wǎng)易方案
1、拿到設(shè)計(jì)稿除以 100,得到寬度 rem 值
2、通過給 html 的 style 設(shè)置 font-size,把 1 里面得到的寬度 rem 值代入x document.documentElement.style.fontSize =document.documentElement.clientWidth / x + ‘px‘;
3、設(shè)計(jì)稿 px/100 即可換算為 rem
優(yōu):通過動態(tài)根 font-size 來做適配,基本無兼容性問題,適配較為精準(zhǔn),換算簡便。
劣:無 viewport 縮放,且針對 iPhone 的 Retina 屏沒有做適配,導(dǎo)致對一些手機(jī)的適配不是很到位。
手淘方案
1、拿到設(shè)計(jì)稿除以 10,得到 font-size 基準(zhǔn)值
2、引入 flexible
3、不要設(shè)置 meta 的 viewport 縮放值
4、設(shè)計(jì)稿 px/ font-size 基準(zhǔn)值,即可換算為 rem
優(yōu):通過動態(tài)根 font-size、viewpor、dpr 來做適配,無兼容性問題,適配精準(zhǔn)。
劣:需要根據(jù)設(shè)計(jì)稿進(jìn)行基準(zhǔn)值換算,在不使用 sublime text 編輯器插件開發(fā)時,單位計(jì)算復(fù)雜。
、PX\EM\PT單位介紹
px單位名稱為像素,相對長度單位,像素(px)是相對于顯示器屏幕分辨率而言的國內(nèi)推薦;
em單位名稱為相對長度單位。相對于當(dāng)前對象內(nèi)文本的字體尺寸,國外使用較多;
pt單位名稱為點(diǎn)(Point),絕對長度單位一般老版本的table使用長度大小單位但是現(xiàn)在基本上沒有使用。
html單位簡短介紹:
Px 像素Pixel;相對長度單位。
Pt 點(diǎn)(Point);絕對長度單位
Em 相對長度單位,這里em與html標(biāo)簽的"EM"拼寫完全相同,而這里em作為單獨(dú)文本單位。
1. 以前IE無法調(diào)整那些使用px作為單位的字體大小,但現(xiàn)在幾乎IE都支持 在這里也推薦使用PX作為單位;
2. 國外的大部分網(wǎng)站能夠調(diào)整的原因在于其使用了em作為字體單位;
3. Firefox能夠調(diào)整px和em,但是96%以上的中國網(wǎng)民使用IE瀏覽器(或內(nèi)核)。
px像素(Pixel)。相對長度單位。像素px是相對于顯示器屏幕分辨率而言的,QQ截圖也是使用PX作為長度寬度單位。
em是相對長度單位。相對于當(dāng)前對象內(nèi)文本的字體尺寸。如當(dāng)前對行內(nèi)文本的字體尺寸未被人為設(shè)置,則相對于瀏覽器的默認(rèn)字體尺寸。
二、html單位對比案例
1、簡單小例:
Width:300px 寬度為300像素
Width:300pt 寬度為300點(diǎn)
Width:300em 寬度為300相對長度
以上我們設(shè)置相同數(shù)值的不同單位實(shí)例
2、對文字設(shè)置不同長度em px pt單位看看效果:
CSS代碼:
HTML代碼:
3、單位長度對比說明圖
html px pt em單位案例對比圖
三、em與px換算
任意瀏覽器的默認(rèn)字體高度16px(16像素)。所有未經(jīng)調(diào)整的瀏覽器都符合: 1em=16px。那么12px=0.75em,10px=0.625em。為了簡化font-size的換算,需要在css中的body選擇器中聲明font-size=62.5%,這就使em值變?yōu)?16px*62.5%=10px, 這樣12px=1.2em, 10px=1em, 也就是說只需要將你的原來的px數(shù)值除以10,然后換上em作為單位就行了。
12px相當(dāng)于9pt長度;
12px相當(dāng)于0.75em長度;
9pt相當(dāng)于0.75em長度;
一般我們使用em換算px較多
高級em與px換算:
任意瀏覽器的默認(rèn)字體高度16px(16像素)。所有未經(jīng)調(diào)整的瀏覽器都符合: 1em=16px。那么12px=0.75em,10px=0.625em。為了簡化font-size的換算,需要在css中的body選擇器中聲明font-size=62.5%,這就使em值變?yōu)?16px*62.5%=10px, 這樣12px=1.2em, 10px=1em, 也就是說只需要將你的原來的px數(shù)值除以10,然后換上em作為單位就行了。
具體使用時候:
我們在對全體html標(biāo)簽聲明初始一次font-size=62.5%
如:
*{font-size=62.5%}
即可此后面布局可依據(jù)以下技巧進(jìn)行設(shè)置em單位
font-size:1.2em等于font-size:12px
font-size:1.4em等于font-size:14px
以此類推相當(dāng)于初始font-size=62.5%后,em與px單位就只有10倍差距,以便方便計(jì)算與設(shè)置em長度數(shù)值使用。
四、em單位有如下特點(diǎn):
1. em的值并不是固定的;
2. em會繼承父級元素的字體大小。
我們在寫CSS的時候如果要用em為單位,需要注意兩點(diǎn):
1. body選擇器中聲明Font-size=62.5%;
2. 將你的原來的px數(shù)值除以10,然后換上em作為單位;
3. 重新計(jì)算那些被放大的字體的em數(shù)值。避免字體大小的重復(fù)聲明。
也就是避免1.2 * 1.2= 1.44的現(xiàn)象。比如說你在#content中聲明了字體大小為1.2em,那么在聲明的字體大小時就只能是1em,而不是1.2em, 因?yàn)榇薳m非彼em,它因繼承#content的字體高而變?yōu)榱?em=12px。
但是12px漢字例外,就是由以上方法得到的12px(1.2em)大小的漢字在IE中并不等于直接用12px定義的字體大小,而是稍大一點(diǎn)。這個問題 Jorux已經(jīng)解決,只需在body選擇器中把62.5%換成63%就能正常顯示了。原因可能是IE處理漢字時,對于浮點(diǎn)的取值精確度有限。不知道有沒有其他的解釋。
五、推薦網(wǎng)頁單位
所以為了單位換算錯誤推薦使用PX(像素)作為網(wǎng)頁制作單位。
以上為大家介紹了px em pt單位,及換算方式,一般現(xiàn)在我們使用長度單位都以px為長度單位。這里我們也推薦使用以px(像素)為網(wǎng)頁的尺寸長度單位,符合瀏覽器的像素單位,同時也為了方便計(jì)算長度尺寸。
關(guān)于px pt em單位總結(jié)
1)、推薦px像素為單位:通常我們使用px(像素為單位)較多,其次是em單位,平時推薦大家以px為單位;
2)、我們的顯示屏分辨率以px像素為單位;
3)、我們QQ截圖時候也是以px像素單位。
*請認(rèn)真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。