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