浏览器内置JS对象 / 事件 / 请求

news/2024/9/24 5:33:06/

浏览器内置JS对象&事件&请求

BOM - 【Browser】浏览器对象功能区域的相关操作

location - 跳转 / 读取路由数据

location.href => 'https://www.baidu.com/search?class=browser#comments'
location.protocol => 'https';
location.host => 'www.baidu.com';
location.origin => 'https://www.baidu.com';
location.port => '8080';
location.pathname => '/search/';
location.search = '?class=browser';
location.hash => '#comments';    // 单页路由 | iframe通信location.assign('...') // 跳转到指定的path, 替换pathname的值
location.replace('...')// 效果同上,同时替换浏览历史
location.reload()      // 刷新
locatoin.toString()    // 返回当前地址字符串面试方向
1. location本身的api操作
2. 路由相关 跳转 / 参数 / 操作 => 场景:history | hash
3. url处理 - 正则 or 手写处理【history】
history.state => 存储当前页面的状态history.pushState()    //  流转到指定状态页面
history.replaceState() //  替换当前的状态//    手写location对象

navigator

navigator.userAgent
获取当前用户基础信息 UA读取信息 => 数据采集 / 流量监控 / 浏览器兼容性优化 剪切板 / 键盘 => 如何做剪切板 / 监听键盘输入

screen

//    表示显示区域 -- 屏幕//    判断区域大小
1. window 视窗判断:
全局入口window.innerHeightwindow.innerWidth文本处获取(元素本身的宽高)document.documentElement.clientHeightdocument.documentElement.clientWidthdocument.body.clientHeightdocument.body.clientWidth网页size类型 => 
offsetHeight / offsetWidth = clientHeight + 边框 + 滚动条document.documentElement.offsetHeightdocument.documentElement.offsetWidthdocument.body.offsetHeightdocument.body.offsetWidth    定位类型 => 
scrollLeft / scrollTop - 相对概念 距离常规位置(左上角)滚动距离
offsetLeft / offsetTop - 距离常规位置的距离document.documentElement.offsetHeightdocument.documentElement.offsetWidthdocument.body.offsetHeightdocument.body.offsetWidth    集大成者
el.getBoundingClientRect() - .top / .left / .bottom / .right
* 兼容性 -IE中会多2px

在这里插入图片描述

event事件模型

<div><p>Click</p>
</div>
// 冒泡(由深到浅) p => div => body => HTML => document
// 捕获(由浅入深) document => HTML => body => div => p//  监听事件  事件名,监听到后的回调,是否捕获
el.addEventListener(eventName, function, useCapture)//  1. 如何阻止事件的传播
event.stopPropagation();
//  阻止默认事件的传播 => 无法阻止默认事件的发生【例如a标签跳转...】//  2. 如何阻止默认事件传播
event.preventDefault(); //  3. 阻止相同节点绑定多个同类事件 => 兼容 & 性能
event.stopImmediatePropagation();//  4. 手写,实现一个多浏览器兼容的事件绑定
//  attachEvent vs addEventListener
//  区别:
//  a. 传参 attachEvent使用onXXX addEventListener用字符串
//  b. 执行顺序, attachEvent - 后绑定 先执行
//  addEventListener - 先绑定 先执行
//  c. 解绑不同 detachEvent vs removeEventListener
//  d. 阻断不同 e.cancelBubble = true vs e.stopPropagation();
//  e. 阻断默认事件 e.returnValue = false vs  e.preventDefault();/** 手写代码  */
class BindEvent {constructor(element) {this.element = element;}addEventListenerr = (type, handler) => {if (this.element.addEventListener) {this.element.addEventListener(type, handler, false);} else if (this.element.attachEvent) {const element = this.element;this.element.attachEvent('on' + type, () => {handler.call(element);})} else {this.element['on' + type] = handler;}}removeEventListener = (type, handler) => {if (this.element.removeEventListener) {this.element.removeEventListener(type, handler, false);} else if (this.element.detachEvent) {this.element.detachEvent('on' + type, handler);} else {this.element['on' + type] = null;}}static stopPropagation(event) {if (event.stopPropagation) {event.stopPropagation();} else {event.cancelBubble = true;}}static preventDefault(event) {if (event.preventDefault) {event.preventDefault();} else {event.returnValue = false;}}}//  5. 性能 - 事件代理
<ul class="list"><li></li><li></li><li></li>
</ul>const list = document.querySelector('.list');function onClick(event) {let event = event || window.event;if (event.target.nodeName.toLowerCase() === 'li') {const liList = this.querySelector('li');const index = [...liList].indexOf(event.target);}
}list.addEventListener('click', onClick, false);

网络层

//  实例化
const xhr = new XMLHttpRequest();//  初始化连接 建立连接
xhr.open(method, url, async)//  end发送请求
xhr.send(data);    // data - encodeURIComponent//  接收
xhr.reradyStatus
// 0 - 尚未调用open方法
// 1 - 已经调用了open
// 2 - 已经send
// 3 - 已经收到请求的返回数据了
// 4 - 请求已完成
xhr.onreadystateChange = () => {if (xhr.readyStatus === 4) {if (xhr.status >= 200 && xhr.status <= 300 ||xhr.status === 304) {console.log('success', xhr.responseText);}}
}//  超时时间
xhr.timeout = 1000;
xhr.ontimeout = () => {//  超时操作
}//   面试方向
1. Restful - GET POST PUT DELETE
2. 跨域 - CORS / JSONP
3. 状态码 => 3xx (浏览器缓存概念) => 强缓存 / 协商缓存

DOM - 【Document】浏览器视窗内html文本的相关操作

EMCAScript - ES - JS


http://www.ppmy.cn/news/1426034.html

相关文章

SpringCloud本地多网卡,服务注册地址处理

问题 Spring Cloud指定服务注册地址Dubbo指定服务注册地址 Spring Cloud指定服务注册地址 在bootstrap.yaml中写入如下内容&#xff0c;192.168.xxx.xxx是需要注册到注册中心的服务ip&#xff0c;也可以写成网段192.168.10.xxx spring:cloud:inetutils:preferred-networks: &…

Edge 浏览器的使用心得与深度探索

前言 Edge 浏览器是微软推出的一款现代化网络浏览器&#xff0c;旨在提供更快、更安全、更智能的网络浏览体验。作为一名前端开发者和网页浏览者&#xff0c;我在长期使用 Edge 浏览器的过程中积累了一些使用心得和对其功能的深度探索。在本文中&#xff0c;我将分享我对 Edge…

element-ui form表单自定义label的样式、内容

element-ui form表单自定义label的样式、内容 效果截图 代码 <el-form size"small" :inline"true" label-width"120px"><el-form-item prop"name"><div slot"label"><i style"color: red;"…

最小生成树算法的实现c++

最小生成树算法的实现c 题目链接&#xff1a;1584. 连接所有点的最小费用 - 力扣&#xff08;LeetCode&#xff09; 主要思路&#xff1a;使用krusal算法&#xff0c;将边的权值进行排序&#xff08;从小到大排序&#xff09;&#xff0c;每次将权值最小且未加入到连通分量中…

基于微信小程序投票评选系统的设计与实现(论文+源码)_kaic

摘 要 社会发展日新月异&#xff0c;用计算机应用实现数据管理功能已经算是很完善的了&#xff0c;但是随着移动互联网的到来&#xff0c;处理信息不再受制于地理位置的限制&#xff0c;处理信息及时高效&#xff0c;备受人们的喜爱。所以各大互联网厂商都瞄准移动互联网这个潮…

Script file ‘D:\Anaconda\Scripts\pip-script.py‘ is not present.

报错解释&#xff1a; 这个错误表明系统尝试执行的脚本文件 D:\Anaconda\Scripts\pip-script.py 不存在。这通常发生在尝试使用 pip 时&#xff0c;但 pip 没有正确安装或者路径设置不正确时。 解决方法&#xff1a; 确认 pip 是否已经安装在 Anaconda 中。可以通过 Anaconda…

C语言经典例题(22)

文章目录 1.简单计算器2.获得月份天数3.HTTP状态码4. 图像相似度5.有序序列插入一个数 1.简单计算器 题目描述&#xff1a; KK实现一个简单计算器&#xff0c;实现两个数的“加减乘除”运算&#xff0c;用户从键盘输入算式“操作数1运算符操作数2”&#xff0c;计算并输出表达…

内存管理(C/C++)

✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ &#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1…