Vue3 實戰:打造多功能旅游攻略選項卡頁面

在旅游類應用開發中,為用戶提供全面、直觀的信息展示界面至關重要。本文將分享如何基于 Vue3 + Axios 技術棧,實現一個包含攻略、游記、問答三大板塊的旅游攻略選項卡頁面,從樣式設計到交互邏輯,帶你深入了解整個開發過程。

項目背景與需求分析

隨著旅游行業的數字化轉型,用戶對于景區信息獲取的需求日益多樣化。游客不僅希望了解景區的游玩攻略、動物分布,還想查看其他游客的真實游記以及專業問答。因此,需要構建一個集多類型內容展示、交互跳轉于一體的頁面,通過選項卡形式高效組織信息,提升用戶體驗。

技術棧解析

  1. Vue3:采用 Vue3 的響應式系統和組合式 API,簡化組件邏輯,提高開發效率和代碼可讀性。
  2. Axios:用于發起 HTTP 請求,從后端接口獲取攻略、游記、問答等數據。
  3. CSS3:利用現代 CSS 特性實現美觀的樣式布局和交互效果。

代碼實現詳解

1. 樣式設計(<style scoped>部分)

* {margin: 0;padding: 0;box-sizing: border-box;
}
.container {width: 100%;
}
.tabs {width: 100%;display: flex;position: relative;height: 50px;background-color: white;
}
.tabs_label {width: 33.33%;text-align: center;line-height: 50px;cursor: pointer;height: 50px;transition: color 0.3s;
}
.tabs_label.active {color: red;font-weight: bold;
}
.line {width: 10%;height: 3px;position: absolute;bottom: 0;background-color: red;
}
.tab-content {min-height: 200px;
}

通過*選擇器重置瀏覽器默認樣式,使用box-sizing: border-box確保元素尺寸計算更符合預期。.tabs容器作為選項卡導航欄,采用 Flex 布局實現標簽橫向排列。.tabs_label定義標簽樣式,通過:active類控制選中狀態下的顏色和加粗效果,底部的.line用于實現切換時的紅色指示線動畫。?

.start_panda {width: 96%;height: 310px;margin-left: 2%;margin-top: 10px;background-color: white;border-radius: 10px;box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
}
.start_img {width: 100%;height: 200px;border-radius: 10px 10px 0 0;object-fit: cover;
}

攻略板塊的樣式中,.start_panda定義攻略卡片整體樣式,通過box-shadow添加陰影效果增強立體感;.start_img確保圖片在卡片頂部完整展示且保持圓角效果。?

.product_list {margin-top: 2%;column-count: 2;column-gap: 10px;flex-wrap: wrap;padding: 10px;gap: 10px;
}
.product_item {break-inside: avoid;margin-bottom: 10px;background-color: #ffffff;border-radius: 5px;
}

游記板塊使用column-count實現多列布局,提升頁面空間利用率,同時通過break-inside: avoid避免卡片內容在列中斷開,保持展示完整性。?

.answers_box {width: 100%;height: 150px;background-color: white;display: flex;justify-content: space-between;border-bottom: 1px solid #e5e5e5;
}

問答板塊的.answers_box采用 Flex 布局,使每個問答項內的元素橫向排列且兩端對齊,通過底部邊框實現問答項之間的視覺分隔。?

2. 模板搭建(<template>部分)?

<template><div class="container"><!-- 選項卡導航 --><div class="tabs"><div class="tabs_label" :class="{ active: activeTab ==='strategy' }" @click="switchTab('strategy')">攻略</div><div class="tabs_label" :class="{ active: activeTab === 'travelNotes' }" @click="switchTab('travelNotes')">游記</div><div class="tabs_label" :class="{ active: activeTab === 'qna' }" @click="switchTab('qna')">問答</div><!-- 底部指示線 --><div class="line" :style="lineStyle"></div></div><!-- 內容區域 --><div class="content"><!-- 攻略的內容區域 --><div v-show="activeTab ==='strategy'" class="tab-content"><!-- 具體攻略內容 --></div><!-- 游記的內容區域 --><div v-show="activeTab === 'travelNotes'" class="tab-content"><!-- 具體游記內容 --></div><!-- 問答的內容區域 --><div v-show="activeTab === 'qna'" class="tab-content"><!-- 具體問答內容 --></div></div></div>
</template>

模板部分通過v-show指令根據activeTab的值控制不同板塊的顯示與隱藏。選項卡標簽綁定click事件,觸發switchTab方法切換當前選中項,底部指示線通過:style綁定計算屬性lineStyle,實現平滑的動畫切換效果。?

3. 邏輯實現(<script setup>部分)?

import { ref, computed } from 'vue';
import axios from "axios";
import { useRouter } from "vue-router";
const router = useRouter();const data = ref(null);
const res_data = ref(null);
const queans_data = ref(null);// 選項卡切換狀態
const activeTab = ref('strategy');
const lineStyle = computed(() => {const positions = {'strategy': '11.5%','travelNotes': '44.5%','qna': '77.5%'};return {left: positions[activeTab.value],transition: 'left 0.3s ease-in-out'};
});
function switchTab(tabName) {activeTab.value = tabName;
}

在 Vue3 的組合式 API 中,使用ref定義響應式數據存儲接口返回的數據和選項卡狀態。computed計算屬性lineStyle根據當前選中的選項卡動態計算指示線的位置,實現動畫切換。switchTab方法用于更新activeTab的值,觸發視圖更新。?

// 發送axios請求
axios({method: "post",url: "/app/intro/index",data: {scenic_id: 2,},
}).then((res) => {console.log(res.data.data);data.value = res.data.data;}).catch((err) => {console.log(err);});// 請求游記列表的接口
axios({method: "post",url: "/app/Travels/index",
}).then((res) => {console.log(res.data.data);res_data.value = res.data.data;}).catch((err) => {console.log(err);});// 請求問答列表的接口
axios({method: "post",url: "/app/Queans/index",
}).then((res) => {console.log(res.data.data);queans_data.value = res.data.data;}).catch((err) => {console.log(err);})

通過 Axios 分別向后端三個接口發起 POST 請求,獲取攻略、游記、問答數據,并將響應數據存儲到對應的ref變量中,驅動頁面數據渲染。?

// 修改后的跳轉函數,接收item參數
const goToDetail = (item) => {router.push({name: "details_page",params: { id: item.id }});console.log(item.id);sessionStorage.setItem('intro_data', JSON.stringify(item));sessionStorage.setItem('intro_id', item.id);
}

goToDetail函數實現點擊具體內容項跳轉到詳情頁的功能,將當前項的 ID 作為路由參數傳遞,并將相關數據存儲到sessionStorage中,方便詳情頁獲取和展示。?

效果展示與優化建議

最終實現的頁面,選項卡切換流暢,各板塊數據展示清晰。后續可從以下方向優化:

  1. 性能優化:對圖片進行懶加載處理,減少頁面初始加載時間;對接口請求添加防抖或節流,避免頻繁請求。
  2. 交互增強:在選項卡切換時添加更豐富的過渡動畫,優化移動端觸摸交互體驗。
  3. 數據處理:增加數據緩存機制,避免重復請求相同數據;對接口返回數據進行更嚴格的格式校驗和錯誤處理。

通過以上步驟,我們成功構建了一個功能完備、界面美觀的旅游攻略選項卡頁面。希望本文能為你的 Vue3 項目開發提供實用參考,助力打造更優質的用戶體驗

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

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

相關文章

JavaScript性能優化實戰(1):性能優化基礎與性能分析工具

性能優化的重要性與業務價值 在當今競爭激烈的互聯網環境中,網站和應用的性能已成為用戶體驗和業務成功的關鍵因素。研究表明,頁面加載時間每增加1秒,轉化率可能下降7%,而53%的用戶會在頁面加載時間超過3秒后放棄訪問。這些數據直接揭示了性能優化對業務的巨大影響: 用戶…

Unity 腳本使用(二)——UnityEngine.AI——NavMesh

描述 Singleton class 用于訪問被烘培好的 NavMesh. 使用NavMesh類可以執行空間查詢&#xff08;spatial queries&#xff09;&#xff0c;例如路徑查找和可步行性測試。此類還允許您設置特定區域類型的尋路成本&#xff0c;并調整尋路和避免的全局行為。 靜態屬性&#xff0…

Java 靜態內部類面試題與高質量答案合集

本文整理了關于 Java 靜態內部類&#xff08;Static Nested Class&#xff09;在面試中的高頻問題及標準答案&#xff0c;幫助你理解其底層原理、內存表現以及實際應用。 1. 什么是靜態內部類&#xff1f;和普通內部類有什么區別&#xff1f; 答&#xff1a; 靜態內部類是定義…

為什么買不到一定阻抗特性曲線的磁環

為什么買不到一定阻抗特性曲線的磁環&#xff1a; 磁環繞不同的圈數&#xff0c;阻抗特性曲線不同&#xff0c;磁環沒有類似于磁珠的特定頻率和阻抗特性曲線的磁環。 磁環與磁珠的核心區別&#xff1a; 磁珠是一種固定頻率阻抗器件&#xff0c;出廠時已通過材料和工藝設計確定…

【MATLAB海洋專題】歷史匯總

【MATLAB海洋專題】歷史匯總 目錄 01&#xff1a;海洋專題進階教學 02&#xff1a;海洋數據處理 03&#xff1a;海洋數據下載 04&#xff1a;海洋配色 05&#xff1a;海洋專題基礎教學 06: 其他基礎畫圖 07&#xff1a;python 畫海圖專題 08&#xff1a;模式相關文件制作 01…

數據倉庫ODS、DWD、DWS、ADS各層介紹

數據倉庫Data warehouse&#xff08;可簡寫為DW或者DWH&#xff09;建設的目的&#xff0c;是為前端查詢和分析作為基礎&#xff0c;主要應用于OLAP&#xff08;on-line Analytical Processing&#xff09;&#xff0c;支持復雜的分析操作&#xff0c;側重決策支持&#xff0c;…

動態提示詞(小模型)、RAG和提示詞系統

動態提示詞(小模型)、RAG和提示詞系統 目錄 動態提示詞(小模型)、RAG和提示詞系統小模型方案:動態提示詞基于規則的動態提示詞生成基于模板的動態提示詞生成基于小模型的動態提示詞生成基于強化學習的動態提示詞生成基于元學習的動態提示詞生成動態提示詞(小模型)RAG(檢…

并發設計模式實戰系列(3):工作隊列

&#x1f31f; ?大家好&#xff0c;我是摘星&#xff01;? &#x1f31f; 今天為大家帶來的是并發設計模式實戰系列&#xff0c;第三章工作隊列&#xff08;Work Queue&#xff09;??&#xff0c;廢話不多說直接開始~ 目錄 一、核心原理深度拆解 1. 生產者-消費者架構 …

云賬號安全事件應急響應指南:應對來自中國IP的異常訪問

在當今數字化時代,云服務已成為企業IT基礎設施的核心。然而,隨之而來的安全挑戰也日益突出。本文將詳細介紹當發現云賬號被來自中國的IP地址異常利用時,應如何快速有效地響應,以確保賬戶安全并最小化潛在風險。 1. 確認異常活動 首先,我們需要確認是否真的發生了安全事件…

三網通電玩城平臺系統結構與源碼工程詳解(五):客戶端熱更機制與多端資源分發流程

本篇將聚焦三網通平臺在多客戶端部署中的資源熱更機制設計、跨平臺同步策略、版本控制與前端資源發布管理&#xff0c;幫助開發者搭建高效穩定的資源更新系統。 一、資源分發平臺架構 為實現安卓端、iOS端、PC端的統一更新分發&#xff0c;平臺采用 Node.js Express 構建資源…

spark和hadoop的區別

一、spark概述 二、處理速度 三、 編程模型 四、實時性處理 五、spark內置模塊 六、spark的運行模式

AI寫代碼之GO+Python寫個爬蟲系統

下面我們我們來利用AI&#xff0c;來用GOPython寫個爬蟲系統。 幫我寫一個Python語言爬取數據寫入Mysql的案例&#xff0c;信息如下&#xff1a; 1、Mysql數據庫地址是&#xff1a;192.168.1.20 &#xff0c;mysql用戶名是&#xff1a;root&#xff0c; Mysql密碼是&#xff1…

從單模態到多模態:深度生成模型的演進歷程

在人工智能領域&#xff0c;生成模型的發展一直是研究熱點。從最早的自編碼器到如今的多模態擴散模型&#xff0c;這一技術路線不斷突破&#xff0c;為創意內容生成、數據增強和表示學習等領域帶來革命性變化。本文將詳細介紹幾種關鍵生成模型的技術原理和演進路徑&#xff0c;…

【系統架構設計師】嵌入式微處理器

目錄 1. 說明2. 微處理器(MPU)3. 微控制器(MCU)4. 信號處理器(DSP)5. 圖形處理器(GPU)6. 片上系統(SoC)7. 例題7.1 例題1 1. 說明 1.嵌入式微處理器主要用于處理相關任務。2.由于嵌入式系統通常都在室外使用&#xff0c;可能處于不同環境&#xff0c;因此&#xff0c;選擇處理…

Cursor Free VIP 重置進程錯誤,輕松恢復使用!

快速修復 Cursor Free VIP 重置進程錯誤&#xff0c;輕松恢復使用&#xff01; 在使用 Cursor Free VIP 的過程中&#xff0c;突然遭遇 “重置進程錯誤” 是不是讓你手忙腳亂&#xff1f;當屏幕彈出 “文件未找到: C:\Users\用戶\AppData\Local\Programs\Cursor\resources\app…

dolphinscheduler實現(oracle-hdfs-doris)數據ETL

dolphinscheduler執行 完整腳本(自行替換相關變量)配置文件conf配置文件解析腳本轉base64腳本 完整腳本(自行替換相關變量) user_olsh conf/getInfo.sh Oracle user conf/databases.conf password_olsh conf/getInfo.sh Oracle password conf/databases.conf dblink_olsh conf…

小小矩陣設計

在電氣設計圖中&#xff0c;矩陣設計的接線方法是通過結構化布局實現多靈活鏈接的技術&#xff0c;常用于信號切換、配電調壓或更加復雜的控制場景。 今天聊一種在電氣圖紙中用到的一種簡單矩陣接法&#xff0c;一眼就看明白&#xff0c;很大程度簡化了程序控制點和繼電器的使用…

【音視頻】FFmpeg解封裝

解封裝 復用器&#xff0c;比如MP4/FLV 解復用器&#xff0c;MP4/FLV 封裝格式相關函數 avformat_alloc_context(); 負責申請一個AVFormatContext結構的內存,并進行簡單初始化avformat_free_context(); 釋放該結構里的所有東西以及該結構本身avformat_close_input();關閉解復…

1??5??three.js_GUI輔助調試器

15、GUI輔助調試器 3D虛擬工廠在線體驗 GUI輔助調試器將原本需要修改代碼調整參數并刷新頁面的操作&#xff0c;簡化為直接在GUI中實時調整&#xff0c;實現所見即所得的效果。 導入GUI 庫 //引入GUI輔助調試器 import { GUI } from three/addons/libs/lil-gui.module.min.js…

Redis 的指令執行方式:Pipeline、事務與 Lua 腳本的對比

Pipeline 客戶端將多條命令打包發送&#xff0c;服務器順序執行并一次性返回所有結果。可以減少網絡往返延遲&#xff08;RTT&#xff09;以提升吞吐量。 需要注意的是&#xff0c;Pipeline 中的命令按順序執行&#xff0c;但中間可能被其他客戶端的命令打斷。 典型場景&…