如何在 Element UI 中優雅地使用 `this.$loading` 顯示和隱藏加載動畫

如何在 Element UI 中優雅地使用 this.$loading 顯示和隱藏加載動畫

在現代 Web 應用開發中,用戶體驗至關重要。當執行耗時操作(如網絡請求或數據處理)時,顯示一個友好的加載動畫可以讓用戶知道系統正在工作,而不是卡住了。Element UI 提供了一個非常方便的工具——this.$loading,用于顯示全局或局部的加載動畫。本文將詳細介紹如何在 Vue 組件中使用 this.$loading 來顯示和隱藏加載動畫,并提供實用的代碼示例。


1. 引言

在構建復雜的前端應用時,異步操作是不可避免的。無論是從服務器獲取數據還是進行大量計算,都需要一些時間來完成。為了提升用戶體驗,我們通常會在這些操作期間顯示一個加載動畫。Element UI 的 this.$loading 工具可以幫助我們輕松實現這一目標。接下來,我們將詳細介紹如何使用它。


2. 基本用法

顯示加載動畫

通過調用 this.$loading(options) 方法可以創建并顯示加載動畫。返回值是一個加載實例,可以通過該實例手動關閉加載動畫。

let loadingInstance = this.$loading({lock: true, // 是否鎖定屏幕text: '加載中...', // 顯示的文本spinner: 'el-icon-loading', // 自定義加載圖標background: 'rgba(0, 0, 0, 0.7)' // 背景遮罩顏色
});

隱藏加載動畫

可以通過調用加載實例的 close() 方法來關閉加載動畫。

loadingInstance.close();

3. 完整示例

以下是一個完整的示例,展示如何在 Vue 組件中使用 this.$loading 來顯示和隱藏加載動畫。

<template><div><el-button @click="startLoading">開始加載</el-button><el-button @click="stopLoading">停止加載</el-button></div>
</template><script>
export default {data() {return {loadingInstance: null // 存儲加載實例};},methods: {startLoading() {// 顯示加載動畫this.loadingInstance = this.$loading({lock: true,text: '拼命加載中...',spinner: 'el-icon-loading',background: 'rgba(0, 0, 0, 0.7)'});},stopLoading() {// 隱藏加載動畫if (this.loadingInstance) {this.loadingInstance.close();}}}
};
</script>

在這個示例中,我們創建了兩個按鈕:一個用于啟動加載動畫,另一個用于停止加載動畫。點擊“開始加載”按鈕后,會顯示一個帶有自定義文本和圖標的加載動畫;點擊“停止加載”按鈕則會關閉該動畫。


4. 關鍵點解析

(1) 參數配置

this.$loading 接受一個配置對象,常用的參數如下:

  • lock:是否鎖定屏幕,防止用戶交互。
  • text:加載提示文字。
  • spinner:自定義加載圖標,默認為 el-icon-loading
  • background:背景遮罩的顏色,支持透明度設置。

(2) 自動關閉

如果需要自動關閉加載動畫,可以結合 setTimeout 使用。例如:

startLoading() {this.loadingInstance = this.$loading({lock: true,text: '加載中...'});// 模擬異步操作后自動關閉setTimeout(() => {this.loadingInstance.close();}, 3000); // 3秒后自動關閉
}

(3) 局部加載

除了全局加載,還可以對某個 DOM 元素進行局部加載。只需在 options 中指定 target 即可。

let loadingInstance = this.$loading({target: document.querySelector('#local-element'), // 指定目標元素text: '局部加載中...'
});

5. 注意事項

避免重復創建

在調用 this.$loading 時,確保之前創建的加載實例已經關閉。否則可能會導致多個加載動畫疊加。可以在顯示新加載動畫前檢查是否存在舊實例,并手動關閉:

if (this.loadingInstance) {this.loadingInstance.close();
}

異步操作中的異常處理

在異步操作(如 API 請求)中使用加載動畫時,務必在 try-catchfinally 中關閉加載動畫,以防止因異常導致加載動畫無法關閉。

async fetchData() {let loadingInstance = this.$loading({ text: '加載中...' });try {await someAsyncOperation(); // 模擬異步操作} catch (error) {console.error('請求失敗', error);} finally {loadingInstance.close(); // 確保加載動畫關閉}
}

樣式覆蓋

如果默認的加載樣式不符合需求,可以通過 CSS 自定義樣式。例如:

.el-loading-spinner .el-loading-text {font-size: 16px;color: #fff;
}

6. 總結

通過 this.$loading,我們可以輕松實現全局或局部的加載動畫,從而提升用戶體驗。無論是簡單的按鈕點擊還是復雜的異步操作,都可以靈活地應用這一功能。如果你正在尋找一種優雅的方式來管理加載狀態,那么這篇文章提供的解決方案無疑是一個不錯的選擇。

希望本文能為你帶來啟發,并幫助你在實際開發中解決問題!如果有其他問題或想要了解更多優化技巧,請留言討論。


關注我獲取更多前端開發技巧和實戰經驗!


注:本文假設讀者已經具備一定的 Vue.js 和 Element UI 基礎知識。如果你對某個部分不太理解,歡迎留言討論!


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

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

相關文章

動態加載內容時selenium如何操作?

當處理動態加載的內容時&#xff0c;Selenium 是一個非常強大的工具&#xff0c;因為它可以模擬真實用戶的瀏覽器行為&#xff0c;等待頁面元素加載完成后再進行操作。以下是使用 Selenium 獲取動態加載內容的詳細步驟和代碼示例。 一、安裝 Selenium 和 ChromeDriver &#…

力扣第446場周賽

有事沒趕上, 賽后模擬了一下, 分享一下我的解題思路和做題感受 1.執行指令后的得分 題目鏈接如下&#xff1a;力扣 給你兩個數組&#xff1a;instructions 和 values&#xff0c;數組的長度均為 n。 你需要根據以下規則模擬一個過程&#xff1a; 從下標 i 0 的第一個指令開…

三維點擬合平面ransac c++

理論 平面的一般定義 在三維空間中&#xff0c;一個平面可以由兩個要素唯一確定&#xff1a; 法向量 n(a,b,c)&#xff1a;垂直于平面的方向 平面上一點 平面上任意一點 p(x,y,z) 滿足&#xff1a; ( p ? p 0 ) ? n 0 (p - p0) * n 0 (p?p0)?n0 即 a ( x ? x 0 ) …

基于LSTM-AutoEncoder的心電信號時間序列數據異常檢測(PyTorch版)

心電信號&#xff08;ECG&#xff09;的異常檢測對心血管疾病早期預警至關重要&#xff0c;但傳統方法面臨時序依賴建模不足與噪聲敏感等問題。本文使用一種基于LSTM-AutoEncoder的深度時序異常檢測框架&#xff0c;通過編碼器-解碼器結構捕捉心電信號的長期時空依賴特征&#…

Docker 部署 PostgreSQL 數據庫

Docker 部署 PostgreSQL 數據庫 基于 Docker 部署 PostgreSQL 數據庫一、拉取 PostgreSQL 鏡像二、運行 PostgreSQL 容器三、運行命令參數詳解四、查看容器運行狀態 基于 Docker 部署 PostgreSQL 數據庫 一、拉取 PostgreSQL 鏡像 首先&#xff0c;確保你的 Docker 環境已正確…

MySQL性能調優(四):MySQL的執行原理(MYSQL的查詢成本)

文章目錄 MySQL性能調優數據庫設計優化查詢優化配置參數調整硬件優化 1.MySQL的執行原理-21.1.MySQL的查詢成本1.1.1.什么是成本1.1.2.單表查詢的成本1.1.2.1.基于成本的優化步驟實戰1. 根據搜索條件&#xff0c;找出所有可能使用的索引2. 計算全表掃描的代價3. 計算使用不同索…

用 Go 優雅地清理 HTML 并抵御 XSS——Bluemonday

1、背景與動機 只要你的服務接收并回顯用戶生成內容&#xff08;UGC&#xff09;——論壇帖子、評論、富文本郵件正文、Markdown 等——就必須考慮 XSS&#xff08;Cross?Site Scripting&#xff09;攻擊風險。瀏覽器在解析 HTML 時會執行腳本&#xff1b;如果不做清理&#…

Redis SCAN 命令的詳細介紹

Redis SCAN 命令的詳細介紹 以下是 Redis SCAN? 命令的詳細介紹&#xff0c;結合其核心特性、使用場景及底層原理進行綜合說明&#xff1a; 工作原理圖 &#xff1a; ? 一、核心特性 非阻塞式迭代 通過游標&#xff08;Cursor&#xff09; 分批次遍歷鍵&#xff0c;避免一次…

SpringBoot3集成MyBatis-Plus(解決Boot2升級Boot3)

總結&#xff1a;目前升級僅發現依賴有變更&#xff0c;其他目前未發現&#xff0c;如有發現&#xff0c;后續會繼續更新 由于項目架構提升&#xff0c;以前開發的很多公共的組件&#xff0c;以及配置都需要升級&#xff0c;因此記錄需要更改的配置&#xff08;記錄時間&#…

基于mybatis與PageHelper插件實現條件分頁查詢(3.19)

實現商品分頁例子 需要先引入mybatis與pagehelper插件&#xff0c;在pom.xml里 <!-- Mybatis --> <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.3&l…

Spring Bean 全方位指南:從作用域、生命周期到自動配置詳解

目錄 1. Bean 的作用域 1.1 singleton 1.2 prototype 1.3 request 1.4 session 1.5 application 1.5.1 servletContext 和 applicationContext 區別 2. Bean 的生命周期 2.1 詳解初始化 2.1.1 Aware 接口回調 2.1.2 執行初始化方法 2.2 代碼示例 2.3 源碼 [面試題…

C++ (非類型參數)

模板除了定義類型參數之外&#xff0c;也可以在模板內定義非類型參數 非類型參數不是類型&#xff0c;而是值&#xff0c;比如&#xff1a;指針&#xff0c;整數&#xff0c;引用 非類型參數的用法&#xff1a; 1.整數常量&#xff1a;非類型參數最常見的形式是整數常量&…

短視頻+直播商城系統源碼全解析:音視頻流、商品組件邏輯剖析

時下&#xff0c;無論是依托私域流量運營的品牌方&#xff0c;還是追求用戶粘性與轉化率的內容創作者&#xff0c;搭建一套完整的短視頻直播商城系統源碼&#xff0c;已成為提升用戶體驗、增加商業變現能力的關鍵。本文將圍繞三大核心模塊——音視頻流技術架構、商品組件設計、…

5.QT-常用控件-QWidget|enabled|geometry|window frame(C++)

控件概述 實現圖形化界面的程序. Qt中已經給我們提供了很多的“控件" 就需要學習和了解這些控件&#xff0c;學會如何使用這些控件 編程講究的是“站在巨人的肩膀上”&#xff0c;而不是“從頭發明輪子" 一個圖形化界面上的內容&#xff0c;不需要咱們全都從零去實…

2025-04-22| Docker: --privileged參數詳解

在 Docker 中&#xff0c;--privileged 是一個運行容器時的標志&#xff0c;它賦予容器特權模式&#xff0c;大幅提升容器對宿主機資源的訪問權限。以下是 --privileged 的作用和相關細節&#xff1a; 作用 完全訪問宿主機的設備&#xff1a; 容器可以訪問宿主機的所有設備&am…

高性能服務器配置經驗指南1——剛配置好服務器應該做哪些事

文章目錄 安裝ubuntu安裝必要軟件設置用戶遠程連接安全問題ClamAV安裝教程步驟 1&#xff1a;更新系統軟件源步驟 2&#xff1a;升級系統&#xff08;可選但推薦&#xff09;步驟 3&#xff1a;安裝 ClamAV步驟 4&#xff1a;更新病毒庫步驟 5&#xff1a;驗證安裝ClamAV 常用命…

直流絕緣監測解決方案:保障工業與新能源系統的安全運行

一、引言 隨著工業自動化和新能源技術的快速發展&#xff0c;直流供電系統在光伏發電、儲能電站、電動汽車充電樁等領域的應用日益廣泛。然而&#xff0c;直流系統的正負極不接地&#xff08;IT系統&#xff09;特性&#xff0c;使得絕緣故障可能導致漏電、短路甚至設備損毀等…

VSCode 用于JAVA開發的環境配置,JDK為1.8版本時的配置

插件安裝 JAVA開發在VSCode中&#xff0c;需要安裝JAVA的必要開發。當前安裝只需要安裝 “Language Support for Java(TM) by Red Hat”插件即可 安裝此插件后&#xff0c;會自動安裝包含如下插件&#xff0c;不再需要單獨安裝 Project Manager for Java Test Runner for J…

C++入門語法

C入門 首先第一點&#xff0c;C中可以混用C語言中的語法。但是C語言是不兼容C的。C主要是為了改進C語言而創建的一門語言&#xff0c;就是有人用C語言用不爽了&#xff0c;改出來個C。 命名空間 c語言中會有如下這樣的問題&#xff1a; 那么C為了解決這個問題就整出了一個命名…

輸入框僅支持英文、特殊符號、全角自動轉半角 vue3

需求&#xff1a;封裝一個輸入框組件 1.只能輸入英文。 2.輸入的小寫英文自動轉大寫。 3.輸入的全角特殊符號自動轉半角特殊字符 效果圖 代碼 <script setup> import { defineEmits, defineModel, defineProps } from "vue"; import { debounce } from "…