国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
方法一:簡(jiǎn)單實(shí)現(xiàn)
方法二:檢測(cè)滾動(dòng)位置
方法三:Intersection Observer
如何實(shí)現(xiàn)平滑滾動(dòng)?
首頁(yè) web前端 css教程 如何制作一個(gè)不引人注目的滾動(dòng)按鈕

如何制作一個(gè)不引人注目的滾動(dòng)按鈕

Apr 02, 2025 am 03:52 AM

How to Make an Unobtrusive Scroll-to-Top Button

便捷的返回頂部按鈕能幫助用戶快速回到頁(yè)面頂部,無(wú)需費(fèi)力滾動(dòng)。對(duì)于內(nèi)容豐富的頁(yè)面、單頁(yè)網(wǎng)站(尤其使用無(wú)限滾動(dòng)時(shí))、以及不同屏幕尺寸的移動(dòng)設(shè)備,此功能尤為實(shí)用。

這些按鈕通常懸浮于網(wǎng)站底部角落,點(diǎn)擊即可返回頁(yè)面頂部。使用JavaScript輕松創(chuàng)建,但視覺(jué)上需做到不顯眼,同時(shí)保持足夠大的點(diǎn)擊區(qū)域。讓我們看看幾種實(shí)現(xiàn)方法,從簡(jiǎn)單到復(fù)雜。

方法一:簡(jiǎn)單實(shí)現(xiàn)

首先,用JavaScript選擇按鈕:

var scrollToTopBtn = document.getElementById("scrollToTopBtn");

document.documentElement 返回文檔的根元素,用于獲取偏移值。將其保存在名為 rootElement 的變量中,方便代碼調(diào)用:

var rootElement = document.documentElement;

為按鈕添加點(diǎn)擊事件監(jiān)聽(tīng)器:

function scrollToTop() {
  // 返回頂部邏輯
}

scrollToTopBtn.addEventListener("click", scrollToTop);

scrollToTop 函數(shù)中,使用 scrollTo 方法滾動(dòng)到屏幕頂部:

function scrollToTop() {
  // 返回頂部邏輯
  rootElement.scrollTo({
    top: 0,
    behavior: "smooth"
  });
}

稍加樣式調(diào)整:

#scrollToTopBtn {
  background-color: black;
  border: none;
  border-radius: 50%;
  color: white;
  cursor: pointer;
  font-size: 16px;
  line-height: 48px;
  width: 48px;
}

將按鈕放置在頁(yè)面底部(例如頁(yè)腳):

<button id="scrollToTopBtn">??</button>

效果如下:(此處應(yīng)顯示方法一的效果圖)

方法二:檢測(cè)滾動(dòng)位置

使用滾動(dòng)事件監(jiān)聽(tīng)器檢測(cè)滾動(dòng):

function handleScroll() {
  // 滾動(dòng)事件處理
}
document.addEventListener("scroll", handleScroll);

handleScroll 函數(shù)會(huì)在用戶每次滾動(dòng)時(shí)被調(diào)用。我們需要獲取可滾動(dòng)像素總數(shù):

  • scrollHeight 返回元素高度,包括因溢出而不可見(jiàn)的部分。
  • clientHeight 返回元素可見(jiàn)部分的高度(像素)。

scrollHeight 減去 clientHeight 即為可垂直滾動(dòng)的總像素?cái)?shù):

var scrollTotal = rootElement.scrollHeight - rootElement.clientHeight;

scrollTotal 變量表示可垂直滾動(dòng)的最大像素?cái)?shù)。將已滾動(dòng)量除以總滾動(dòng)像素?cái)?shù),得到 0 到 1 之間的比例。利用此比例,可以輕松切換按鈕顯示/隱藏。

例如,當(dāng)用戶滾動(dòng)到頁(yè)面總高度的 80%(比例為 0.80)時(shí)顯示返回頂部按鈕。80% 是一個(gè)任意值,越接近 1,用戶需要滾動(dòng)更多才能看到按鈕。

JavaScript 代碼如下:

var rootElement = document.documentElement;

function handleScroll() {
  // 滾動(dòng)事件處理
  var scrollTotal = rootElement.scrollHeight - rootElement.clientHeight;
  if ((rootElement.scrollTop / scrollTotal) > 0.80) {
    // 顯示按鈕
    scrollToTopBtn.classList.add("showBtn");
  } else {
    // 隱藏按鈕
    scrollToTopBtn.classList.remove("showBtn");
  }
}

document.addEventListener("scroll", handleScroll);

需要一些 CSS 來(lái)正確定位按鈕:

.scrollToTopBtn {
  /* 與之前相同的通用樣式 */

  /* 將其放置在右下角 */
  position: fixed;
  bottom: 30px;
  right: 30px;

  /* 保持在所有其他元素之上 */
  z-index: 100;

  /* 使用不透明度隱藏 */
  opacity: 0;

  /* 添加平移效果 */
  transform: translateY(100px);

  /* 添加過(guò)渡效果 */
  transition: all 0.5s ease;
}

.showBtn {
  opacity: 1;
  transform: translateY(0);
}

這樣,當(dāng)用戶滾動(dòng)到頁(yè)面 80% 位置時(shí)按鈕出現(xiàn),高于該位置時(shí)隱藏。

這看起來(lái)是個(gè)不錯(cuò)的選擇,添加事件監(jiān)聽(tīng)器也很容易。但由于始終檢查當(dāng)前滾動(dòng)位置,性能開(kāi)銷(xiāo)可能很大。

還有另一種方法可以解決這個(gè)問(wèn)題……

方法三:Intersection Observer

Intersection Observer API 是一個(gè)很好的解決方案。這是一個(gè)相當(dāng)新的瀏覽器 API,可以讓開(kāi)發(fā)者將大部分任務(wù)交給瀏覽器處理,從而實(shí)現(xiàn)更優(yōu)化的性能。Travis Almand 對(duì)其工作原理進(jìn)行了詳盡的解釋。MDN 的定義如下:

Intersection Observer API 提供了一種異步觀察目標(biāo)元素與其祖先元素或頂級(jí)文檔視窗交叉變化的方法。

很巧妙!這意味著按鈕可以作為我們的目標(biāo)元素:

// 選擇要定位的元素
var target = document.querySelector("footer");

然后編寫(xiě)一個(gè)回調(diào)函數(shù),當(dāng)元素與視窗“相交”(也就是進(jìn)入視野)時(shí)執(zhí)行操作?;卣{(diào)函數(shù)接收一個(gè)條目數(shù)組作為參數(shù)。

function callback(entries, observer) {
  // 回調(diào)函數(shù)將返回一個(gè)條目數(shù)組,即使您只觀察一個(gè)項(xiàng)目
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      // 顯示按鈕
      scrollToTopBtn.classList.add('showBtn');
    } else {
      // 隱藏按鈕
      scrollToTopBtn.classList.remove('showBtn');
    }
  });
}

我們需要?jiǎng)?chuàng)建一個(gè)新的 IntersectionObserver 實(shí)例并傳入我們剛剛編寫(xiě)的回調(diào)函數(shù):

let observer = new IntersectionObserver(callback);

最后,我們告訴觀察者開(kāi)始觀察上面選擇的 target 元素與視窗相交的情況:

observer.observe(target);

如何實(shí)現(xiàn)平滑滾動(dòng)?

當(dāng)然可以!事實(shí)上,Chris 在 2019 年就向我們展示了如何使用 CSS 實(shí)現(xiàn):

<a href="http://www.miracleart.cn/link/2e6d941e3bc2dbd3f122040f056b6718">跳轉(zhuǎn)到頁(yè)面頂部</a>
html {
  scroll-behavior: smooth;
}

這里還有一些細(xì)微之處,例如 Chris 在文章中也介紹的可訪問(wèn)性增強(qiáng)功能。關(guān)鍵在于 CSS 正在獲得新的功能,可以完成我們過(guò)去使用 JavaScript 完成的任務(wù)。

就是這樣!我們從一個(gè)非常簡(jiǎn)單的想法開(kāi)始。我們通過(guò)根據(jù)用戶的滾動(dòng)位置顯示和隱藏按鈕來(lái)增強(qiáng)它。然后,我們通過(guò)實(shí)現(xiàn) Intersection Observer API 來(lái)代替監(jiān)視當(dāng)前滾動(dòng)位置,從而提高了性能。最后,我們看到了如何使用 CSS 來(lái)實(shí)現(xiàn)平滑滾動(dòng)。總而言之,我們得到一個(gè)易于查看和使用的返回頂部按鈕,同時(shí)不會(huì)阻塞頁(yè)面上的其他元素。

以上是如何制作一個(gè)不引人注目的滾動(dòng)按鈕的詳細(xì)內(nèi)容。更多信息請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

熱門(mén)話題

什么是'渲染障礙CSS”? 什么是'渲染障礙CSS”? Jun 24, 2025 am 12:42 AM

CSS會(huì)阻塞頁(yè)面渲染是因?yàn)闉g覽器默認(rèn)將內(nèi)聯(lián)和外部CSS視為關(guān)鍵資源,尤其是使用引入的樣式表、頭部大量?jī)?nèi)聯(lián)CSS以及未優(yōu)化的媒體查詢樣式。1.提取關(guān)鍵CSS并內(nèi)嵌至HTML;2.延遲加載非關(guān)鍵CSS通過(guò)JavaScript;3.使用media屬性優(yōu)化加載如打印樣式;4.壓縮合并CSS減少請(qǐng)求。建議使用工具提取關(guān)鍵CSS,結(jié)合rel="preload"異步加載,合理使用media延遲加載,避免過(guò)度拆分與復(fù)雜腳本控制。

如何在無(wú)花果中使用Lotties 如何在無(wú)花果中使用Lotties Jun 14, 2025 am 10:17 AM

在接下來(lái)的教程中,我將向您展示如何在無(wú)花果中創(chuàng)建Lottie動(dòng)畫(huà)。我們將使用兩種彩色設(shè)計(jì)來(lái)超越如何在無(wú)花果上進(jìn)行動(dòng)畫(huà),然后向您展示如何從Figma到Lottie動(dòng)畫(huà)。您只需要免費(fèi)無(wú)花果

打破邊界:用(s)CSS構(gòu)建湯姆拼圖 打破邊界:用(s)CSS構(gòu)建湯姆拼圖 Jun 13, 2025 am 11:33 AM

我們對(duì)其進(jìn)行了測(cè)試,事實(shí)證明,至少在低級(jí)邏輯和拼圖行為時(shí),Sass可以替換JavaScript。除了地圖,混音,功能和大量數(shù)學(xué)外,我們都設(shè)法使我們的Tangram難題栩栩如生,沒(méi)有J

外部與內(nèi)部CSS:最好的方法是什么? 外部與內(nèi)部CSS:最好的方法是什么? Jun 20, 2025 am 12:45 AM

thebestapphachforcssdepprodsontheproject'sspefificneeds.forlargerprojects,externalcsSissBetterDuoSmaintoMaintainability andReusability; forsMallerProjectsorsingle-pageApplications,InternaltCsmightBemoresobleable.InternalCsmightBemorese.it.it'sclucialtobalancepopryseceneceenceprodrenceprodrenceNeed

我的CSS必須在較低的情況下嗎? 我的CSS必須在較低的情況下嗎? Jun 19, 2025 am 12:29 AM

否,CSSDOESNOTHAVETOBEINLOWERCASE.CHOMENDENS,使用flowercaseisrecommondendendending:1)一致性和可讀性,2)避免使用促進(jìn)性技術(shù),3)潛在的Performent FormanceBenefits,以及4)RightCollaboraboraboraboraboraboraboraboraboraboraboraboraboraboraboraboraborationWithInteams。

CSS案例靈敏度:了解重要的 CSS案例靈敏度:了解重要的 Jun 20, 2025 am 12:09 AM

cssismostlycaseminemintiment,buturlsandfontfamilynamesarecase敏感。1)屬性和valueslikeColor:紅色; prenotcase-sensive.2)urlsmustmustmatchtheserver'server'scase,例如

什么是AutoPrefixer,它如何工作? 什么是AutoPrefixer,它如何工作? Jul 02, 2025 am 01:15 AM

Autoprefixer是一個(gè)根據(jù)目標(biāo)瀏覽器范圍自動(dòng)為CSS屬性添加廠商前綴的工具。1.它解決了手動(dòng)維護(hù)前綴易出錯(cuò)的問(wèn)題;2.通過(guò)PostCSS插件形式工作,解析CSS、分析需加前綴的屬性、依配置生成代碼;3.使用步驟包括安裝插件、設(shè)置browserslist、在構(gòu)建流程中啟用;4.注意事項(xiàng)有不手動(dòng)加前綴、保持配置更新、非所有屬性都加前綴、建議配合預(yù)處理器使用。

什么是CSS計(jì)數(shù)器? 什么是CSS計(jì)數(shù)器? Jun 19, 2025 am 12:34 AM

csscounterscanautomationallymentermentermentections和lists.1)usecounter-ensettoInitializize,反插入式發(fā)芽,andcounter()orcounters()

See all articles