Vue 實現文章錨點定位,頂欄遮住了錨點,使用scrollTo代替scrollIntoView設置偏移量

在Vue中實現文章錨點功能,可以通過監聽滾動事件來更新當前錨點的狀態。以下是一個簡單的示例:

<template><div><div :id="'anchor-' + index" v-for="(section, index) in sections" :key="index">{{ section.title }}</div><ul class="nav nav-pills"><li v-for="(section, index) in sections" :key="index"><p @click="scrollToAnchor(index)" :style="{ color: (activeAnchor === index)?'red':'black' }">{{ section.title }}</p></li></ul></div>
</template>
<script>
export default {data() {return {activeAnchor: 0,sections: [{ title: 'Section 1' },{ title: 'Section 2' },{ title: 'Section 3' },// ...],};},mounted() {window.addEventListener('scroll', this.updateActiveAnchor);this.updateActiveAnchor(); // 初始調用以設置初始活動錨點},beforeDestroy() {window.removeEventListener('scroll', this.updateActiveAnchor);},methods: {//滾動到錨點位置scrollToAnchor(index) {const anchorElement = document.getElementById('anchor-' + index);if (anchorElement) {//anchorElement.scrollIntoView({ behavior: 'smooth' }); 頂欄遮住了錨點const fixedBarHeight = 63; // 假設頂欄高度pxwindow.scrollTo({top: anchorElement.offsetTop - fixedBarHeight,behavior: 'smooth'});}},//根據屏幕滾動,顯示當前活動錨點updateActiveAnchor() {this.sections.forEach((section, index) => {const element = document.getElementById('anchor-' + index);const fixedBarHeight = 63; // 假設頂欄高度是pxif (element && window.scrollY >= element.offsetTop-fixedBarHeight) {this.activeAnchor = index;}});},},
};
</script>

在這個示例中,我們定義了一個sections數組來表示文章的不同部分。每個部分都有其對應的標題和唯一的ID。我們還維護了一個activeAnchor狀態,它表示當前活動錨點的索引。

在模板中,我們使用v-for來遍歷sections數組,并為每個部分創建一個可以滾動到的div元素。我們還創建了一個導航列表,其中包含了所有錨點的鏈接,并使用active類來表示當前活動的錨點。

在mounted鉤子中,我們添加了一個事件監聽器來監聽滾動事件,并調用updateActiveAnchor方法來更新當前活動的錨點。在beforeDestroy鉤子中,我們移除了這個事件監聽器。

scrollToAnchor方法接收一個索引,并滾動到對應的錨點。updateActiveAnchor方法遍歷所有錨點,并根據當前窗口的滾動位置來設置activeAnchor的值。

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

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

相關文章

React和Vue.js的相似性和差異性是什么?

React 和 Vue.js 都是流行的前端 JavaScript 框架&#xff0c;它們有一些相似性和差異性&#xff1a; 相似性&#xff1a; 組件化&#xff1a;React 和 Vue.js 都支持組件化開發&#xff0c;允許開發者將界面拆分為獨立的組件&#xff0c;提高代碼的復用性和可維護性。…

學習小記-Kafka相較于其他MQ有啥優勢?

Kafka 相比于 RocketMQ 有以下幾個優勢&#xff1a; 1. 高吞吐量和低延遲&#xff1a; Kafka 以其出色的 I/O 性能和分布式架構設計&#xff0c;能夠實現極高的吞吐量&#xff0c;每秒數百萬的消息處理能力&#xff0c;適合大規模數據流處理。同時&#xff0c;Kafka 設計為…

pycharm2020 相比pycarm2017更新內容

PyCharm 是 JetBrains 開發的一款流行的 Python 集成開發環境&#xff08;IDE&#xff09;。從 2017 版到 2020 版&#xff0c;PyCharm 進行了多個版本的更新&#xff0c;添加了許多新功能和改進。以下是一些主要的更新內容和改進&#xff1a; PyCharm 2018 和 2019 的主要更新…

vault安裝手冊

標準配置文件 ui true cluster_addr "https://127.0.0.1:8201" api_addr "https://127.0.0.1:8200" disable_mlock truestorage "raft" {path "/path/to/raft/data"node_id "raft_node_id" }listen…

Ubuntu 24.04安裝Jellyfin媒體服務器圖解教程

使用 Jellyfin 等開源軟件創建媒體服務器肯定能幫助您管理和跨各種設備傳輸媒體集合。當你有一個封閉社區時&#xff0c;這尤其有用。 什么是 Jellyfin 媒體服務器&#xff1f; Jellyfin 媒體服務器&#xff0c;顧名思義&#xff0c;是一款開源軟件&#xff0c;允許用戶使用本…

網絡抓包工具tcpdump的使用

tcpdump tcpdump命令是基于unix系統的命令行的數據報嗅探工具&#xff0c;可以抓取流動在網卡上的數據包&#xff0c;熟悉 tcpdump 的使用能夠幫助你分析調試網絡數據。 原理 linux抓包是通過注冊一種虛擬的底層網絡協議來完成對網絡報文&#xff08;準確的是網絡設備&#xf…

鼠標的發明和鼠標“變形記”

注&#xff1a;機翻&#xff0c;未校對。 Who Invented the Computer Mouse? 誰發明了電腦鼠標&#xff1f; It was technology visionary and inventor Douglas Engelbart (January 30, 1925 – July 2, 2013) who revolutionized the way computers worked, turning it fr…

Flink源碼學習資料

Flink系列文檔腦圖 由于源碼分析系列文檔較多&#xff0c;本人繪制了Flink文檔腦圖。和下面的文檔目錄對應。各位讀者可以選擇自己感興趣的模塊閱讀并參與討論。 此腦圖不定期更新中…… 文章目錄 以下是本人Flink 源碼分析系列文檔目錄&#xff0c;歡迎大家查閱和參與討論。…

偽元素::before :: after的用法?

::before 和 ::after 是 CSS 偽元素&#xff0c;用于在元素內容的前面或后面插入內容。這些偽元素不會改變文檔的實際內容&#xff0c;但可以用來添加裝飾性元素或文本。以下是它們的用法和一些常見示例。 基本用法 ::before ::before 偽元素用于在元素的內容之前插入內容。 …

【簡潔明了】調節大模型的prompt的方法【帶案例】

簡明調節大模型的prompt的方法【簡潔明了帶案例】 1. 明確任務目標2. 提供上下文3. 指定格式4. 限制輸出長度5. 使用示例6. 逐步引導7. 提供反面例子8. 使用CoT思維鏈9. 反復試驗和調整方法九解釋&#xff1a;喬哈里窗檢視 最后 因為網上給出的調節prompt都 過于詳細&#xff…

用 WireShark 抓住 TCP

Wireshark 是幫助我們分析網絡請求的利器&#xff0c;建議每個同學都裝一個。我們先用 Wireshark 抓取一個完整的連接建立、發送數據、斷開連接的過程。 簡單的介紹一下操作流程。 1、首先打開 Wireshark&#xff0c;在歡迎界面會列出當前機器上的所有網口、虛機網口等可以抓取…

網絡通信介紹

一、 簡介 網絡通信&#xff0c;簡而言之&#xff0c;就是通過各種物理鏈路和協議&#xff0c;實現不同地理位置的計算機或其他電子設備之間信息交換的過程。這些信息可以是文本、圖像、音頻、視頻等多種格式&#xff0c;通過網絡傳輸至目標設備&#xff0c;從而實現遠程通信、…

怎樣減少視頻的容量 怎樣減少視頻內存保持清晰度

在數字媒體時代&#xff0c;視頻內容已經成為人們日常交流和信息傳遞的重要方式。然而&#xff0c;視頻往往占用大量存儲空間&#xff0c;給我們的設備帶來不小的負擔。如何在不損失視頻質量的前提下&#xff0c;減少視頻文件的大小呢&#xff1f;本文將為你揭秘幾個實用的技巧…

Qt 使用Installer Framework制作安裝包

Qt 使用Installer Framework制作安裝包 引言一、下載安裝 Qt Installer Framework二、簡單使用2.1 創建目錄結構 (文件夾結構)2.2 制作程序壓縮包2.3 制作程序安裝包 引言 Qt Installer Framework (安裝程序框架)是一個強大的工具集&#xff0c;用于創建自定義的在線和離線安裝…

探索 TransactionSynchronizationManager.afterCommit 的原理及使用

在日常的企業級開發中&#xff0c;我們經常需要在事務提交之后執行一些操作&#xff0c;例如記錄日志、發送通知等。Spring 提供了一個方便的機制來實現這個需求&#xff0c;那就是 TransactionSynchronizationManager.afterCommit。本文將詳細探討 TransactionSynchronization…

【開發指南】HTML和JS編寫多用戶VR應用程序的框架

1.概述 Networked-Aframe 的工作原理是將實體及其組件同步到連接的用戶。要連接到房間&#xff0c;您需要將networked-scene組件添加到a-scene元素。對于要同步的實體&#xff0c;請向其添加networked組件。默認情況下&#xff0c;position和rotation組件是同步的&#xff0c;…

同三維T80004解碼器視頻使用操作說明書:高清HDMI解碼器,高清SDI解碼器,4K超清HDMI解碼器,雙路4K超高清解碼器

同三維T80004解碼器視頻使用操作說明書&#xff1a;高清HDMI解碼器&#xff0c;高清SDI解碼器&#xff0c;4K超清HDMI解碼器&#xff0c;雙路4K超高清解碼器 同三維T80004解碼器系列視頻使用操作說明書&#xff1a;高清HDMI解碼器&#xff0c;高清SDI解碼器&#xff0c;4K超清H…

未來的社交標桿:如何通過AI讓Facebook更加智能化?

在當今信息爆炸的時代&#xff0c;社交媒體平臺的智能化已成為提高用戶體驗和互動質量的關鍵因素。Facebook&#xff0c;作為全球最大的社交平臺之一&#xff0c;通過人工智能&#xff08;AI&#xff09;的廣泛應用&#xff0c;正不斷推進其智能化進程。本文將探討Facebook如何…

CAS的原理

CAS&#xff08;Compare-And-Swap 或 Compare-And-Set&#xff09;是一種用于實現并發編程中無鎖&#xff08;lock-free&#xff09;數據結構的原子操作。CAS 操作比較內存中的某個位置的當前值是否等于預期值&#xff0c;如果相等&#xff0c;則將其更新為新的值&#xff0c;否…

代碼隨想錄學習 54day 圖論 from代碼隨想錄

圖論總結篇 從深搜廣搜 到并查集&#xff0c;從最小生成樹到拓撲排序&#xff0c; 最后是最短路算法系列。至此算上本篇&#xff0c;一共30篇文章&#xff0c;圖論之旅就在此收官了。在0098.所有可達路徑 &#xff0c;我們接觸了兩種圖的存儲方式&#xff0c;鄰接表和鄰接矩陣…