bom浏览器对象模型

    bom由一系列相关的对象构成并且每个对象都提供了很多方法属性
    bom顶级对象是window
    bom是浏览器产商在各自浏览器上定义的,兼容性差
    window具有双重角色,他是一个全局对象.定义在全局作用域中的变量、函数都会变成window对象的属性和方法,但是在调用的时候可以省略window

窗口加载事件

    window.onload当前页面文档加载完成后会触发该事件,在页面中只能写一次,如果有多个就以最后一个为准
    可以换成window.addEventListener('load',function(){})则没有限制
    如果网页中图片特别多可以用document.addEventListener('DOMContentLoaded',function(){})
    DOMContentLoaded是DOM加载完毕,不包含图片,falsh,css等就可以执行 加载速度比load快一些
  1. <button>点击</button>
  2. window.onload = function () {
  3. var btn = window.document.querySelector('button')
  4. btn.onclick = function () {
  5. alert('ok')
  6. }
  7. }
  8. window.addEventListener('load', function () {
  9. var btn = window.document.querySelector('button')
  10. btn.onclick = function () {
  11. alert('ok')
  12. }
  13. })

调整窗口大小事件

    window.onresize=function(){} 只要窗口大小发生了变化就会触发该事件
    window.addEventListener('resize',function(){})
  1. <div class="box">123</div>
  2. var box = document.querySelector('.box')
  3. window.addEventListener('resize', function () {
  4. if (window.innerWidth <= 800) {
  5. box.style.display = 'none'
  6. } else {
  7. box.style.display = 'block'
  8. }
  9. })

两种定时器

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

    这个window在调用的时候可以省略
    这个延迟单位是毫秒 默认就是0
    这个调用函数可以直接写函数 还可以写函数名 还有一种方法是setTimeout('fn()', 3000)但是不提倡
    页面中有很多的定时器 我们可以给定时器加标识符
    setTimeout这个函数也叫回调函数callback

注意

 如果页面中有多个定时器在循环使用如果不去除会导致定时器越来越多
  1. setTimeout(function () {
  2. console.log('ok');
  3.  
  4. }, [2000])
  5.  
  6. function fn() {
  7. console.log('okk');
  8. }
  9. var times1 = setTimeout(fn, 3000)
  10. var times2 = setTimeout('fn()', 3000)
  1. var t = 3000;
  2. fn1()
  3. function fn1() {
  4. imgs[0].style.display = 'block'
  5. imgs[1].style.display = 'none'
  6. imgs[2].style.display = 'none'
  7. times1 = setInterval(fn2, t)
           clearInterval(times3)
  8. }
  9.  
  10. function fn2() {
  11. imgs[0].style.display = 'none'
  12. imgs[1].style.display = 'block'
  13. times2 = setInterval(fn3, t)
  14. clearInterval(times1)
  15. }
  16.  
  17. function fn3() {
  18. imgs[0].style.display = 'none'
  19. imgs[1].style.display = 'none'
  20. imgs[2].style.display = 'block'
  21. times3 = setInterval(fn1, t)
  22. clearInterval(times2)
  23. }
  24.  
  25. })

案例

  1. <!-- 五秒之后自动关闭广告 -->
  2. <img src="../imges/u=3568135932,2181685849&fm=26&gp=0.jpg" alt="" class="ad">
  3. var ad = document.querySelector('.ad')
  4. setTimeout(function () {
  5. ad.style.display = 'none'
  6. }, 5000)

效果图

停止setTimeout()定时器

    window.clearTimeout(定时器的名称)

案例

  1. <button class="btn">点击</button>
  2. var btn = document.querySelector('.btn')
  3. var times = setTimeout(function () {
  4. console.log('lll');
  5.  
  6. }, 6000)
  7. btn.addEventListener('click', function () {
  8. clearTimeout(times)
  9. })
  1. <button class="begin">开启</button>
  2. <button class="stop">停止</button>
  3. var begin = document.querySelector('.begin')
  4. var stop = document.querySelector('.stop')
  5. var times = null;
  6. begin.addEventListener('click', function () {
  7. times = setInterval(function () {
  8. console.log('你好吗');
  9. }, 1000)
  10. })
  11. stop.addEventListener('click', function () {
  12. clearTimeout(times)
  13. })

效果图

window.setInterval(调用函数,[延迟的毫秒数])

    方法和setTimeout十分相同
    每隔这个延迟时间就去调用这个回调函数,会调用很多次,重复调用这个函数

案例

    <!-- 京东倒计时案例 -->
  1. <div class="box2">
  2. <span class="hour">1</span>
  3. <span class="minute">2</span>
  4. <span class="second">3</span>
  5. </div>
  6. var hour = document.querySelector('.hour')
  7. var minute = document.querySelector('.minute')
  8. var second = document.querySelector('.second')
  9. var inputTime = +new Date('2020-4-9 18:00:00')
  10.  
  11. conutDown() //先调用一次防止第一次刷新页面有空白
  12.  
  13. // 开启定时器
  14. setInterval(conutDown, 1000)
  15.  
  16. function conutDown() {
  17. var nowTime = +new Date()
  18. var times = (inputTime - nowTime) / 1000; //剩余时间的秒数
  19. var d = parseInt(times / 60 / 60 / 24) //天
  20. d = d < 10 ? '0' + d : d;
  21. var h = parseInt(times / 60 / 60 % 24) //时
  22. h = h < 10 ? '0' + h : h;
  23. hour.innerHTML = h;
  24. var m = parseInt(times / 60 % 60) //分
  25. m = m < 10 ? '0' + m : m;
  26. minute.innerHTML = m;
  27. var s = parseInt(times % 60) //秒
  28. s = s < 10 ? '0' + s : s;
  29. second.innerHTML = s;
  30. }

效果图

JS 窗口加载与定时器笔记的更多相关文章

  1. AMD加载器实现笔记(二)

    AMD加载器实现笔记(一)中,我们实现了一个简易的模块加载器.但到目前为止这个加载器还并不能称为AMD加载器,原因很简单,我们还不支持AMD规范中的config配置.这篇文章中我们来添加对config ...

  2. 转:web前端面试题合集 (Javascript相关)(js异步加载详解)

    1. HTTP协议的状态消息都有哪些? 1**:请求收到,继续处理2**:操作成功收到,分析.接受3**:完成此请求必须进一步处理4**:请求包含一个错误语法或不能完成5**:服务器执行一个完全有效请 ...

  3. sea.js模块加载工具

    seajs的使用 seajs是一个jS模块加载器,由淘宝前端架构师玉伯开发,它可以解决命名空间污染,文件依赖的问题.可以在一个js文件中引入另外一个js.require('a.js') 1.安装 np ...

  4. js 模版加载到前端

    js 模版加载到前端 简单有效不高端 配个路由 /js/:filename ,  用 readTemplate 响应请求,前端可以按模块方式直接 require 模板 'use strict' var ...

  5. 前端设计中关于外部js文件加载的速度优化

    在一般情况下,许多人都是将<script>写在了<head>标签中,而许多浏览器都是使用单一的线程来加载js文件的,从上往下,从左往右. 若是加载过程出错,那么网页就会阻塞,就 ...

  6. js动态加载以及确定加载完成的代码

    利用原生js动态加载js文件到页面,并在确定加载完成后调用相关function var otherJScipt = document.createElement("script") ...

  7. 第三课:sea.js模块加载原理

    模块加载,其实就是把js分成很多个模块,便于开发和维护.因此加载很多js模块的时候,需要动态的加载,以便提高用户体验. 在介绍模块加载库之前,先介绍一个方法. 动态加载js方法: function l ...

  8. js资源加载优化

    互联网应用或者访问量大的应用,对js的加载优化是不可少的.下面记录几种优化方法 CDN  + 浏览器缓存 CDN(content delivery network)内容分发网络, 最传统的优化方式.其 ...

  9. 判断JS是否加载完成

    在正常的加载过程中,js的加载都是同步的,也就是在加载过程中,浏览器会阻塞接下来的内容的加载.这时候我们就要用到动态加载,动态加载是异步的,如果我们在后边要用到这个动态加载的js文件里的东西,就要保证 ...

随机推荐

  1. celery 基础教程(一):工作流程,架构以及概念

    1.工作流程 celery通过消息进行通信,通常使用一个叫Broker(中间人)来协client(任务的发出者)和worker(任务的处理者). clients发出消息到队列中,broker将队列中的 ...

  2. 数据可视化之PowerQuery篇(十四)产品关联度分析

    https://zhuanlan.zhihu.com/p/64510355 逛超市的时候,面对货架上琳琅满目的商品,你会觉得这些商品的摆放,或者不同品类的货架分布是随机排列的吗,当然不是. 应该都听说 ...

  3. 精通java并发-wait,notify和notifyAll的总结(含案例)

    目前CSDN,博客园,简书同步发表中,更多精彩欢迎访问我的gitee pages wait,notify和notifyAll 总结 在调用wait方法时,线程必须要持有被调用对象的锁,当调用wait方 ...

  4. 06-Python元组,列表,字典,集合数据结构

    一.简介 数据结构是我们用来处理一些数据的结构,用来存储一系列的相关数据. 在python中,有列表,元组,字典和集合四种内建的数据结构. 二.列表 用于存储任意数目.任意类型的数据集合.列表是内置可 ...

  5. P3913 车的攻击

    大致题意: 求出被车攻击到的格子 基本思路: 如果直接暴力出奇迹的话是存不下的, 所以就以另外的思路来想. 容斥原理! 我们可以先把那些在同一行或同一列的车去重,然后把去重后的行数列数记作cntx,c ...

  6. 深度学习趣谈:什么是迁移学习?(附带Tensorflow代码实现)

    一.迁移学习的概念 什么是迁移学习呢?迁移学习可以由下面的这张图来表示: 这张图最左边表示了迁移学习也就是把已经训练好的模型和权重直接纳入到新的数据集当中进行训练,但是我们只改变之前模型的分类器(全连 ...

  7. kubernetes+Azure DevOps实现.Net Core项目的自动化部署&均衡负载

    1. 前言 2. Net Core项目本身的准备 2.1 dockerfile 2.2 创建kubernetes用于helm的chart包 2.2.1 说明 2.2.2 chart文件目录和文件组成 ...

  8. cropper.js 二次开发:截图并下载图片

    cropper.js 是一个基于jquery的图片截取库. 参考:https://blog.csdn.net/weixin_38023551/article/details/78792400 我的代码 ...

  9. Netty 学习笔记(3) ------ ChannelPipeline 和 ChannelHandler

    ChannelPipeline通过责任链设计模式组织逻辑代码(ChannelHandler),ChannelHander就如同Servlet的Filter一样一层层处理Channel的读写数据. Ch ...

  10. Go语言基础语法总结

    1. 认识HelloWorld 在前面的<Go的安装和使用>这篇文章中已经写过HelloWorld.go了,现在就来逐行认识一下它. package main import "f ...