【JavaScript】十八、頁面加載事件和頁面滾動事件

文章目錄

  • 1、頁面加載事件
    • 1.1 load
    • 1.2 DOMContentLoaded
  • 2、頁面滾動事件
    • 2.1 語法
    • 2.2 獲取滾動位置
  • 3、案例:頁面滾動顯示隱藏側邊欄

1、頁面加載事件

script標簽在html中的位置一般在</body>標簽上方,這是因為代碼從上往下執行,在html元素都沒加載的情況下,JS去獲取DOM對象,會獲取不到,如下,script標簽提前,button對象就獲取不到

<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script>const btn = document.querySelector('button')btn.addEventListener('click', function() {alert('點擊了')})</script>
</head><body><button>點擊</button>
</body>

此時,可以考慮加一個事件,等下面都加載完了,再來執行JS代碼 ==> 頁面加載事件 ==> 等頁面資源全部處理完了再去做一些事情

1.1 load

  • 事件名:load
  • 作用:監聽頁面所有資源加載完畢,再執行回調函數
  • 示例:給 window 添加 load 事件

在這里插入圖片描述

利用頁面加載事件load,可以解決開篇說到的問題:

<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script>// 等待頁面所有資源都加載完畢了,再執行事件都回調函數// 這里給window添加load事件(window比document還大)window.addEventListener('load', function () {const btn = document.querySelector('button')btn.addEventListener('click', function () {alert('點擊了')})})</script>
</head><body><button>點擊</button>
</body>

不光可以監聽整個頁面資源加載完畢,也可以針對某個資源綁定load事件,也就是說不一定用window:

<script>// 如果我要等某個圖片加載完畢,再去執行回調代碼img.addEventListener('load', function () {alert('加載完成')})
</script>

1.2 DOMContentLoaded

當初始的 HTML 文檔被完全加載和解析完成之后,DOMContentLoaded 事件被觸發,而無需等待樣式表、圖像等完全加載,只要html標簽加載完就行

  • 事件名:DOMContentLoaded
  • 示例:給 document 添加 DOMContentLoaded 事件

在這里插入圖片描述

2、頁面滾動事件

很多網頁需要檢測用戶把頁面滾動到某個區域后做一些處理, 比如固定導航欄,比如返回頂部
在這里插入圖片描述

2.1 語法

  • 事件名:scroll
  • 監聽整個頁面滾動(不是只能給window加,監聽某個元素的內部滾動直接給某個元素加即可):

在這里插入圖片描述

  • 示例:
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>/* 平時寫的html沒有滾動條,因為html頁面和整個瀏覽器窗口一樣大,這里給body加個高度變的超出窗口大小,就出現滾動條了 */body {height: 3000px;}</style>
</head><body><script>window.addEventListener('scroll', function () {console.log('發生滾動了~')})</script>
</body>
  • 示例2:給div對象添加滾動事件
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>div {margin: 100px;width: 200px;height: 200px;/* 只要有滾動條,都可以添加滾動事件 */overflow: scroll;border: 1px solid #000;}</style>
</head><body><div>這是很多文字這是很多文字這是很多文字這是很多文字這是很多文字這是很多文字這是很多文字這是很多文字這是很多文字這是很多文字這是很多文字這是很多文字這是很多文字這是很多文字這是很多文字這是很多文字</div><script>const div = document.querySelector('div')div.addEventListener('scroll', function () {console.log('滾動了~')})</script>
</body>

在這里插入圖片描述

2.2 獲取滾動位置

如下,在上面div的例子中,滾動條向下拉,文字向上走(綠色代表div盒子,紅色代表文字內容),紫色線所示長度,就是被卷去的長度,即scrollTop

在這里插入圖片描述

同理,如果是橫向滾動條,就是scrollLeft,scrollTop和scrollLeft分別是獲取元素內容往左、往上滾出去看不到的距離

在這里插入圖片描述
要在scroll事件里面去獲取被卷去的距離:

在這里插入圖片描述

當然,一般獲取的是頁面滾動的距離,獲取整個html頁面,不是document.html,而是document.documentElement

在這里插入圖片描述

由此:獲取整個html頁面滾動的距離:

<body><script>window.addEventListener('scroll', function () { console.log(document.documentElement.scrollTop)})</script>
</body>

在這里插入圖片描述

再擴展,讓這個滑動距離滿足一定條件時,出現一個返回頂部👆的文字

<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>body {height: 3000px;}div {display: none;}</style>
</head><body><div>返回頂部👆</div><script>const div = document.querySelector('div')window.addEventListener('scroll', function () {// 這里用const沒問題,局部變量,每觸發一次scroll事件,執行一次回調函數,對應一個局部變量n// 獲取整個頁面滑動的距離const n = document.documentElement.scrollTopconsole.log(n)if (n >= 1) {   // 這里給個1,給太大了,等生效的時候,文字已經滑上去了,出來了也看不到效果div.style.display = 'block'} else {// 滾動條拉上去后再隱藏div.style.display = 'none'}})</script>
</body></html>

在這里插入圖片描述
最后,scrollTop和scrollLeft這兩個值是數值型,可讀可寫,可寫即用于實現頁面一打開就在中間,或者實現返回頂部,一點就給這個值賦0

// 實現頁面一打開就在中間
<script>document.documentElement.scrollTop = 800//...
</script>

3、案例:頁面滾動顯示隱藏側邊欄

需求:

  • 當頁面滾動大于300像素的距離時候,就顯示電梯側邊欄(叫電梯是因為點擊下圖中的每一樓選項,會直接跳到對應位置),否則隱藏
  • 點擊電梯里的“頂部”,頁面回到頂部
    在這里插入圖片描述
    關鍵代碼:
//...html略</div></div><!-- 電梯 --><div class="xtx-elevator"><ul class="xtx-elevator-list"><li><a href="javascript:;" data-name="new">新鮮好物</a></li><li><a href="javascript:;" data-name="popular">人氣推薦</a></li><li><a href="javascript:;" data-name="brand">熱門品牌</a></li><li><a href="javascript:;" data-name="topic">最新專題</a></li><li><a href="javascript:;" id="backTop"><i class="sprites"></i>頂部</a></li></ul></div><script>const elevator = document.querySelector('.xtx-elevator')window.addEventListener('scroll', function () {const n = document.documentElement.scrollTopif (n >= 300) {elevator.style.opacity = 1  // opacity即淡入淡出,溫柔版的display} else {elevator.style.opacity = 0}// elevator.style.opacity = n >= 300 ? 1 : 0// 返回頂部const backTop = document.querySelector('#backTop')backTop.addEventListener('click', function () {document.documentElement.scrollTop = 0})})</script></body></html>

補充:scrollTo() 方法可把內容滾動到指定的坐標

  • 語法:元素.scrollTo(x, y)
  • 示例:

在這里插入圖片描述
對這個案例來說,這兩個寫法都行,scrollTo方法更靈活,還可以操作橫軸位置,但一般頁面都是上下滾動,所以兩種實現都可:

//document.documentElement.scrollTop = 0
window.scrollTo(0, 0)

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

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

相關文章

Linux : 內核中的信號捕捉

目錄 一 前言 二 信號捕捉的方法 1.sigaction()?編輯 2. sigaction() 使用 三 可重入函數 四 volatile 關鍵字 一 前言 如果信號的處理動作是用戶自定義函數,在信號遞達時就調用這個函數,這稱為捕捉信號。在Linux: 進程信號初識-CSDN博客 這一篇中已經學習到了一種信號…

分布式id生成算法(雪花算法 VS 步長id生成)

分布式ID生成方案詳解:雪花算法 vs 步長ID 一、核心需求 全局唯一性:集群中絕不重復有序性:有利于數據庫索引性能高可用:每秒至少生成數萬ID低延遲:生成耗時<1ms二、雪花算法(Snowflake) 1. 數據結構(64位) 0 | 0000000000 0000000000 0000000000 0000000000 0 |…

函數式編程在 Java:Function、BiFunction、UnaryOperator 你真的會用?

大家好&#xff0c;我是你們的Java技術博主&#xff01;今天我們要深入探討Java函數式編程中的幾個核心接口&#xff1a;Function、BiFunction和UnaryOperator。很多同學雖然知道它們的存在&#xff0c;但真正用起來卻總是不得要領。這篇文章將帶你徹底掌握它們&#xff01;&am…

x265 編碼器中運動搜索 ME 方法對比實驗

介紹 x265 的運動搜索方法一共有 6 種方法,分別是 DIA、HEX、UMH、STAR、SEA、FULL。typedef enum {X265_DIA_SEARCH,X265_HEX_SEARCH,X265_UMH_SEARCH,X265_STAR_SEARCH,X265_SEA,X265_FULL_SEARCH } X265_ME_METHODS;GitHub

2025.4.8 dmy NOI模擬賽總結(轉化貢獻方式 dp, 交互(分段函數找斷點),SAM上計數)

文章目錄 時間安排題解T1.搬箱子(dp&#xff0c;轉化貢獻方式)T2.很多線。(分段函數找斷點)T3.很多串。(SAM&#xff0c; 計數) 時間安排 先寫了 T 3 T3 T3 60 p t s 60pts 60pts&#xff0c;然后剩下 2.5 h 2.5h 2.5h 沒有戰勝 T 1 T1 T1 40 p t s 40pts 40pts。 總得分…

ZYNQ筆記(四):AXI GPIO

版本&#xff1a;Vivado2020.2&#xff08;Vitis&#xff09; 任務&#xff1a;使用 AXI GPIO IP 核實現按鍵 KEY 控制 LED 亮滅&#xff08;兩個都在PL端&#xff09; 一、介紹 AXI GPIO (Advanced eXtensible Interface General Purpose Input/Output) 是 Xilinx 提供的一個可…

CSP認證準備第二天-第36/37次CCF認證

第37次CCF認證-第三題 主要是間接賦值比較難。 自己編寫的代碼如下&#xff0c;但是有問題&#xff0c;沒有解決間接賦值的問題&#xff0c;可以參考一下deepseek的回答。 #include <iostream> #include <bits/stdc.h> using namespace std; long long n,x; char …

Kotlin與HttpClient編寫視頻爬蟲

想用Apache HttpClient庫和Kotlin語言寫一個視頻爬蟲。首先&#xff0c;我需要確定用戶的具體需求。視頻爬蟲通常涉及發送HTTP請求&#xff0c;解析網頁內容&#xff0c;提取視頻鏈接&#xff0c;然后下載視頻。可能需要處理不同的網站結構&#xff0c;甚至可能需要處理動態加載…

FFMEPG常見命令查詢

基本參數 表格1&#xff1a;主要參數 參數說明-i設定輸入流-f設定輸出格式(format) 高于后綴名-ss開始時間-t時間長度codec編解碼 表格2&#xff1a;音頻參數 參數說明-aframes設置要輸出的音頻幀數-f音頻幀深度-b:a音頻碼率-ar設定采樣率-ac設定聲音的Channel數-acodec設定…

Java-對比兩組對象找出發生變化的字段工具-支持枚舉映射-支持時間-支持顯示對應字段中文描述-嵌套list等場景

實體字段比較器&#xff08;對比兩組對象找出發生變化的字段工具類開發&#xff09; 支持枚舉映射 支持時間 支持顯示對應字段中文描述 支持嵌套list等場景 下載地址&#xff1a; Java-對比兩組對象找出發生變化的字段工具-支持枚舉映射-支持時間-支持顯示對應字段中文描述-嵌…

15. git push

基本概述 git push 的作用是&#xff1a;把本地分支的提交推送到遠程倉庫。推送分支需要滿足快進規則&#xff08;Fast-Forward&#xff09;&#xff0c;即遠程分支的最新提交必須是本地分支的直接祖先&#xff0c;這個是通過哈希值值進行判斷的。 基本用法 1.完整格式 git…

訓練數據清洗(文本/音頻/視頻)

多數據格式的清洗方法 以下是針對多數據格式清洗方法的系統性總結&#xff0c;結合Python代碼示例&#xff1a; 一、數據清洗方法總覽&#xff08;表格對比&#xff09; 數據類型核心挑戰關鍵步驟常用Python工具文本非結構化噪聲去噪→分詞→標準化→向量化NLTK, SpaCy, Jie…

Python標準庫json完全指南:高效處理JSON數據

一、json庫概述 JSON(JavaScript Object Notation)是一種輕量級的數據交換格式&#xff0c;Python的json模塊提供了JSON數據的編碼和解碼功能。該模塊可以將Python對象轉換為JSON字符串&#xff08;序列化&#xff09;&#xff0c;也可以將JSON字符串轉換為Python對象&#xf…

微軟推出首款量子計算芯片Majorana 1

全球首款拓撲架構量子芯片問世&#xff0c;2025年2月20日&#xff0c;經過近20年研究&#xff0c;微軟推出了首款量子計算芯片Majorana 1&#xff0c;其宣傳視頻如本文末尾所示。 微軟表示&#xff0c;開發Majorana 1需要創造一種全新的物質狀態&#xff0c;即所謂的“拓撲體”…

【QT】QT中的文件IO

QT中的文件IO 一、有關文件IO的類二、步驟1、定義QFile的對象,與要讀寫的文件綁定在一起2、打開文件3、讀寫文件1&#xff09;讀取文件2&#xff09;寫入文件 4、關閉文件5、示例代碼&#xff1a; 三、QString和QByteArray之間的轉換1、方法2、示例代碼&#xff1a; 四、QFileI…

Nginx 499 錯誤的原因及解決方法

Nginx 499 錯誤的原因及解決方法 原因 客戶端超時&#xff1a; 客戶端在等待服務器響應時超時&#xff0c;導致連接被關閉。 解決方法&#xff1a;優化服務端響應時間&#xff0c;或調大客戶端的連接超時時間。 服務端響應過慢&#xff1a; 后端服務處理請求時間過長。 解決方法…

Smith-Waterman 算法(C++實現)

本文實現Smith-Waterman 算法案例&#xff0c;用于局部序列比對。該算法是生物信息學中用于尋找兩個 DNA、RNA 或蛋白質序列之間最優局部比對的經典算法&#xff0c;廣泛應用于序列相似性分析和功能預測。 問題描述 給定兩個生物序列 seq1 和 seq2&#xff0c;如何找到它們的最…

安卓玩機工具-----安卓機型通用 無損備份與恢復數據的工具BackupToolkit 操作過程

常規安卓機型數據備份與恢復的方法及工具 安卓設備的數據備份與恢復是保護個人數據的重要手段之一。以下是幾種常用的方法和工具&#xff1a; 方法一&#xff1a;利用內置的云服務進行備份 許多安卓設備提供了內置的云服務&#xff0c;例如華為手機可以通過“華為云空間”來…

oracle 動態性能視圖

Oracle 數據庫中的 V$SQLAREA 是一個動態性能視圖&#xff08;Dynamic Performance View&#xff09;&#xff0c;用于記錄共享池&#xff08;Shared Pool&#xff09;中所有 SQL 語句的統計信息。每個 SQL 語句在共享池中存儲為一個游標&#xff08;Cursor&#xff09;&#x…

OceanBase V4.3.5 上線全文索引功能,讓數據檢索更高效

近日&#xff0c;OceanBase 4.3.5 BP1 版本正式推出了企業級全文索引功能。該版本在中文分詞、查詢效率及混合檢索能力上進行了全面提升。經過自然語言模式和布爾模式在不同場景下的對比測試&#xff0c;OceanBase 的全文索引性能明顯優于 MySQL。 點擊下載 OceanBase 社區版…