關于圖片預加載的思考

引子:

很多時候,我們在寫html頁面的時候,當需要在頁面中加入圖片時,我們很自然地把圖片直接用<img>標簽放在了<body>里面,這本來是沒有多大問題的。

但是當圖片數量很多的時候,問題就來了。Html頁面在被解析器解析的時候要不斷去尋找圖片的路徑去加載圖片,而這些圖片不一定所以都會被用戶通過觸發一些類似點擊的操作所看到。這樣,一些不必要的圖片預加載就會拉長了頁面的加載時間,帶來的用戶體驗是不好的。

為了解決這個性能問題,有一個比較好的解決問題就是用js去延遲圖片預加載。那么具體的實現過程是怎樣的呢?

我先把我實現的代碼放在下面:

<html lang="en">
<head><meta charset="UTF-8"><title>Document</title>
<style>body{position:relative;text-decoration: none;list-style: none;}.showpic{position:absolute;height:550px;width:90%;margin-left:80px;background-color: black;}.button-box{position: absolute;margin-top:560px;margin-left: 600px;z-index: 5;}.preload{position: fixed;height: 100%;width:100%;top:0;background-color: white;display: none;}img{position: absolute;margin-left: 30px;margin-top: 3px;}button{height: 30px;width:80px;font-size: 10px;}
</style>
<script  src="https://code.jquery.com/jquery-1.12.4.js"></script>
</head><body><div class="showpic"><img src="img/pexels-photo-297814.jpeg" id="img"></div><div class="button-box"><button type="button" value="前一張"  data-control="prev" class="button">前一張</button><button type="button" value="后一張"  data-control="next" class="button">后一張</button></div><div class="preload"></div><script type="text/javascript" src="js/preload.js"></script>
</body>
</html>$(document).ready(function(){var imgs = ["img/pexels-photo-297814.jpeg","img/pexels-photo-465445.jpeg","img/pexels-photo-619948.jpeg","img/pexels-photo-620336.jpeg","img/pexels-photo-885746.jpeg","img/pexels-photo-886109.jpeg","img/pexels-photo-888994.jpeg"];var  index = 0,len =imgs.length;$(".button").on("click",function(){if($(this).data('control')=== "prev"){index = Math.max(0,--index);}else{index = Math.min(len-1,  index);}$("#img").attr("src",imgs[index]);});});

?

?

?

?

這個案例我是要實現通過點擊按鈕實現圖片的展示過程。顯然,我在<div class="showpic">盒子的<img>標簽里面只是放了一張圖片(避免頁面打開是什么也沒有),并沒有把全部可以展示的圖片都放在盒子里面。因為這樣勢必會加大web瀏覽器解析html頁面的壓力。

我把這些圖片的所有搜索路徑的放在了js代碼中,并通過修改src屬性的方法來更新<img>標簽,其中我還用到了html的data屬性來自定義點擊按鈕的類型,并通過在js中獲取這個data值來確定圖片路徑的更改。

這樣的實現,就比較有利于減輕html頁面解析過程中對瀏覽器解析器的壓力。

?

本文轉載于:猿2048?https://www.mk2048.com/blog/blog.php?id=ijckjaa&title=關于圖片預加載的思考

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/370673.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/370673.shtml
英文地址,請注明出處:http://en.pswp.cn/news/370673.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

oracle安裝中桌面模式與服務器模式的去別

桌面模式只能本機使用。 服務器模式可以在網絡中使用&#xff0c;也就是網絡中的其他服務器可以使用。 所以安裝時&#xff0c;如果是生產環境肯定是服務器模式。一般也都是服務器模式。 轉載于:https://www.cnblogs.com/zhjx0521/p/7803691.html

python不能創建字典的是_用Python創建帶有重復鍵的字典

用Python創建帶有重復鍵的字典 我有以下列表&#xff0c;其中包含重復的具有不同值的汽車注冊號。 我想將其轉換為字典&#xff0c;該字典接受汽車登記號的多個鍵。 到目前為止&#xff0c;當我嘗試將列表轉換為字典時&#xff0c;它消除了鍵之一。 如何制作具有重復鍵的字典&a…

python中int是什么的縮寫_python中int是什么類型

python中的基本數據類型1:雖然python中的變量不需要聲明&#xff0c;但使用時必須賦值整形變量浮點型變量字符型2:可以一個給多個變量賦值&#xff0c;也可以多個給多個變量賦值3:python3中有6個標準數據類型Number(數字)*True1*False0*數值的除法(/)總是返回一個浮點數&#x…

redis cli命令

redis安裝后&#xff0c;在src和/usr/local/bin下有幾個以redis開頭的可執行文件&#xff0c;稱為redis shell&#xff0c;這些可執行文件可做很多事情。 可執行文件作用redis-server 啟動redisredis-cliredis命令行工具redis-benchmark基準測試工具redis-check-aofAOF持久化文…

高級ZK:異步UI更新和后臺處理–第2部分

介紹 在第1部分中&#xff0c;我展示了如何在ZK應用程序中使用服務器推送和線程來執行后臺任務。 但是&#xff0c;這個簡單的示例具有一個重大缺陷&#xff0c;這使其對于實際應用程序而言是一種不好的方法&#xff1a;它為每個后臺任務啟動了一個新線程。 JDK5引入了Execut…

css清除浮動的原理

最近學習css發現了高度塌陷時候要清除浮動,為了理解清楚浮動原理,網上找了不少資料,發現都寫的不是很清楚,而且都是一模一樣的內容,我在里分享一下我對清楚浮動原理的理解, 如果你已經很了解什么是浮動和浮動的效果你可以直接跳轉到三.如何清除浮動(重點)閱讀 一.什么是浮動首…

SpringBoot03 項目熱部署

1 問題 在編寫springBoot項目時&#xff0c;經常需要修改代碼&#xff1b;但是每次修改代碼后都需重新啟動&#xff0c;修改的代碼才會生效 2 這么實現IDEA能夠像Eclipse那樣保存過后就可以自動進行刷新呢 將springBoot項目進行熱部署即可 3 如何實現SpringBoot項目的熱部署01 …

STM32實現流水燈

led.c #include"led.h"void Led_Init(void) {GPIO_InitTypeDef GPIO_VALUE; //???RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//???GPIO_VALUE.GPIO_ModeGPIO_Mode_Out_PP;//???? ????GPIO_VALUE.GPIO_PinGPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_…

jacob 報錯 Can't co-create object

問題&#xff1a;開始時一切正常&#xff0c;后來什么都沒該&#xff0c;出現Cant co-create object報錯&#xff0c;即是創建不了ActiveXComponent wdnew ActiveXComponent("Word.Application"); 偶爾發現任務管理器中word進程居然達到10個&#xff0c;而我沒有打開…

map分組后取前10個_map根據屬性排序、取出map前n個

/*** map根據value排序* flag 1 正序* flag 0 倒序** param map* param flag* return*/public static > LinkedHashMap sortByValue(Map map, int flag) {LinkedHashMap sortMap new LinkedHashMap<>();if (flag 1) {map.entrySet().stream().sorted(Comparator.c…

wxpython可視化_使用wxPython的繪圖模塊wxPyPlot進行數據可視化

[Python進階(四十)-數據可視化の使用matplotlib進行繪圖前言??matplotlib是基于Python語言的開源項目&#xff0c;旨在為Python提供一個數據繪圖包。我將在這篇文章中介紹matplotlib A #-*- coding: utf-8 -*- ############################################################…

在Java EE 6中將Bean驗證與JAX-RS集成

JavaBeans驗證&#xff08;Bean驗證&#xff09;是一種新的驗證模型&#xff0c;可作為Java EE 6平臺的一部分使用。 約束條件支持Bean驗證模型&#xff0c;該約束以注釋的形式出現在JavaBeans組件&#xff08;例如托管Bean&#xff09;的字段&#xff0c;方法或類上。 javax.…

如何讓浮動的元素換行??css

當你想要做成這種布局效果的時候 紫色框里面的內容那樣 它是一個列表 li元素是塊級元素 默認大小是父元素ul的寬 并且換行 如果li沒有背景的話那就不用管了 可是問題來了它不但有背景 而且是根據文字自適應的寬高 這就是inline-block類型的功能了 那么想讓li是inline-bl…

Python學習之類和實例

面向對象最重要的概念就是類&#xff08;Class&#xff09;和實例&#xff08;Instance&#xff09;&#xff0c;必須牢記類是抽象的模板&#xff0c;比如Student類&#xff0c;而實例是根據類創建出來的一個個具體的“對象”&#xff0c;每個對象都擁有相同的方法&#xff0c;…

解決sublime里面的vue高亮的問題

下載插件文件&#xff1a;https://github.com/vuejs/vue-syntax-highlight 直接在官網下載放在安裝時候的packages目錄下&#xff08;sublime text3\Sublime Text3\Data\Packages&#xff09; 在Packages文件夾下新建一個vue的文件&#xff0c;把第一步下載的文件復制進去 subl…

python矩形填充顏色_在Python中找到所有用0填充的矩形

假設我們有一個二進制2D矩陣&#xff0c;現在我們必須找到所有用0填充的矩形的起點和終點。我們必須牢記&#xff0c;矩形是分開的&#xff0c;彼此之間不接觸&#xff0c;但是它們可以接觸陣列邊界。僅包含單個元素的矩形也是可能的。所以&#xff0c;如果輸入像-101110111011…

python concat_python中merge、concat用法

轉載&#xff1a;https://blog.csdn.net/ly_ysys629/article/details/73849543 參考&#xff1a;https://blog.csdn.net/stevenkwong/article/details/52540605 數據規整化&#xff1a;合并、清理、過濾 pandas和python標準庫提供了一整套高級、靈活的、高效的核心函數和算法將…

Vue使用axios無法讀取data的解決辦法

今天發現Vue中使用了axios后&#xff0c;then方法中無法讀取到data中的數據了&#xff0c;總是提示 Cannot set property xxx of undefined 上網找了一圈后發現了一下解決方法。 解決辦法1&#xff1a; methods:{tap:function(){var selfthis;axios.get(xxxxxx).then(function(…

設置博客園標題樣式

1.向博客園申請js權限 我們需要進入博客園自定義博客模板的頁面&#xff0c;向博客園管理團隊申請頁面運行js的權限。【博客園】->【設置】->【博客設置】&#xff0c;點擊頁面上的js權限申請&#xff0c;然后填寫申請的理由&#xff0c;耐心等幾分鐘&#xff0c;再刷新一…

Spring 3.1 –從數據庫加載XML配置的屬性

Spring使通過其PropertyPlaceholderConfigurer和&#xff08;Spring 3.1之前&#xff09;PropertySourcesPlaceholderConfigurer&#xff08;Spring 3.1&#xff09;從屬性文件中獲取的值易于注入。 這些類實現了BeanFactoryPostProcessor接口&#xff0c;該接口使它們能夠在初…