当前位置: 首页 > news >正文

【JavaScript】JavaScript开篇基础(6)

1.❤️❤️前言~🥳🎉🎉🎉

Hello, Hello~ 亲爱的朋友们👋👋,这里是E绵绵呀✍️✍️。

如果你喜欢这篇文章,请别吝啬你的点赞❤️❤️和收藏📖📖。如果你对我的内容感兴趣,记得关注我👀👀以便不错过每一篇精彩。

当然,如果在阅读中发现任何问题或疑问,我非常欢迎你在评论区jj指正🗨️🗨️。让我们共同努力,一起进步!

加油,一起CHIN UP!💪💪

🔗个人主页:E绵绵的博客
📚所属专栏:

1. JAVA知识点专栏

        深入探索JAVA的核心概念与技术细节

2.JAVA题目练习

        实战演练,巩固JAVA编程技能

3.c语言知识点专栏

        揭示c语言的底层逻辑与高级特性

4.c语言题目练习

        挑战自我,提升c语言编程能力

5.Mysql数据库专栏

        了解Mysql知识点,提升数据库管理能力

6.html5知识点专栏

        学习前端知识,更好的运用它

7. css3知识点专栏

        在学习html5的基础上更加熟练运用前端

8.JavaScript专栏

        在学习html5和css3的基础上使我们的前端使用更高级

📘 持续更新中,敬请期待❤️❤️

2. BOM

BOM(Browser Object Model)浏览器对象模型,他提供了独立于内容而与浏览器窗口进行交互的对象,其核心对象是window

BOM 是由一系列相关的对象构成,并且每个对象都提供了很多方法与属性。

3.窗口加载事件

window.onload,是窗口(页面)加载事件,当文档内容完全加载完成会触发该事件(包括图像、脚本文件、css文件等),就调用处理函数。

因为js是由上到下依次执行的,一般来说,我们需要按照先写标签,然后将script标签写在标签的下面的方式,但是我们可以通过window.onload来改变script标签的位置,将其放在标签上面,因为这个方法会在页面加载完毕之后才执行,所以执行这个方法的时候,页面中的DOM元素已经全部被渲染了。

<body><script>window.onload = function () {var btn = document.querySelector('button');btn.addEventListener('click',function () {alert('你点我?');})}</script><button>点击</button>
</body>

在以上代码中,我们没有按照之前的标准,将script标签写在button标签下面,但是依旧是可用的。

如果页面中存在多个window.onload,会以最后一个为准(最后一个会覆盖前面的事件)

这是传统事件存在的弊端,为了解决这一问题,我们可以使用监听事件替换window.onload

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

这样就可以添加多个事件。

如果页面的图片非常多,那么用原来的onload要等很久等图片加载完才能执行该行为,这就会造成错误了。那么推荐使用以下方式。

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

 DOMContentLoaded 事件触发时,仅当html中元素加载完成,不包括css中代码、图片、flash等,这样就很快了。

4.setTimeout 定时器和setInterval() 定时器

window.setTimeout(调用函数,延迟的毫秒数);

  1. window在调用的时候可以省略
  2. 单位是毫秒,省略是0秒,也就是立马执行
  3. 这个调用函数可以直接写函数,还可以写函数名(不需要带括号)

window.setInterval(调用函数,间隔毫秒数)

语法规则上与上述很相似,但与setTimeout()不同的是,setTimeout只会执行一次,但是setInterval会循环执行

5.清除定时器setTimeout()setInterval() 

使用clearTimeout(定时器名称)函数可以清除setTimeout定时器,请看如下代码

<body><button>点我清除定时器</button><script>var btn = document.querySelector('button');var timer1 = setTimeout(function () {alert('我是Jim.kk');},5000);btn.onclick = function () {clearTimeout(timer1);}</script>
</body>

注意在执行settimeout时给定时器名称很重要,因为当要清除它时,我们需要用到名称,执行setinterval时同理。


使用clearInterval(定时器名称)函数可以清除setInterval定时器。这里同理 

6.同步与异步 

JavaScript是单线程,所以同个时间只能处理同个任务,所有任务都需要排队,前一个任务执行完,才能继续执行下一个任务,但是,如果前一个任务的执行时间很长,后一个任务就不得不等着,当用户向后台获取大量的数据时,不得不等到所有数据都获取完毕才能进行下一步操作,用户只能在那里干等着,严重影响用户体验。
因此,JavaScript在设计的时候,就已经考虑到这个问题,主线程可以完全不用等待时间长的任务,可以先挂起处于等待中的任务,先运行排在后面的任务,再回过头执行挂起的时间长的任务。因此,任务就可以分为同步任务和异步任务。


其实同步和异步,
无论如何,做事情的时候都是只有一条流水线(单线程),
同步和异步的差别就在于这条流水线上各个流程的执行顺序不同。

同步任务是指在主线程上排队执行的任务,只有前一个任务执行完毕,才能继续执行下一个任务

异步任务是指不进入主线程,而进入任务队列的任务,只有任务队列通知主线程,某个异步任务可以执行了,该任务才会进入主线程


 注意如果要进入异步任务中,必须为回调函数,一般而言,回调函数有以下三种类型:

1、普通事件,如click、resize等
2、资源加载,如load、error等

3、定时器,包括setlnterval、setTimeout等

 <script>setTimeout(function(){console.log(3);},5000)console.log(1);console.log(2);</script>

执行顺序是这样的,先输出1和2等待5秒后输出3.


1. 先执行执行栈中的同步任务
2. 遇到异步任务(回调函数)就放入任务队列中
3. 一旦执行栈中的同步任务执行完毕,系统就会按次序读取任务队列中的异步任务,被读取的异步任务结束等待状态,进入执行栈开始执行。 

总的来说,JavaScript的异步机制包括以下几个步骤:

1. 所有同步任务都在主线程上执行,形成一个执行栈。
2. 主线程之外,还存在一个任务队列,只要异步任务有了结果,就会在任务队列中放置一个事件
3. 一旦执行栈中的所有同步任务执行完毕,系统就会读取任务队列,将可运行的异步任务添加到可执行栈中,然后执行。
4. 主线程不断的重复上面的第三步

7.窗口大小变化事件

window.onresize = functoin(){}
或者
window.addEventListener('resize',function () {} )

 只要文档页面大小发生变化,就会触发里面的处理函数。


<body><button>当宽度小于900px的时候,我就消失啦</button><script>window.addEventListener('resize',function () {// console.log('变化了');// console.log('内高:'+window.innerHeight+'\t内宽' + window.innerWidth);var btn = document.querySelector('button');if ( window.innerWidth < 900 ) {btn.style.display = 'none';} else {btn.style.display = 'block';}})</script>
</body>

以上代码的执行效果:当我们改变浏览器框的大小的时候,当宽度小于900px,这个button按钮就会消失。

这种效果常用在一些页面元素渲染上,比如原本有四个列的某种元素,但是当页面较窄的时候,我们会隐藏其中某个列,以保证页面的正常显示。


注意innerheight指的是文档页面的高度,innerwidth指的是文档页面的宽度。

8.location对象 

window对象给我们提供了一个location属性用于获取或设置窗体的URL.

以下是它属性: 

这里我们只需要记住href和search 。


http://127.0.0.1:8848/testshare/location.html?lang=en&name=zhangsan#test/most

这是一个url地址。

href得到的就是这个全部url,而我们search得到的便是?后面的字符串。

href我们可以利用它去跳转页面,将其他url赋值给它就行。

search我们可以利用它得到参数。


以下是它方法: 

Location.reload() 方法用来刷新当前页面。该方法只有一个参数,当值为 true 时,则强制刷新,强制刷新不会保留缓存。当值为 false 或者未传参时,浏览器刷新后内容依旧不变。 

Location.assign()方法会触发窗口加载并显示指定的URL的内容

document.location.assign('https://www.baidu.com');

Location.replace() 方法以给定的URL来替换当前的资源。 与assign() 方法不同的是,调用 replace() 方法后,之前页面不会保存到会话历史中,这样,用户点击回退按钮时,将不会再跳转回该页面,而assign可以回退到之前页面。

9.history对象

该对象可以控制历史记录。 


back和forward均是前进和后退一格,而go可以很多格,它们前面均是history。

http://www.lryc.cn/news/485082.html

相关文章:

  • Spark RDD、DStream、DataFrame、DataSet 在窗口操作上的区别
  • http自动发送请求工具(自动化测试http请求)
  • 网络IP地址会经常换吗?深入解析与实操指南
  • MapLocNet由粗到细的定位网络
  • 【Docker】Mac安装Docker Desktop导致磁盘剩余空间较少问题如何解决?
  • 构建客服知识库:企业效率提升的关键步骤
  • java-Day06 内部类 Lambda表达式 API
  • Springboot配置全局异常通用返回
  • 计算机视觉在自动驾驶汽车中的应用
  • wordpress functions文件的作用及详细说明
  • Cellebrite VS IOS18Rebooting
  • [每日一氵] PySpark 的 log GC 部分是什么意思
  • Transformer中的算子:其中Q,K,V就是算子
  • JWTUtil工具类
  • 【eNSP】企业网络架构实验——vlan间的路由通信(三)
  • 软件测试基础二十九 (接口测试 mock)
  • Learning RAG and Ragas
  • Java项目实战II基于微信小程序的实习记录(开发文档+数据库+源码)
  • GIT将源码推送新分支
  • Python习题 250:删除空文件夹
  • 基本数据类型:Kotlin、Dart (Flutter)、Java 和 C++ 的比较
  • 源码解析-Spring Eureka(更新ing)
  • python调用百度通用翻译API
  • Timeline动画「硬切」的问题
  • CentOS 9 配置网卡
  • redis7.x源码分析:(2) adlist双向链表
  • KUKU FM 音频Linux平台免费下载工具
  • 《Django 5 By Example》阅读笔记:p105-p164
  • 网络延迟对Python爬虫速度的影响分析
  • 微信小程序内嵌h5页面(uniapp写的),使用uni.openLocation无法打开页面问题