詳細介紹:網站背景更換功能

目錄

1. HTML 部分

2. JavaScript 部分

3. 完整流程

4. 總結

5. 適用場景


本文將介紹如何通過文件上傳實現網站背景圖片的更換。通過使用 JavaScriptAxios,我們可以允許用戶上傳圖片文件并將其作為網站的背景圖片。上傳的圖片 URL 會保存在瀏覽器的 localStorage 中,這樣即使刷新頁面,背景圖片仍然可以保持不變。

下面是具體的實現過程以及完整的代碼示例。


1. HTML 部分
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>更換背景圖片</title></head><body><h1>選擇一張圖片更換背景</h1><!-- 上傳圖片選擇框 --><input type="file" class="bg-ipt"><script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script><script>// JavaScript 部分代碼見下文</script></body>
</html>

HTML 解析

  • input[type="file"]:這是一個文件選擇框,用戶可以通過該框選擇本地圖片文件。
  • class="bg-ipt":我們通過該類名在 JavaScript 中獲取元素,以便給它綁定事件監聽器。

2. JavaScript 部分
// 監聽文件選擇框的change事件
document.querySelector(".bg-ipt").addEventListener("change", (e) => {// 1. 選擇圖片上傳,設置 body 背景console.log(e.target.files[0]);// 創建 FormData 對象,封裝圖片文件const fd = new FormData();fd.append("img", e.target.files[0]);// 發送 POST 請求到服務器,上傳圖片axios({url: "http://hmajax.itheima.net/api/uploadimg",  // 圖片上傳的 API 地址method: "post",data: fd,  // 上傳的文件數據}).then((result) => {// 服務器返回結果console.log(result);// 從返回的數據中獲取圖片 URLconst imgUrl = result.data.data.url;// 設置頁面背景圖片為上傳的圖片document.body.style.backgroundImage = `url(${imgUrl})`;// 2. 上傳成功時,"保存"圖片 URL 到 localStorage 中localStorage.setItem("bgImg", imgUrl);}).catch((error) => {// 錯誤處理console.error('圖片上傳失敗:', error);});
});// 3. 網頁運行時,獲取存儲的背景圖片 URL 并應用
const bgUrl = localStorage.getItem("bgImg");
if (bgUrl) {document.body.style.backgroundImage = `url(${bgUrl})`;
}

JavaScript 解析

  1. 監聽文件選擇框的變化

    • document.querySelector(".bg-ipt").addEventListener("change", (e) => { ... }):當用戶選擇文件時,觸發 change 事件。
    • e.target.files[0] 獲取用戶選擇的文件。
  2. 創建 FormData 對象

    • const fd = new FormData();:通過 FormData 對象,封裝要上傳的文件。
    • fd.append("img", e.target.files[0]);:將文件添加到 FormData 中,鍵名為 'img',對應服務器上傳接口的字段名。
  3. 發送 POST 請求上傳圖片

    • 使用 axios 發送 POST 請求,上傳圖片至指定 API(本示例中為 http://hmajax.itheima.net/api/uploadimg)。
    • 請求成功后,服務器返回圖片的 URL,我們將其用作頁面的背景圖片:document.body.style.backgroundImage = url(${imgUrl})`。
  4. 保存圖片 URL 到 localStorage

    • 上傳成功后,使用 localStorage.setItem("bgImg", imgUrl) 將圖片的 URL 存儲在本地存儲中,以便頁面刷新時仍能使用相同的背景圖片。
  5. 獲取并應用背景圖片

    • 頁面加載時,通過 localStorage.getItem("bgImg") 獲取存儲的背景圖片 URL,并將其應用到頁面背景:document.body.style.backgroundImage = url(${bgUrl})`。
    • 這樣即使刷新頁面,背景圖片仍然不會丟失。

3. 完整流程
  1. 用戶點擊文件選擇框并選擇一張圖片。
  2. JavaScript 通過 FormData 創建上傳請求,使用 Axios 向服務器發送圖片文件。
  3. 服務器返回圖片的 URL,JavaScript 將此 URL 設置為頁面的背景。
  4. 圖片 URL 會被保存到 localStorage 中,確保頁面刷新后背景圖片依然存在。
  5. 當頁面加載時,JavaScript 會從 localStorage 中讀取背景圖片的 URL 并重新應用。

4. 總結

這個示例展示了如何使用 JavaScriptAxios 實現動態背景更換功能,并且在用戶刷新頁面時保持背景不變。通過 localStorage 我們能保存用戶的選擇,使得背景圖片可以在會話中持續有效。這個功能適用于個人網站、博客、或者任何需要自定義頁面外觀的應用。

5. 適用場景
  • 個人網站:允許用戶自定義背景圖片,使其更加個性化。
  • 博客平臺:用戶可以上傳并設置背景圖片,提升視覺體驗。
  • 管理后臺:管理員可以根據需求上傳和更改系統背景,提升管理界面的可視化效果。

通過上面的代碼,你可以很容易地在你的網站上實現動態背景更換功能。

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

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

相關文章

嵌入原則:數據特征如何 融入 模型的 損失地形

嵌入原則&#xff1a;數據特征如何 融入 模型的 損失地形 第一節&#xff1a;嵌入原則的基本概念與公式解釋 機器學習中的嵌入原則&#xff0c;就像 “雕刻師” 將 “石塊的紋理” 逐漸融入到 “雕塑的造型” 中。數據特征不再是獨立的輸入&#xff0c;而是被模型 “吸收” 和…

FPGA|例化生成的PLL功能IP核

1、例化上一篇文章中調用的IP核&#xff0c;新建文件PLL_test.v 2、代碼如圖 timescale 1ns / 1ps module PLL_test(input clk,input rst_n,output clkout0,output clkout1,output clkout2,output clkout3,output clkout4);wire locked;PLL pll_inst(.inclk0(clk),.c0(clkout0)…

【C++】P5734 【深基6.例6】文字處理軟件

博客主頁&#xff1a; [小????????] 本文專欄: C 文章目錄 &#x1f4af;前言&#x1f4af;題目描述&#x1f4af;題目描述輸入格式輸出格式示例輸入與輸出輸入&#xff1a;輸出&#xff1a; &#x1f4af;我的做法操作1&#xff1a;在文檔末尾插入字符串操作2&…

后盾人JS -- 原型

沒有原型的對象 也有沒有原型的對象 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document<…

洛谷 P1130 紅牌 C語言

題目描述 某地臨時居民想獲得長期居住權就必須申請拿到紅牌。獲得紅牌的過程是相當復雜&#xff0c;一共包括 N 個步驟。每一步驟都由政府的某個工作人員負責檢查你所提交的材料是否符合條件。為了加快進程&#xff0c;每一步政府都派了 M 個工作人員來檢查材料。不幸的是&…

【線程】基于環形隊列的生產者消費者模型

1 環形隊列 環形隊列采用數組來模擬&#xff0c;用取模運算來模擬環狀特性。 1.如何判斷環形隊列為空或者為滿? 當環形隊列為空時&#xff0c;頭和尾都指向同一個位置。當環形隊列為滿時&#xff0c;頭和尾也都指向同一個位置。 因此&#xff0c; 可以通過加計數器或者標記…

二分/雙指針/單調棧隊列專題

1.4924. 矩陣 - AcWing題庫 一開始打表找規律以為是右上角向左下角遞增,但當n很大的時候就不對了,因此我們得去觀察 i * i 100000 * (i - j) j * j i * j 這個式子,我們關心的是這個式子的單調性因此我們可以分別將i和j看作常數來對式子進行求導,可以得到 f(i) 2 * i 10…

Shell $0

個人博客地址&#xff1a;Shell $0 | 一張假鈔的真實世界 我們已經知道在Shell中$0表示Shell腳本的文件名&#xff0c;但在有腳本調用的情形中&#xff0c;子腳本中的$0會是什么值呢&#xff1f;我們通過下面的實例來看。 已測試系統列表&#xff1a; Mac OS X EI Capitan 1…

商品列表及商品詳情展示

前言 本文將展示一段結合 HTML、CSS 和 JavaScript 的代碼&#xff0c;實現了一個簡單的商品展示頁面及商品詳情&#xff0c;涵蓋數據獲取、渲染、搜索及排序等功能。 效果展示 點擊不同的商品會展示對應的商品詳情。 代碼部分 代碼總體實現 <!DOCTYPE html> <htm…

[ VS Code 插件開發 ] 使用 Task ( 任務 ) 代替 createTerminal (終端) 來執行命令

VSCode 官方自己的插件就是這樣執行命令的. 使用體驗 比 默認的終端 好太多了. 重用終端, Shell 集成 , 按任意鍵關閉, 任務是否成功, 左側命令操作 (菜單中功能很多) 等 import * as vscode from vscode; // 執行的命令 let command_str "npm run dev" // 工作目…

大模型綜述一鏡到底(全文八萬字) ——《Large Language Models: A Survey》

論文鏈接&#xff1a;https://arxiv.org/abs/2402.06196 摘要&#xff1a;自2022年11月ChatGPT發布以來&#xff0c;大語言模型&#xff08;LLMs&#xff09;因其在廣泛的自然語言任務上的強大性能而備受關注。正如縮放定律所預測的那樣&#xff0c;大語言模型通過在大量文本數…

Python處理數據庫:MySQL與SQLite詳解

Python處理數據庫&#xff1a;MySQL與SQLite詳解 在數據處理和存儲方面&#xff0c;數據庫扮演著至關重要的角色。Python提供了多種與數據庫交互的方式&#xff0c;其中pymysql庫用于連接和操作MySQL數據庫&#xff0c;而SQLite則是一種輕量級的嵌入式數據庫&#xff0c;Pytho…

【C++】B2124 判斷字符串是否為回文

博客主頁&#xff1a; [小????????] 本文專欄: C 文章目錄 &#x1f4af;前言&#x1f4af;題目描述輸入格式&#xff1a;輸出格式&#xff1a;樣例&#xff1a; &#x1f4af;方法一&#xff1a;我的第一種做法思路代碼實現解析 &#x1f4af;方法二&#xff1a;我…

ubuntuCUDA安裝

系列文章目錄 移動硬盤制作Ubuntu系統盤 前言 根據前篇“移動硬盤制作Ubuntu系統盤”安裝系統后&#xff0c;還不能夠使用顯卡。 如果需要使用顯卡&#xff0c;還需要進行相關驅動的安裝&#xff08;如使用的為Nvidia顯卡&#xff0c;就需要安裝相關的Nvidia顯卡驅動&#xff…

Selenium 使用指南:從入門到精通

Selenium 使用指南&#xff1a;從入門到精通 Selenium 是一個用于自動化 Web 瀏覽器操作的強大工具&#xff0c;廣泛應用于自動化測試和 Web 數據爬取中。本文將帶你從入門到精通地掌握 Selenium&#xff0c;涵蓋其基本操作、常用用法以及一個完整的圖片爬取示例。 1. 環境配…

Sqoop導入MySQL中含有回車換行符的數據

個人博客地址&#xff1a;Sqoop導入MySQL中含有回車換行符的數據 MySQL中的數據如下圖&#xff1a; 檢查HDFS上的目標文件內容可以看出&#xff0c;回車換行符位置的數據被截斷了&#xff0c;導致數據列錯位。 Sqoop提供了配置參數&#xff0c;在導入時丟棄掉數據的分隔符&…

利用matlab尋找矩陣中最大值及其位置

目錄 一、問題描述1.1 max函數用法1.2 MATLAB中 : : :的作用1.3 ind2sub函數用法 二、實現方法2.1 方法一&#xff1a;max和find2.2 方法二&#xff1a;max和ind2sub2.3 方法對比 三、參考文獻 一、問題描述 matlab中求最大值可使用函數max&#xff0c;對于一維向量&#xff0…

PyTorch數據建模

回歸分析 import torch import numpy as np import pandas as pd from torch.utils.data import DataLoader,TensorDataset import time strat = time.perf_counter()

機試題——字符匹配

題目描述 給你一個字符串數組&#xff08;每個字符串均由小寫字母組成&#xff09;和一個字符規律&#xff08;由小寫字母和 . 和 * 組成&#xff09;&#xff0c;識別數組中哪些字符串可以匹配到字符規律上。 . 匹配任意單個字符。* 匹配零個或多個前面的那一個元素。 所謂…

《 C++ 點滴漫談: 二十五 》空指針,隱秘而危險的殺手:程序崩潰的真兇就在你眼前!

摘要 本博客全面解析了 C 中指針與空值的相關知識&#xff0c;從基礎概念到現代 C 的改進展開&#xff0c;涵蓋了空指針的定義、表示方式、使用場景以及常見注意事項。同時&#xff0c;深入探討了 nullptr 的引入及智能指針在提升代碼安全性和簡化內存管理方面的優勢。通過實際…