日韩欧美国产精品免费一二-日韩欧美国产精品亚洲二区-日韩欧美国产精品专区-日韩欧美国产另-日韩欧美国产免费看-日韩欧美国产免费看清风阁

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

js如何控制一次只加載一張圖片,加載完成后再加載下一張

admin
2025年1月13日 10:46 本文熱度 689

今天看到一個面試題,是關于img圖片加載方面的,有必要記錄一下。其實關于這個問題,只要知道圖片什么時候加載完成就能解決了。

通過onload事件判斷Img標簽加載完成

實現邏輯:新建一個Image對象實例,為實例對象設置src屬性等,在onload事件中添加此實例對象到父元素中,然后將圖片地址數組中的第一個元素剔除,繼續調用此方法直到存儲圖片地址的數組為空。

代碼

const imgArrs = [...]; // 圖片地址const content = document.getElementById('content');const loadImg = () => {  if (!imgArrs.length)  return;  const img = new Image(); // 新建一個Image對象  img.src = imgArrs[0];  img.setAttribute('class', 'img-item');  img.onload = () => { // 監聽onload事件    // setTimeout(() => { // 使用setTimeout可以更清晰的看清實現效果      content.appendChild(img);        imgArrs.shift();        loadImg();    // }, 1000);  }  img.onerror = () => {    // do something here  }}  loadImg();
</script>

實現效果

加上setTimeout后,看到的效果更加明顯,我這里加了500毫秒的延遲(錄屏軟件只支持錄制8秒的時間...)

其實我在網上還看到了一種答案,通過onreadystatechange事件實現監聽,于是在我本地調試了一下,發現并不能實現,img實例對象上并沒有這個屬性方法。查了查MDN,發現目前僅有XmlHttpRequest對象和Document對象中存在onreadystatechange屬性,而對于其它元素onreadystatechange此屬性并不存在。

「因此對于其它元素需要慎用onreadystatechange事件」

不過我電腦上目前只有ChormeSafari兩種瀏覽器,對于onreadystatechange測試的覆蓋面不全,所以我上面的結論可能還需要進一步驗證才行,感興趣的掘友可以調試一下~。

擴展知識

img標簽是什么時候發送圖片資源請求的?

  1. HTML文檔渲染解析,如果解析到img標簽的src時,瀏覽器就會立刻開啟一個線程去請求圖片資源。

  2. 動態創建img標簽,設置src屬性時,即使這個img標簽沒有添加到dom元素中,也會立即發送一個請求。

// 例1:const img = new Image();img.src = 'http://xxxx.com/x/y/z/ccc.png';

上面的代碼如果運行起來后,就會發送請求。 如圖:

再看一個例子:創建了一個div元素,然后將存放img標簽元素的變量添加到div元素內,而div元素此時并不在dom文檔中,頁面不會展示該div元素,那么瀏覽器會發送請求嗎?

// 例2:const img = `<img src='http://xxxx.com/x/y/z/ccc.png'>`;const dom = document.createElement('div');dom.innerHTML = img;

答案:會請求。如圖:

通過設置css屬性能否做到禁止發送圖片請求資源?

  1. img標簽設置樣式display:none或者visibility: hidden,隱藏img標簽,無法做到禁止發送請求。

<img src="http://xxx.com/x/sdf.png" style="display: none;">或者<img src="http://xxx.com/x/sdf.png" style="visibility: hidden;">

  1. 將圖片設置為元素的背景圖片,但此元素不存在,可以做到禁止發送請求。

<!DOCTYPE html><html lang='en'><head>    <meta charset='UTF-8'>    <title></title>    <style>        .test {            height: 200px;            background-image: url('http://eb118-file.cdn.bcebos.com/upload/39148b2a545b48bf9b4ee95fd1b7f1eb_1515564089.png?');        }    </style></head><body></body></html>

dom文檔中不存在test元素時,即使設置了背景圖片,也不會發送請求,只有test元素存在時才會發送請求。

另外這個例子其實有點不太貼切,img標簽background-image二者有著本質的區別。一個屬于HTML標簽,另一個屬于css樣式,加載機制和解析順序也不同。

?

一個完整的頁面是由jshtmlcss組成的,按照解析機制,html元素會優先解析,盡管css樣式是放在head標簽內的,但也不意味著它會優先加載,它只有等到html文檔加載完成后才會執行。而img標簽屬于網頁內容,所以img標簽會隨著網頁解析渲染優先于css樣式表加載出來。

?

文章中若有描述不正確的地方,歡迎掘友們糾正~


閱讀原文:https://mp.weixin.qq.com/s/3K1tksZfiAFTfRzD9Q6ZyA


該文章在 2025/1/13 10:46:29 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 国产精品黄页免费高清在线观看 | 亚洲日韩国产一区二区三区在线 | 亚洲国产精品va在线播放 | 欧洲不卡二卡三卡四卡免费 | 免费最新热播韩剧美剧电视剧 | 欧美综合国产日本 | 日本三级欧美三级 | 欧美大片黑寡妇免费观看 | 国内精品自线一区二区三区 | 亚洲精品男女视频在线 | 精品国产aⅴ一区二区三区四川人 | 成年人免费视频软件 | 亚洲精品一区二区观看 | 欧美牛逼aa | 国产又黄的a级鬼片在线观看 | 日本爽爽爽爽爽爽在线观看免 | 久青草久青草视频在线观看 | 香港三级台湾三级在线播放 | 在线观看精品国产福利片app | 凄辱护士日本电影免费看 | 欧美变态口味重另类在线视频 | 日韩在线观看高清视频 | 天堂中文最新版在线中文 | 国产做爰一区二区 | 亚洲欧美中文字幕乱码在线 | 四区免费视频 | 国产偷伦视频高清完整版 | 国产二区丝袜在线观看 | 色老头一区二区三区 | 国产特级婬片免费看 | 欧美国产精品不卡在线观看 | 国产不卡一区二区电影网 | 亚洲最大激情中 | 中文字幕精品视频第一区第二区 | 亚洲欧洲国产码专区在线观看 | 小说区综合区 | 亚洲欧美国产高清va在线播放 | 欧美日韩国产在 | 日韩经典欧美 | 亚洲精品视频在 | 97韩剧tv网|