HarmonyOS從入門到精通:動畫設計與實現之九 - 實用動畫案例詳解(下)

HarmonyOS動畫開發實戰(九):實用動畫案例詳解(下)

在上篇中,我們圍繞加載動畫、點贊反饋、下拉刷新等核心交互場景,探討了如何通過動畫提升用戶體驗。本篇將聚焦界面元素動效特殊場景動畫,涵蓋卡片懸停、導航指示器、頁面轉場等高頻場景,通過5個實戰案例詳解動畫設計的底層邏輯,助你打造更流暢、更具沉浸感的應用界面。

四、商品卡片懸停效果:讓界面“有呼吸感”

在電商、內容類應用中,卡片是承載信息的核心載體。為卡片添加精心設計的懸停動效,不僅能讓用戶直觀感知“可交互”狀態,更能通過細微的視覺變化增強界面的層次感與生命力。

功能解析

當用戶的鼠標(或觸摸操作)懸停在卡片上時,組件通過三重聯動變化強化交互反饋:

  • 微縮放:卡片以1.05倍比例輕微放大,營造“浮起”的空間感;
  • 陰影強化:陰影半徑從2px平滑過渡至8px,增強立體感與層次感;
  • 平滑過渡:所有視覺變化通過300ms緩動曲線銜接,避免突兀的狀態跳轉。

核心代碼解析

// 懸停狀態觸發邏輯
onMouseEnter(() => {this.hovered = true;this.scale = 1.05; // 觸發放大效果this.shadowRadius = 8; // 加深陰影
})onMouseLeave(() => {this.hovered = false;this.scale = 1; // 恢復原始尺寸this.shadowRadius = 2; // 還原陰影
})// 動畫過渡配置
.transition({property: 'scale', // 監聽縮放屬性變化duration: 300,curve: Curve.EaseOut // 先快后慢,模擬物理慣性
})
.transition({property: 'shadow', // 監聽陰影屬性變化duration: 300,curve: Curve.EaseOut
})

關鍵技術點

  • 屬性過渡機制:通過transitionAPI指定需要動畫的屬性(scaleshadow),實現“狀態變化即自動觸發動畫”,無需手動調用animateTo,大幅簡化代碼;
  • 陰影精細化設計:陰影顏色采用Color.Black.opacity(0.1),既保證立體感又避免視覺干擾;偏移量{ dx: 0, dy: 2 }模擬自然光照角度,增強真實感;
  • 多端交互適配onHoverEffect(EffectType.HoverLift)為觸摸設備提供基礎懸停反饋,確保在不同交互方式下的體驗一致性。

適用場景

電商商品卡片、資訊文章卡片、應用列表等“可點擊元素”,通過毫米級的視覺變化引導用戶交互,同時傳遞界面的“可操作性”。

五、滑動導航指示器:讓頁面切換“有方向感”

在多標簽頁界面(如首頁、分類、我的)中,導航指示器是用戶認知當前位置的“視覺錨點”。動態化的指示器不僅能讓標簽切換更流暢,更能通過運動軌跡減少用戶的“位置迷失感”。

功能解析

組件由兩部分構成協同工作:

  • 標簽欄:展示“首頁”“分類”等標簽文本,點擊時同步更新選中狀態;
  • 動態指示器:底部的藍色進度條,隨選中標簽變化實現“位置+寬度”的雙重平滑過渡,寬度自適應為標簽寬度的60%,確保視覺居中。

核心代碼解析

// 指示器位置與寬度計算邏輯
updateIndicator() {const tabWidth = 100 / this.tabs.length; // 單個標簽占父容器的百分比this.indicatorWidth = tabWidth * 0.6; // 指示器寬度=標簽寬度×60%// 位置計算:選中標簽索引×標簽寬度 + 標簽寬度×20%(實現水平居中)this.indicatorPosition = tabWidth * this.selectedIndex + tabWidth * 0.2;
}// 過渡動畫配置
.transition({property: 'all', // 同時監聽寬度與位置變化duration: 300,curve: Curve.EaseOut
})

關鍵技術點

  • 響應式布局計算:通過百分比動態計算寬度與位置,確保在不同屏幕尺寸下均能保持居中效果,適配多設備場景;
  • 聯動動畫機制:點擊標簽時觸發updateIndicator更新狀態,結合transition實現“位置+寬度”的同步動畫,避免分步變化的割裂感;
  • 初始狀態校準:在onAppear生命周期中調用updateIndicator,確保組件首次加載時指示器位置準確,避免初始偏移。

適用場景

底部導航欄、頂部標簽頁、分類切換等“多頁面切換”場景,通過動態指示器讓用戶清晰感知當前位置與切換軌跡,強化界面導航的引導性。

六、數字滾動動畫:讓數據變化“有敘事感”

當頁面加載關鍵數據(如銷量、粉絲數、評分)時,靜態展示往往難以吸引用戶注意。數字從0滾動到目標值的動畫,既能通過動態效果聚焦注意力,又能通過節奏變化強化“數據增長”的敘事感。

功能解析

頁面加載完成后,數字從0開始,通過2秒的滾動動畫逐步增長至目標值(如12345)。動畫速度遵循“先加速后減速”的自然規律,避免機械感,讓數據變化更具生命力。

核心代碼解析

// 數字滾動動畫核心邏輯
animateNumber(start: number, end: number, duration: number) {const startTime = Date.now(); // 記錄動畫啟動時間const frameDuration = 1000 / 60; // 60fps幀率,每幀約16.7msconst animate = () => {const elapsedTime = Date.now() - startTime; // 計算已流逝時間if (elapsedTime >= duration) {this.currentNumber = end; // 動畫結束,直接顯示目標值return;}// 緩動函數:三次方曲線(前半段加速,后半段減速)const progress = elapsedTime / duration;const easeProgress = progress < 0.5 ? 4 * progress * progress * progress // 前50%:加速階段: 1 - Math.pow(-2 * progress + 2, 3) / 2; // 后50%:減速階段// 計算當前幀應顯示的數字this.currentNumber = Math.floor(start + (end - start) * easeProgress);setTimeout(animate, frameDuration); // 遞歸觸發下一幀};animate();
}

關鍵技術點

  • 幀動畫精細化控制:通過setTimeout手動控制每幀更新,精確把控動畫節奏,確保數字變化的流暢度;
  • 緩動函數設計:采用三次方曲線(easeProgress)模擬自然運動規律,讓數字滾動先快后慢,避免勻速動畫的機械感;
  • 性能與體驗平衡:60fps的更新頻率兼顧流暢度與性能消耗;對于大數字(如10萬+),可通過降低精度(只顯示到千位)減少計算壓力。

適用場景

數據看板、個人主頁(粉絲數、獲贊數)、商品詳情(銷量、評價數)等需要突出數據價值的場景,通過動態滾動強化用戶對數據的感知與記憶。

七、消息通知動畫:讓提示“不打擾但被看見”

消息通知(如“操作成功”“新消息提醒”)的核心設計目標是:在不打斷用戶當前操作的前提下,高效傳遞信息。通過滑入滑出動畫,能讓通知的出現與消失更自然,既保證存在感又避免干擾。

功能解析

  • 觸發機制:通過按鈕點擊手動觸發通知展示;
  • 動畫全流程
    1. 滑入階段:從頂部屏幕外(-60px)平移至頂部固定位置(15px),同時透明度從0增至1(300ms);
    2. 停留階段:保持顯示狀態2秒,確保用戶有足夠時間閱讀;
    3. 滑出階段:從頂部位置平移回屏幕外,透明度從1減至0(300ms),完成自動隱藏。

核心代碼解析

// 通知動畫全流程控制(異步邏輯)
async playNotificationAnimation() {// 1. 滑入動畫await animateToPromise(300, () => {this.notificationOpacity = 1;this.notificationPosition = 15;});// 2. 停留2秒await new Promise(resolve => setTimeout(resolve, 2000));// 3. 滑出動畫await animateToPromise(300, () => {this.notificationOpacity = 0;this.notificationPosition = -60;});this.showNotification = false; // 動畫結束,隱藏組件
}// 將animateTo封裝為Promise,簡化異步流程
function animateToPromise(duration: number, action: () => void): Promise<void> {return new Promise(resolve => {animateTo({ duration, onFinish: resolve }, action);});
}

關鍵技術點

  • 異步流程串聯:通過Promiseasync/await將“滑入→停留→滑出”三個階段無縫串聯,邏輯清晰且易于維護;
  • 動畫封裝復用animateToPromise將回調式的animateTo轉換為Promise風格,簡化異步動畫的鏈式調用;
  • 視覺輕量化設計:通知采用半透明背景+柔和陰影,既保證辨識度又避免視覺壓迫;固定在頂部位置,減少對核心內容的遮擋。

適用場景

操作反饋(如“收藏成功”“提交完成”)、系統通知(如“版本更新提醒”)、即時消息提示等場景,在傳遞信息的同時最大限度減少對用戶操作的干擾。

八、頁面轉場動畫:讓跳轉“有連貫性”

頁面之間的跳轉若缺乏過渡,會導致界面體驗割裂。通過滑動轉場動畫,能讓用戶感知頁面切換的“方向邏輯”(如左滑進入下一頁),增強界面流程的連貫性與敘事感。

功能解析

  • 頁面結構:包含兩個頁面(頁面1、頁面2),通過按鈕觸發相互切換;
  • 轉場效果
    • 向前跳轉(頁面1→頁面2):當前頁向左滑出屏幕,下一頁從右側滑入;
    • 向后跳轉(頁面2→頁面1):當前頁向右滑出屏幕,上一頁從左側滑入;
    • 透明度聯動變化(0→1或1→0),強化前后頁的層次關系。

核心代碼解析

// 頁面轉場邏輯控制
transitionToPage(page: number) {const isForward = page > this.currentPage; // 判斷跳轉方向(向前/向后)// 重置初始狀態if (isForward) {this.leftPageOpacity = 1;this.leftPageTranslate = 0; // 當前頁初始在原位this.rightPageOpacity = 0;this.rightPageTranslate = 300; // 下一頁初始在右側外} else {this.leftPageOpacity = 0;this.leftPageTranslate = -300; // 上一頁初始在左側外this.rightPageOpacity = 1;this.rightPageTranslate = 0; // 當前頁初始在原位}// 執行轉場動畫animateTo({ duration: 400, curve: Curve.EaseInOut }, () => {if (isForward) {this.leftPageOpacity = 0;this.leftPageTranslate = -300; // 當前頁向左滑出this.rightPageOpacity = 1;this.rightPageTranslate = 0; // 下一頁滑入原位} else {this.leftPageOpacity = 1;this.leftPageTranslate = 0; // 上一頁滑入原位this.rightPageOpacity = 0;this.rightPageTranslate = 300; // 當前頁向右滑出}});this.currentPage = page; // 更新當前頁狀態
}

關鍵技術點

  • 雙頁疊加渲染:通過Stack容器將兩個頁面疊加渲染,避免跳轉過程中的空白期,保證視覺連貫性;
  • 方向感知動畫:通過isForward判斷跳轉方向,動態調整動畫參數,確保轉場方向與用戶預期一致;
  • 物理曲線模擬:采用Curve.EaseInOut緩動曲線,讓滑動過程呈現“先加速后減速”的物理特性,更接近真實世界的運動規律。

適用場景

多步驟表單、詳情頁跳轉、章節閱讀等需要“線性導航”的場景,通過轉場動畫強化頁面間的邏輯關系,讓用戶感知操作的“前后連貫性”。

九、水位上升動畫:用特殊動效“講故事”

除基礎交互外,動畫還能用于數據可視化與場景化展示(如水位預警、進度反饋)。水位動畫通過模擬波浪運動,能將抽象的“進度”轉化為生動的視覺敘事,增強用戶對數據的理解。

功能解析

  • 容器設計:矩形邊框模擬“水池”,提供明確的視覺邊界;
  • 水位動效:通過兩層透明度不同的波浪模擬水面,水位從0平滑上升至150px(3秒完成);
  • 波浪運動:波浪以2秒為周期左右擺動,通過相位差形成自然水紋效果,增強真實感。

核心代碼解析

// 水位上升動畫
animateTo({duration: 3000,curve: Curve.EaseOut // 先快后慢,模擬水的慣性特性
}, () => {this.waterLevel = 150; // 目標水位高度
});// 波浪擺動動畫(無限循環)
animateTo({duration: 2000,curve: Curve.Linear,iterations: -1
}, () => {this.waveOffset = Math.PI * 2; // 波動周期為2π(360°)
});// 波浪路徑繪制(貝塞爾曲線模擬自然波浪)
Path().moveTo(0, 100).cubicCurveTo(30, 105 + Math.sin(this.waveOffset) * 5, // 控制點1:隨waveOffset波動60, 95 + Math.sin(this.waveOffset + Math.PI) * 5, // 控制點2:反相波動120, 100 + Math.sin(this.waveOffset + Math.PI * 2) * 5 // 終點).lineTo(120, 200).lineTo(0, 200).close().fill('#3478f6'.opacity(0.5))

關鍵技術點

  • 波浪形態模擬:使用cubicCurveTo繪制貝塞爾曲線,結合Math.sin函數生成周期性波動,精準模擬波浪形態;
  • 雙層波浪疊加:兩層波浪通過相位差(waveOffsetwaveOffset + Math.PI)形成錯落感,更接近真實水面的復雜運動;
  • 水位動態控制:通過translate({ y: 200 - this.waterLevel })動態調整波浪垂直位置,直觀呈現水位上升過程。

適用場景

進度展示(如下載進度、任務完成度)、數據可視化(如降雨量、水位監測)、游戲場景(如水位上漲關卡)等需要“動態場景化展示”的場景,讓抽象數據轉化為直觀的視覺敘事。

十、卡片翻轉動畫:用3D效果增強“交互深度”

卡片翻轉是一種富有層次感的交互方式,通過模擬真實世界的“翻牌”動作,能讓用戶直觀感知“正反兩面”的信息關聯(如卡片正面是封面,背面是詳情),增強交互的沉浸感。

功能解析

  • 卡片結構:包含正面(藍色)與背面(紅色)兩個視覺層;
  • 翻轉效果:點擊卡片后,繞Y軸完成180°旋轉,同時通過透明度切換(正面從1→0,背面從0→1)實現“正反面交替顯示”,模擬真實3D翻轉體驗。

核心代碼解析

// 翻轉動畫邏輯
flipCard() {animateTo({duration: 500,curve: Curve.EaseInOut}, () => {// 旋轉角度:0→180°(翻轉)或180°→0°(還原)this.rotationY = this.isFlipped ? 0 : 180;});this.isFlipped = !this.isFlipped;
}// 正面卡片(旋轉角度≤90°時可見)
.opacity(this.rotationY <= 90 ? 1 : 0)
.rotate({ y: this.rotationY })// 背面卡片(旋轉角度≥90°時可見,初始旋轉180°)
.opacity(this.rotationY >= 90 ? 1 : 0)
.rotate({ y: this.rotationY + 180 })

關鍵技術點

  • 3D空間旋轉:通過rotate({ y: rotationY })實現繞Y軸的3D旋轉,突破平面限制,增強交互的空間感;
  • 透明度無縫切換:在旋轉至90°(垂直于視線)時完成透明度切換,避免正反面同時可見的視覺混亂;
  • 視覺一致性校準:背面初始旋轉180°,確保翻轉后內容方向與用戶預期一致,避免“倒置”的違和感。

適用場景

卡片式詳情(如名片正面是頭像,背面是聯系方式)、問答交互(正面問題,背面答案)、游戲卡牌等需要“雙面信息展示”的場景,通過3D翻轉強化信息的關聯性與交互的趣味性。

總結:HarmonyOS動畫開發的核心原則

通過以上10個實戰案例,我們可以提煉出HarmonyOS動畫開發的核心思路,幫助你在實際開發中平衡效果與體驗:

  1. 以用戶體驗為導向:動畫的本質是“解決問題”——或緩解等待焦慮,或強化交互反饋,或引導用戶注意力,避免為“動畫而動畫”的炫技式設計;
  2. 性能與效果平衡:優先使用transition等聲明式動畫(性能更優),避免大量粒子、高頻幀動畫等過度消耗資源的設計;對大數字、復雜路徑等場景,可通過降低精度減少計算壓力;
  3. 細節決定體驗質感:緩動曲線的選擇(如EaseOut模擬自然慣性)、動畫時長的控制(短交互300ms內,長流程1-3秒)、視覺元素的一致性(顏色、尺寸與整體設計統一),共同決定動畫的“精致度”;
  4. 復用與擴展性設計:通過組件封裝(如SlidingIndicator)、配置參數暴露(如setRefreshCallback),提升代碼可維護性,適應不同場景的復用需求。

合理運用這些動畫技巧,能讓你的HarmonyOS應用從“功能可用”升級為“體驗出色”,在細節處彰顯產品的品質感與設計溫度。

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

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

相關文章

Node.js 聊天內容加密解密實戰教程(含緩存密鑰優化)

一、技術方案說明 本方案采用以下技術組合&#xff1a; 加密算法&#xff1a;AES-256-GCM&#xff08;認證加密&#xff0c;防止篡改&#xff09;密鑰派生&#xff1a;PBKDF2&#xff08;10萬次迭代&#xff09;緩存機制&#xff1a;內存緩存 定期輪換安全特性&#xff1a;隨機…

信息安全基礎專業面試知識點(上:密碼學與軟件安全)

密碼學DES加密流程56比特長度的密鑰K, 分組長度64比特&#xff0c;密文64比特初始置換 (IP)&#xff1a;將輸入的64位明文塊進行置換&#xff0c;打亂其順序。分成左右兩半: 將置換后的64位數據分成左右兩部分&#xff0c;每部分32位。16輪迭代加密: 這是DES的核心&#xff0c…

Windows Server 2025 黃金dMSA攻擊漏洞:跨域攻擊與持久化訪問風險分析

網絡安全研究人員近日披露了Windows Server 2025中委托管理服務賬戶&#xff08;dMSA&#xff0c;Delegated Managed Service Accounts&#xff09;存在的"關鍵設計缺陷"。據Semperis公司向The Hacker News提供的報告顯示&#xff1a;"該漏洞可能導致高危害攻擊…

解鎖數據分析:從基礎概念到核心指標的全面指南

在數字化時代&#xff0c;數據已成為驅動業務決策的核心力量。無論是運營一款 APP、管理一家便利店&#xff0c;還是優化在線教育課程&#xff0c;理解數據的本質與關鍵指標都至關重要。本文將從數據的基本概念出發&#xff0c;拆解運營全流程中的核心指標&#xff0c;并分享數…

DiffPy-CMI詳細安裝教程

本章教程,主要記錄安裝DiffPy-CMI的具體安裝步驟。 DiffPy-CMI 是一個復雜建模框架,是高度靈活的 Python 模塊庫,專為晶體、納米材料及非晶態材料的納米結構建模而設計。 注意:DiffPy-CMI只支持在Linux和Mac上安裝,Windows上是不支持的。 一、準備工作 需要準備一臺Linux或…

中國各省市縣坡度數據(Tif/Excel)

數據簡介 昨天我們分享了中國120m精度的DEM數據(見前文)&#xff0c;今天我們根據該數據計算中國的坡度數據&#xff0c;并根據中國省市縣行政區劃數據將其統計各省市縣坡度的最大、最小以及平均值&#xff0c;方便大家研究使用。 基于中國120米精度DEM生成的坡度數據&#xff…

09-three.js Materials

Three.js Journey — Learn WebGL with Three.jsThe ultimate Three.js course whether you are a beginner or a more advanced developerhttps://threejs-journey.com/?cp3 MeshBasicMaterial 添加3個網格體&#xff1a; /*** Object*/ // MashBasicMaterial const mater…

Netty介紹和基本代碼演示

什么是Netty&#xff1f;Netty是一個基于Java NIO的異步事件驅動的網絡應用框架&#xff0c;主要用于快速開發高性能、高可靠性的網絡服務器和客戶端程序。它簡化了網絡編程的復雜性&#xff0c;提供了豐富的協議支持&#xff0c;被廣泛應用于各種高性能網絡應用中。為什么選擇…

[BrowserOS] Nxtscape瀏覽器核心 | 瀏覽器狀態管理 | 瀏覽器交互層

第三章&#xff1a;Nxtscape瀏覽器核心 歡迎回來&#xff01; 在前兩章中&#xff0c;我們了解了名為專用AI代理的專家團隊及其管理者AI代理協調器&#xff0c;它們協同解析需求并規劃執行步驟。 但這些代理與協調器實際運行的平臺是什么&#xff1f;答案正是本章的核心——…

時序數據庫處理的時序數據獨特特性解析

時序數據&#xff08;Time-Series Data&#xff09;作為大數據時代增長最快的數據類型之一&#xff0c;正在物聯網、金融科技、工業監控等領域產生爆炸式增長。與傳統數據相比&#xff0c;時序數據具有一系列獨特特性&#xff0c;這些特性直接影響了時序數據庫&#xff08;Time…

uniapp各端通過webview實現互相通信

目前網上&#xff0c;包括官方文檔針對uniapp的webview的內容都是基于vue2的&#xff0c;此文章基于vue3的composition API方式網頁對網頁 由于uniapp中的webview只支持引入h5頁面&#xff0c;不支持互相通信&#xff0c;所以要條件編譯&#xff0c;用iframe導入頁面&#xf…

【Vue】tailwindcss + ant-design-vue + vue-cropper 圖片裁剪功能(解決遇到的坑)

1.安裝 vue-cropper pnpm add vue-cropper1.1.12.使用 vue-cropper <template><div class"user-info-head" click"editCropper()"><img :src"options.img" title"點擊上傳頭像" class"img-circle" /><…

【Java】【力扣】101.對稱二叉樹

思路遞歸大問題&#xff1a;對比 左 右 是否對稱參數 左和右todo 先湊合看代碼/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* …

前端 oidc-client 靜默刷新一直提示:Error: Frame window timed out 問題分析與解決方案

引言 在現代前端開發中&#xff0c;OAuth 2.0 和 OpenID Connect (OIDC) 協議已成為身份驗證和授權的標準解決方案。oidc-client-js 是一個流行的 JavaScript 庫&#xff0c;用于在前端應用中實現 OIDC 協議。其中&#xff0c;靜默刷新&#xff08;Silent Renew&#xff09;是一…

DAY02:【ML 第一彈】KNN算法

一、算法簡介 1.1 算法思想 如果一個樣本在特征空間中的 k 個最相似的樣本中的大多數屬于某一個類別&#xff0c;則該樣本也屬于這個類別。 1.2 樣本相似性 樣本都是屬于一個任務數據集的&#xff0c;樣本距離越近則越相似。 二維平面上點的歐氏距離 二維平面上點 a(x1,y1)a(x_…

wpf 實現窗口點擊關閉按鈕時 ??隱藏?? 而不是真正關閉,并且只有當 ??父窗口關閉時才真正退出?? 、父子窗口順序控制與資源安全釋放?

文章目錄實現方法**方法 &#xff1a;重寫 OnClosing 方法****子窗口&#xff08;SettingView&#xff09;代碼****父窗口&#xff08;MainWindow&#xff09;代碼****關鍵點****適用場景**為什么if (Owner null || !Owner.IsLoaded)能夠判斷父窗口已經關閉**1. Owner null 檢…

硬件設計學習DAY4——電源完整性設計:從概念到實戰

每日更新教程&#xff0c;評論區答疑解惑&#xff0c;小白也能變大神&#xff01;" 目錄 一.電源完整性 1.1電源完整性的核心概念 1.2電源完整性的三個關鍵目標 1.3地彈現象的通俗解釋 1.4總結要點 二.電源分配網絡&#xff08;PDN&#xff09;的作用 電源與GND網絡…

QT跨平臺應用程序開發框架(8)—— 多元素控件

目錄 一&#xff0c;關于多元素控件 二&#xff0c;QListWidget 2.1 主要方法 2.2 實現新增刪除 三&#xff0c;Table Widget 3.1 主要方法 3.2 代碼演示 四&#xff0c;Tree Widget 4.1 主要方法 4.2 代碼演示 一&#xff0c;關于多元素控件 多元素控件就是一個控件里面包含了…

【React Native】環境變量和封裝 fetch

環境變量和封裝fetch 環境變量 一般做開發&#xff0c;都會將接口地址配置到環境變量里。在Expo建的項目里&#xff0c;也可以使用環境變量。 在項目根目錄新建一個.env文件&#xff0c;里面添加上&#xff1a; EXPO_PUBLIC_API_URLhttp://localhost:3000如果你用手機真機等…

Linux 基礎命令詳解:從入門到實踐(1)

Linux 基礎命令詳解&#xff1a;從入門到實踐&#xff08;1&#xff09; 前言 在 Linux 操作系統中&#xff0c;命令行是高效管理系統、操作文件的核心工具。無論是開發者、運維工程師還是Linux愛好者&#xff0c;掌握基礎命令都是入門的第一步。本文將圍繞Linux命令的結構和常…