」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何實現錨鏈接平滑滾動?

如何實現錨鏈接平滑滾動?

發佈於2024-12-21
瀏覽:130

How Can I Achieve Smooth Scrolling with Anchor Links?

在點擊錨連結時平滑滾動

使用錨連結導航網頁時,使用者期望無縫過渡到目標部分。然而,預設的滾動行為可能會很突然。本文探討了在點擊錨連結時實現平滑滾動的技術。

本機支援

Chrome 和 Firefox 等瀏覽器引入了對平滑滾動的本機支援。這是透過捲動到視圖時使用值為「smooth」的「behavior」屬性來實現的:

document.querySelectorAll('a[href^="#"]').forEach(anchor => {
    anchor.addEventListener('click', function (e) {
        e.preventDefault();

        document.querySelector(this.getAttribute('href')).scrollIntoView({
            behavior: 'smooth'
        });
    });
});

jQuery 外掛程式

對於較舊的瀏覽器,jQuery 外掛程式可以平滑捲動動畫。此技術使用「animate」方法將頁面移至目標部分:

$(document).on('click', 'a[href^="#"]', function (event) {
    event.preventDefault();

    $('html, body').animate({
        scrollTop: $($.attr(this, 'href')).offset().top
    }, 500);
});

增強技術

如果目標元素缺少ID,可以使用以下修改後的jQuery 插件:

$('a[href^="#"]').click(function () {
    $('html, body').animate({
        scrollTop: $('[name="'   $.attr(this, 'href').substr(1)   '"]').offset().top
    }, 500);

    return false;
});

效能最佳化

在變數中快取「$('html, body')」選擇器可增強效能:

var $root = $('html, body');

$('a[href^="#"]').click(function () {
    $root.animate({
        scrollTop: $( $.attr(this, 'href') ).offset().top
    }, 500);

    return false;
});

保留URL 哈希

要在平滑滾動時更新URL 哈希,請使用“animate”回調:

var $root = $('html, body');

$('a[href^="#"]').click(function() {
    var href = $.attr(this, 'href');

    $root.animate({
        scrollTop: $(href).offset().top
    }, 500, function () {
        window.location.hash = href;
    });

    return false;
});

透過實施其中一項技術,您可以在使用錨定連結導航頁面時提供精美且使用者友好的滾動體驗。

最新教學 更多>
  • 如何將 PHP 陣列轉換為 JavaScript 陣列?
    如何將 PHP 陣列轉換為 JavaScript 陣列?
    將 PHP 陣列轉換為 JavaScript使用 PHP 和 JavaScript 時,在它們之間交換資料至關重要。一項常見任務是將 PHP 陣列轉換為 JavaScript 陣列。本文將深入探討實現這種轉換的過程。 問題:給定一個PHP 數組,如何將其轉換為特定格式的JavaScript 數組?解...
    程式設計 發佈於2024-12-22
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-12-22
  • 大批
    大批
    方法是可以在物件上呼叫的 fns 數組是對象,因此它們在 JS 中也有方法。 slice(begin):將陣列的一部分提取到新數組中,而不改變原始數組。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index ...
    程式設計 發佈於2024-12-22
  • 如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    在 PHP 中組合關聯數組在 PHP 中,將兩個關聯數組組合成一個數組是常見任務。考慮以下請求:問題描述:提供的代碼定義了兩個關聯數組,$array1 和 $array2。目標是建立一個新陣列 $array3,它合併兩個陣列中的所有鍵值對。 此外,提供的陣列具有唯一的 ID,而名稱可能重疊。要求是建...
    程式設計 發佈於2024-12-22
  • 如何在 MPI 中有效發送和接收二維數組?
    如何在 MPI 中有效發送和接收二維數組?
    使用MPI 發送和接收2D 數組使用MPI 發送和接收2D 數組問題:您有一個大型2D 矩陣,需要跨多個處理使用MPI 的節點。節點之間唯一的通訊涉及在每個時間步後共享邊緣值。 方法:// (assume A is a 2D array) if (myrank == 0) { for (i = ...
    程式設計 發佈於2024-12-22
  • 如何在 CSS 媒體查詢中使用「OR」邏輯組合多個條件?
    如何在 CSS 媒體查詢中使用「OR」邏輯組合多個條件?
    使用OR 邏輯組合CSS 媒體查詢中的多個條件在CSS 媒體查詢中,使用「OR」邏輯指定多個條件可能很有用用於定位具有不同螢幕尺寸或方面的裝置。雖然問題中提供的程式碼不正確,但有一個簡單的方法可以實現所需的結果。 要使用「OR」邏輯指定多個條件,請用逗號分隔:@media screen and (m...
    程式設計 發佈於2024-12-21
  • 為什麼我的 Go 程式碼中出現「已匯入但未使用」錯誤?
    為什麼我的 Go 程式碼中出現「已匯入但未使用」錯誤?
    Go 中錯誤:「已匯入且未使用」Go 中匯入套件時,出現「已匯入且未使用」錯誤如果匯入的包未在目前文件中使用。 在您的情況下,您匯入了「./api」套件。編譯器偵測到您尚未在程式碼中使用此套件。要解決此錯誤,您需要實際利用套件中的某些內容。 您已經提到您在main 函數中使用api 包,但您的程式碼...
    程式設計 發佈於2024-12-21
  • 如何在 Python 列表推導式中使用 if/else 邏輯?
    如何在 Python 列表推導式中使用 if/else 邏輯?
    使用if/else 進行列表推導式:語法與用法在Python 中使用清單推導式時,會遇到合併if /else 邏輯的情況處理條件操作。本文介紹了此類場景的正確語法。 一個常見任務是根據來源序列建立一個列表,並使用以下包含 if/else 結構的 for 迴圈:results = [] for x i...
    程式設計 發佈於2024-12-21
  • 如何使用 JavaScript 轉義 JSON 字串中的換行符號?
    如何使用 JavaScript 轉義 JSON 字串中的換行符號?
    JavaScript 中使用換行符轉義JSON 字符串在JavaScript 中,構造JSON 字符串需要轉義特殊字符,包括換行符。為此,請按照下列步驟操作:1。字串化 JSON 物件:使用 JSON.stringify() 將 JSON 物件轉換為字串。 2.轉義換行符:利用 .replace()...
    程式設計 發佈於2024-12-21
  • 在 Go 中使用 WebSocket 進行即時通信
    在 Go 中使用 WebSocket 進行即時通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSocke...
    程式設計 發佈於2024-12-21
  • 為什麼 SimpleDateFormat 錯誤地解析「YYYY-MM-dd HH:mm」?
    為什麼 SimpleDateFormat 錯誤地解析「YYYY-MM-dd HH:mm」?
    SimpleDateFormat 錯誤解析「YYYY-MM-dd HH:mm」試著解析格式為「YYYY-MM」的字串時-dd HH:mm" 到日期,一些開發人員遇到意外的日期結果。當使用SimpleDateFormat 類別並將lenient 設定設為false 時,會發生這種情況。 St...
    程式設計 發佈於2024-12-21
  • HTML 格式標籤
    HTML 格式標籤
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    程式設計 發佈於2024-12-21
  • 如何在Python中高效率計算列表的平均值?
    如何在Python中高效率計算列表的平均值?
    在Python中計算清單的平均值確定清單的算術平均值或平均值對於統計分析至關重要。在 Python 中,有多種方法可用於此操作。以下是對每種方法的詳細探索:Python >= 3.8:statistics.fmean統計模組提供了浮點數的數值穩定性,確保準確的結果。這是Python 3.8及更高版本...
    程式設計 發佈於2024-12-21
  • 如何設計與標準庫正確整合的自訂 STL 容器?
    如何設計與標準庫正確整合的自訂 STL 容器?
    編寫自訂STL 容器的指南設計符合STL 約定的新容器時,遵循某些指南至關重要以確保其正確行為並與STL 庫整合。 迭代器介面:迭代器介面:定義一個具有適當的iterator_category標記的迭代器類,例如input_iterator_tag、output_iterator_tag、forwa...
    程式設計 發佈於2024-12-21
  • 為什麼 REST API 使用不同的 HTTP 方法(PUT、DELETE、POST、GET)?
    為什麼 REST API 使用不同的 HTTP 方法(PUT、DELETE、POST、GET)?
    REST API:HTTP 方法(PUT、DELETE、POST、GET)的重要性在RESTful API 領域,一個基本的問題出現了:為什麼要使用多種HTTP 請求類型,例如PUT、DELETE、POST 和GET?重要的是要了解 REST 的目的不僅僅是使用最簡單的方法存取資料。 REST 的角...
    程式設計 發佈於2024-12-21

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3