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 免费一区二区三区久久,日本一区二区三区四区视频,免费在线观看你懂的

          整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          前端技巧:使用Promise精確獲取網(wǎng)絡(luò)圖片尺寸

          現(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)重要。

          實(shí)現(xiàn)loadImageSize方法

          我們提供的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;
            });
          }

          步驟分解

          1. 創(chuàng)建Image對象:這是Web API的一部分,允許我們創(chuàng)建一個圖片實(shí)例。
          2. 使用onload事件監(jiān)聽器:當(dāng)圖片加載完成時,觸發(fā)onload事件,并執(zhí)行回調(diào)函數(shù)。在回調(diào)中,我們可以安全地訪問圖片的寬度和高度屬性。
          3. 計(jì)算縱橫比:通過寬度除以高度得到。
          4. 使用onerror處理加載錯誤:如果圖片無法加載,onerror事件被觸發(fā),Promise被拒絕。
          5. 設(shè)置圖片的src屬性:這一步開始圖片的加載過程。

          使用示例

          下面是如何使用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)化建議

          雖然異步加載圖片提供了許多優(yōu)勢,但我們?nèi)匀恍枰紤]如何優(yōu)化性能。預(yù)加載關(guān)鍵圖片或使用圖片懶加載技術(shù)可以進(jìn)一步提升頁面的加載速度和用戶體驗(yàn)。

          常見問題及解決方案

          在使用loadImageSize方法時,可能會遇到跨域圖片的問題。為了解決這個問題,我們可以設(shè)置Image對象的crossOrigin屬性。此外,要避免內(nèi)存泄露,確保不再需要的Image對象能夠被垃圾回收。

          總結(jié)

          通過本文的介紹,我們學(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 相對長度單位,這里emhtml標(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代碼:

          1. .divcss5-px{ font-size:12px}
          2. .divcss5-pt{ font-size:12pt}
          3. .divcss5-em{ font-size:2em}

          HTML代碼:

          1. < span>divclass="divcss5-px"<我是divcss5</>div<
          2. < span>divclass="divcss5-pt"<我是divcss5</>div<
          3. < span>divclass="divcss5-em"<我是divcss5</>div<

          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像素單位。


          主站蜘蛛池模板: 99精品国产一区二区三区不卡 | 中文字幕无线码一区二区| 国产精品毛片VA一区二区三区| 少妇激情一区二区三区视频| 亚洲AV无码一区二区三区国产 | 久久亚洲国产精品一区二区| 无码人妻精品一区二区蜜桃| 无码日韩精品一区二区三区免费| 国模大胆一区二区三区| 久久99国产精一区二区三区| 精品国产一区在线观看| 国产天堂一区二区综合| 日韩精品一区二区三区影院| 精品一区狼人国产在线| 国精产品一区一区三区MBA下载| 亚洲国产综合精品中文第一区| 日本大香伊一区二区三区| 精品理论片一区二区三区| 国产精品综合一区二区| 人妻无码一区二区三区| 精品无码中出一区二区| 无码国产精品一区二区高潮| 国产精品亚洲专区一区| 国产在线不卡一区| 亚洲夜夜欢A∨一区二区三区| 久久久国产精品一区二区18禁| 91在线视频一区| 国产手机精品一区二区 | 日本高清无卡码一区二区久久| 一区二区传媒有限公司| 亚洲AV无码片一区二区三区| 一区二区三区福利| 色噜噜狠狠一区二区| 麻豆视传媒一区二区三区| 3d动漫精品成人一区二区三| 亚洲欧洲日韩国产一区二区三区| 国产在线视频一区二区三区| 一区二区三区免费看| 亚洲狠狠久久综合一区77777| 国产日韩精品一区二区三区| 在线中文字幕一区|