JavaScript:從DOM概述到window對象的常見事件

一、BOM概述

1.BOM的概念

BOM(Browser Object Model)即瀏覽器對象模型,它提供了獨立于內容而與瀏覽器窗口進行交互的對象,其核心對象是window

2.BOM的構成

BOM比DOM更大,它包含DOM

window對象是瀏覽器的頂級對象,它具有雙重角色

1.它是JS訪問瀏覽器窗口的一個接口

2.它是一個全局對象,定義在全局作用域中的變量,函數都會編程window對象的屬性和方法,在調用的時候可以省略window,像alert()、prompt()等

注意:window下的一個特殊屬性window.name本身有含義,盡量避免定義name變量

二、window對象的常見事件

1.窗口加載事件?

(1)針對window

window.onload = function(){}

或者

window.addEventListener("load",function(){})

window.onload是窗口(頁面)加載事件,當文檔內容完全加載完成會觸發該事件(包括圖形、腳本文件、CSS文件等),就調用的處理函數

注意:

1.使用window.onload可以將script寫在頁面任何一個位置,不再像之前一樣智能寫在要加JS屬性的HTML標簽語句下了

2.window.onload傳統注冊事件方式只能寫一次,如果有多個,回憶最后一個window.onload為準

3.使用addEventListener沒有限制?

傳統注冊事件方式:?

window.onload = function () {var btn = document.querySelector('button');btn.addEventListener('click', function () {alert('點擊');})
}

事件監聽注冊事件方式:

window.addEventListener('load', function () {var btn = document.querySelector('button');btn.addEventListener('click', function () {alert('點擊');})
})

(2)針對document

document.addEventListener('DOMContentLoaded',function(){})

DOMContentLoaded事件觸發時,晉檔dom加載完成,不包括樣式表,圖片,flash等

IE9以上才支持

如果頁面的圖片很多,從用戶訪問到onload觸發肯需要較長時間,交互效果就不能實現,必然影響用戶的體驗,此時用DOMContentLoadd事件比較合適

document.addEventListener('DOMContentLoaded', function () {alert(33);
})

2.調整窗口大小事件

window.onresize = finction(){}

或者

window.addEventListener("resize",function(){})

window.onresize是調整窗口大小加載事件,當觸發時就調用的處理函數

注意:

1.只有窗口大小發生像素變化,就會觸發這個事件

2.我們經常用這個事件完成響應式布局。window.innerWidth 當前屏幕的寬度

3.定時器

(1)setTimeout()

window.setTimeout(調用函數,[延遲的毫秒數]);

?setTimeout()方法用于設置一個定時器,該定時器在定時器到期后執行調用函數

語法規范:

1.window在調用時可以省略

2.這個延時時間單位是毫秒,但是可以省略,默認是0

3.這個調用函數可以自己寫函數,還可以寫函數名

????????例如

function callkbak() {console.log('爆炸了');
}
setTimeout(callkbak, 3000);

4.頁面中可能有很多計時器,我們經常給定時器加標識符(名字)

var time1 = setTimeout(callkbak, 3000);
var time2 = setTimeout(callkbak, 5000);

??setTimeout()這個函數調用我們也稱為回調函數callback

普通函數是按照代碼順序直接調用?

案例:5秒后自動關閉的廣告

var ad = document.querySelector('img');
setTimeout(function () {ad.style.display = 'none';
}, 5000);

(2)clearTimeout()

clearTimeout()方法取消了先前通過調用setTimeout()建立的定時器

注意:

1.window可以省略

2.里面的參數就是定時器的標識符

????????例如:

var btn = document.querySelector('button');
timer = setTimeout(function () {console.log('爆炸了');
}, 5000);
btn.addEventListener('click', function () {clearTimeout(timer);
})

(3)setInterval()

window.setTimeout(調用函數,[延遲的毫秒數]);

setInterval()這個調用函數也稱為回調函數

注意:

1.window可以省略

2.可以直接寫函數,或者寫函數名或者采取字符串‘函數名()’三種形式

? ? ? ? 例如:

setInterval(function () {console.log(1);
}, 1000);

?setInterval()與setTimeout()的區別:

  1. ?setInterval()是間隔這個時間后執行,只執行一次
  2. setTimeout()是每隔這個時間執行一次,重復執行

案例:倒計時

css:

span {display: inline-block;height: 20px;width: 20px;text-align: center;line-height: 16px;font-size: 16px;color: #fff;background-color: #000;margin: 5px;
}

HTML:

<div><span class="hour">1</span><span class="minute">2</span><span class="second">3</span>
</div>

JavaScript:

var hour = document.querySelector('.hour');
var minute = document.querySelector('.minute');
var second = document.querySelector('.second');
var inputTime = +new Date('2025-7-22 18:00:00');
count();
setInterval(count, 1000);
function count() {var nowTime = +new Date();var times = (inputTime - nowTime) / 1000;var h = parseInt(times / 60 / 60 % 24);h = h < 10 ? '0' + h : h;hour.innerHTML = h;var m = parseInt(times / 60 % 60);m = m < 10 ? '0' + m : m;minute.innerHTML = m;var s = parseInt(times % 60);s = s < 10 ? '0' + s : s;second.innerHTML = s;
}

(4)clearInterval()

window.clearInterval(intervalID);

clearInterval()方法取消了先前通過調用setInterval()建立的計時器

注意:

1.window可以省略

2.里面的參數就是定時器的標識符

? ? ? ? 例如:對于一個開始按鈕和結束按鈕看,要使點擊開始后開始計數,點擊結束后結束計數

var start = document.querySelector('.start');
var stop = document.querySelector('.stop');
start.addEventListener('click', function () {timer = setInterval(function () {console.log('hi');}, 1000);
})
stop.addEventListener('click', function () {console.log('bye');clearInterval(timer)
})

?案例:發送短信

點擊按鈕后,該按鈕60秒內不能再點擊

對于一個發送按鈕

<button>發送</button>

給它設置JS

var btn = document.querySelector('button');
var time = 60;
btn.addEventListener('click', function () {btn.disabled = true;var timer = setInterval(function () {if (time == 0) {clearInterval(timer);btn.disabled = false;btn.innerHTML = '發送';time = 60;}else {btn.innerHTML = '還剩下' + time + '秒';time--;}}, 1000);
})

(5)this

this的指向在函數定義的時候無法確定,只有再函數執行的時候才能確定this到底指向誰,一般情況下this指向的是調用它的對象?

1.全局作用域或者普通函數里this指向全局對象window

? ? ? ? 直接輸出this的指向,為window

console.log(this);//window

? ? ? ? 輸出函數里this的指向,也是window

function fun() {console.log(this);//window
}
fun();

2.方法調用中,誰調用指向誰

var o = {sayHi: function () {console.log(this);//o}
}
o.sayHi();
var btn = document.querySelector('button');
btn.addEventListener('click', function () {console.log(this);//btn
});

3.構造函數中this指向構造函數

function fn() {console.log(this);//fun
}
var fun = new fn();

?

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

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

相關文章

qobject與event事件應用

int main(int argc, char *argv[]) {QApplication a(argc, argv);MyWidget mainWidget;mainWidget.setWindowTitle("QObject與事件處理示例");mainWidget.resize(200, 200);mainWidget.show();return a.exec(); }QApplication a(argc, argv);&#xff1a;創建 QAppli…

QTableView復選框居中

目錄 方法一&#xff1a;QSS方法2:自定義復選框委托類一、構造函數 CheckBoxDelegate()二、paint() 方法三、editorEvent() 方法四、關鍵設計要點五、擴展應用場景六、代碼示例&#xff08;補充&#xff09; 方法一&#xff1a;QSS QTableView::indicator {position: relative…

基于QT的仿QQ音樂播放器

一、項目介紹 該項目是基于QT開發的?樂播放軟件&#xff0c;界面友好&#xff0c;功能豐富&#xff0c;主要功能如下&#xff1a; 窗口hand部分&#xff1a; 點擊最小化按鈕&#xff0c;窗口最小化 點擊最大化按鈕&#xff0c;窗口最大化 點擊關閉按鈕&#xff0c;程序退出 …

SQL知識點合集---第二彈

數據一 <select id"listPositionAuditCheckSample" resultType"net.nxe.cloud.content.server.entity.PositionAuditCheckSample"><trim prefixOverrides"union all"><if test"userSampleCount ! null and userSampleCount…

【QT】QT控制硬件

QT控制硬件 1.上位機程序開發2.具體例子控制led燈3. linux中的函數跟QT類里面的函數同名&#xff0c;發生沖突4.示例代碼 1.上位機程序開發 QT做一個上位機程序&#xff0c;控制底層的硬件設備(下位機) 總結&#xff1a; 在構造函數里面去初始化&#xff0c;打開硬件驅動在析…

Flutter介紹、Flutter Windows Android 環境搭建 真機調試

目錄 Flutter介紹 Windows 環境搭建 1.安裝配置JDK 2.下載安裝Android Studio 3.下載配置Flutter SDK ?4.運行Flutter doctor命令檢測環境是否配置成功 ?5.打開Android Studio安裝Flutter/Dart 插件 ?6.插件運行Flutter項目 ?編輯 Flutter Android真機調試 Flut…

Android Studio 中使用 SQLite 數據庫開發完整指南(Kotlin版本)

文章目錄 1. 項目準備1.1 創建新項目1.2 添加必要依賴 2. 數據庫設計3. 實現數據庫3.1 創建實體類 (Entity)3.2 創建數據訪問對象 (DAO)3.3 創建數據庫類 4. 創建 Repository5. 創建 ViewModel6. 實現 UI 層6.1 創建筆記列表 Activityactivity_notes_list.xmlNotesListActivity…

Vue基礎(7)_計算屬性

計算屬性(computed) 一、使用方式&#xff1a; 1.定義計算屬性&#xff1a; 在Vue組件中&#xff0c;通過在 computed 對象中定義計算屬性名稱及對應的計算函數來創建計算屬性。計算函數會返回計算屬性的值。 2.在模板中使用計算屬性&#xff1a; 在Vue的模板中&#xff0c;您…

辛格迪客戶案例 | 華道生物細胞治療生產及追溯項目(CGTS)

01 華道&#xff08;上海&#xff09;生物醫藥有限公司&#xff1a;細胞治療領域的創新先鋒 華道&#xff08;上海&#xff09;生物醫藥有限公司&#xff08;以下簡稱“華道生物”&#xff09;是一家專注于細胞治療技術研發與應用的創新型企業&#xff0c;尤其在CAR-T細胞免疫…

[26] cuda 應用之 nppi 實現圖像格式轉換

[26] cuda 應用之 nppi 實現圖像格式轉換 講述 nppi 接口定義通過nppi實現 bayer 格式轉rgb格式官網參考信息:http://gwmodel.whu.edu.cn/docs/CUDA/npp/group__image__color__debayer.html#details1. 接口定義 官網關于轉換的原理是這么寫的: Grayscale Color Filter Array …

2025“釘耙編程”中國大學生算法設計春季聯賽(8)10031007

題目的意思很好理解找從最左邊到最右邊最短路&#xff08;BFS&#xff09; #include <bits/stdc.h> using namespace std; int a[510][510]; // 存儲網格中每個位置是否有障礙&#xff08;1表示有障礙&#xff0c;0表示無障礙&#xff09; int v[510][510]; // 記錄每…

【Linux】第十一章 管理網絡

目錄 1.TCP/IP網絡模型 物理層&#xff08;Physical&#xff09; 數據鏈路層&#xff08;Date Link&#xff09; 網絡層&#xff08;Internet&#xff09; 傳輸層&#xff08;Transport&#xff09; 應用層&#xff08;Application&#xff09; 2. 對于 IPv4 地址&#…

python_股票月數據趨勢判斷

目錄 前置 代碼 視頻&月數據 前置 1 A股月數據趨勢大致判斷&#xff0c;做一個粗略的篩選 2 邏輯&#xff1a; 1&#xff09;取最近一次歷史最高點 2&#xff09;以1&#xff09;中最高點為分界點&#xff0c;只看右側數據&#xff0c;取最近一次最低點 3&#xf…

Python PyAutoGUI庫【GUI 自動化庫】深度解析與實戰指南

一、核心工作原理 底層驅動機制&#xff1a; 通過操作系統原生API模擬輸入使用ctypes庫調用Windows API/Mac Cocoa/Xlib屏幕操作依賴Pillow庫進行圖像處理 事件模擬流程&#xff1a; #mermaid-svg-1CGDRNzFNEffhvSa {font-family:"trebuchet ms",verdana,arial,sans…

Spring框架allow-bean-definition-overriding詳細解釋

Spring框架中&#xff0c;allow-bean-definition-overriding 是一個控制是否允許覆蓋同名Bean定義的配置屬性。以下是詳細說明&#xff1a; ?1. 作用? ?允許/禁止Bean定義覆蓋?&#xff1a;當Spring容器中檢測到多個同名的Bean定義時&#xff0c;此配置決定是否允許后續的…

機器人抓取位姿檢測——GRCN訓練及測試教程(Pytorch)

機器人抓取位姿檢測——GRCN訓練及測試教程(Pytorch) 這篇文章主要介紹了2020年IROS提出的一種名為GRCN的檢測模型,給出了代碼各部分的說明,并給出windows系統下可以直接復現的完整代碼,包含Cornell數據集。 模型結構圖 github源碼地址:https://github.com/skumra/robo…

在web應用后端接入內容審核——以騰訊云音頻審核為例(Go語言示例)

騰訊云對象存儲數據萬象&#xff08;Cloud Infinite&#xff0c;CI&#xff09;為用戶提供圖片、視頻、語音、文本等文件的內容安全智能審核服務&#xff0c;幫助用戶有效識別涉黃、違法違規和廣告審核&#xff0c;規避運營風險。本文以音頻審核為例給出go語言示例代碼與相應結…

GraphRAG知識庫概要設計展望

最近研究了一下GraphRAG&#xff0c;寫了一個文檔轉換工具還有圖可視化工具&#xff0c;結合langchain構建RAG經驗&#xff0c;還有以前的數據平臺&#xff0c;做了一個知識庫概要設計&#xff0c;具體應用歡迎留言探討。 一、GraphRAG整體概述 GraphRAG圖基檢索增強生成&…

Android Studio 日志系統詳解

文章目錄 一、Android 日志系統基礎1. Log 類2. 日志級別 二、Android Studio 中的 Logcat1. 打開 Logcat2. Logcat 界面組成3. 常用 Logcat 命令 三、高級日志技巧1. 自定義日志工具類2. 打印方法調用棧3. 打印長日志4. JSON 和 XML 格式化輸出 四、Logcat 高級功能1. 自定義日…

深度對比:Objective-C與Swift的RunTime機制與底層原理

1. RunTime簡介 RunTime&#xff08;運行時&#xff09;是指程序在運行過程中動態管理類型、對象、方法等的機制。Objective-C 和 Swift 都擁有自己的運行時系統&#xff0c;但設計理念和實現方式有很大不同。理解 RunTime 的底層原理&#xff0c;是掌握 iOS 高級開發的關鍵。…