WebAPIs-第04天笔记(一)

简介: WebAPIs-第04天笔记

学习目标:

能够说出常用的3-5个键盘事件

能够知道如何获取当前键盘按下的是哪个键

能够知道浏览器的顶级对象window

能够使用window.onload事件

能够使用window.onresize事件

能够说出两种定时器的区别

能够使用location对象的href属性完成页面之间的跳转

能够使用location对象获取url中的参数部分

能够使用history提供的方法实现页面刷新


1.1. 常用的键盘事件


1.1.1 键盘事件

43d06927b5754316a4eb1b5ae1a395e5.png

95847f238cbf4616a957255abbdf3a2c.png

    <script>
        // 常用的键盘事件
        //1. keyup 按键弹起的时候触发 
        document.addEventListener('keyup', function() {
            console.log('我弹起了');
        })
        //3. keypress 按键按下的时候触发  不能识别功能键 比如 ctrl shift 左右箭头啊
        document.addEventListener('keypress', function() {
                console.log('我按下了press');
        })
        //2. keydown 按键按下的时候触发  能识别功能键 比如 ctrl shift 左右箭头啊
        document.addEventListener('keydown', function() {
                console.log('我按下了down');
        })
        // 4. 三个事件的执行顺序  keydown -- keypress -- keyup
    </script>


1.1.2 键盘事件对象

557a8b4526ed45e6942887a6327d25f2.png

0a9bd420dd9a4687a2c35211466acf0f.png


使用keyCode属性判断用户按下哪个键

    <script>
        // 键盘事件对象中的keyCode属性可以得到相应键的ASCII码值
        document.addEventListener('keyup', function(e) {
            console.log('up:' + e.keyCode);
            // 我们可以利用keycode返回的ASCII码值来判断用户按下了那个键
            if (e.keyCode === 65) {
                alert('您按下的a键');
            } else {
                alert('您没有按下a键')
            }
        })
        document.addEventListener('keypress', function(e) {
            // console.log(e);
            console.log('press:' + e.keyCode);
        })
    </script>

image.png


1.1.3 案例:模拟京东按键输入内容


当我们按下 s 键, 光标就定位到搜索框(文本框获得焦点)。

9d87c35812ce4032a2c75bcc07d8fa7e.png


注意:触发获得焦点事件,可以使用 元素对象.focus()


    <input type="text">
    <script>
        // 获取输入框
        var search = document.querySelector('input');
    // 给document注册keyup事件
        document.addEventListener('keyup', function(e) {
            // 判断keyCode的值
            if (e.keyCode === 83) {
                // 触发输入框的获得焦点事件
                search.focus();
            }
        })
    </script>


1.1.4 案例:模拟京东快递单号查询


要求:当我们在文本框中输入内容时,文本框上面自动显示大字号的内容。

53800fc593ba45a5b8354eba79280e7e.png

ad4e8b6eff1248ec8a14697c45a7e0a9.png

    <div class="search">
        <div class="con">123</div>
        <input type="text" placeholder="请输入您的快递单号" class="jd">
    </div>
    <script>
        // 获取要操作的元素
        var con = document.querySelector('.con');
        var jd_input = document.querySelector('.jd');
    // 给输入框注册keyup事件
        jd_input.addEventListener('keyup', function() {
        // 判断输入框内容是否为空
                if (this.value == '') {
                    // 为空,隐藏放大提示盒子
                    con.style.display = 'none';
                } else {
                    // 不为空,显示放大提示盒子,设置盒子的内容
                    con.style.display = 'block';
                    con.innerText = this.value;
                }
            })
        // 给输入框注册失去焦点事件,隐藏放大提示盒子
        jd_input.addEventListener('blur', function() {
                con.style.display = 'none';
            })
        // 给输入框注册获得焦点事件
        jd_input.addEventListener('focus', function() {
            // 判断输入框内容是否为空
            if (this.value !== '') {
                // 不为空则显示提示盒子
                con.style.display = 'block';
            }
        })
    </script>


1.2. BOM


1.2.1. 什么是BOM


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


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


BOM 缺乏标准,JavaScript 语法的标准化组织是 ECMA,DOM 的标准化组织是 W3C,BOM 最初是Netscape 浏览器标准的一部分。

781a64b7e5e541b9b418ebdc2ca681fb.png


1.2.2. BOM的构成


BOM 比 DOM 更大,它包含 DOM。

3ee9b01f4adb4982a73ac1831710a477.png


1.2.3. 顶级对象window

// window 对象是浏览器的顶级对象,它具有双重角色。
// 它是 JS 访问浏览器窗口的一个接口。
// 它是一个全局对象。定义在全局作用域中的变量、函数都会变成 window 对象的属性和方法。
// 在调用的时候可以省略 window,前面学习的对话框都属于 window 对象方法,如 alert()、prompt() 等。
// 注意:window下的一个特殊属性 window.name !!!


1.2.4. window对象的常见事件


页面(窗口)加载事件(2种)


第1种

// window.onload 是窗口(页面)加载事件,当文档内容完全加载完成会触发该事件(包括图像、脚本文件、CSS 文件等), 就调用的处理函数。
window.onload = function () {}
或者
window.addEventListener('load',function () {})


注意:

  1. 有了 window.onload 就可以把 JS 代码写到页面元素的上方,因为 onload 是等页面内容全部加载完毕,再去执行处理函数。
  2. window.onload 传统注册事件方式 只能写一次,如果有多个,会以最后一个 window.onload 为准。
  3. 如果使用 addEventListener 则没有限制


第2种

// DOMContentLoaded 
// DOMContentLoaded  仅只需要当DOM加载完成,就会触发改事件,不需要等待样式表,图片,flash等等外部资源的加载。
// 注意点:**IE9以上才支持!!!**
document.addEventListener('DOMContentLoaded',function(){})
    <script>
        window.addEventListener('load', function() {
            var btn = document.querySelector('button');
            btn.addEventListener('click', function() {
                alert('点击我');
            })
        })
        window.addEventListener('load', function() {
            alert(22);
        })
        document.addEventListener('DOMContentLoaded', function() {
            alert(33);
        })
    </script>


如果页面的图片很多的话, 从用户访问到onload触发可能需要较长的时间, 交互效果就不能实现,必然影响用户的体验,此时用 DOMContentLoaded 事件比较合适。


区别


1.load 等页面内容全部加载完毕,包含页面dom元素 图片 flash css 等等。

2.DOMContentLoaded 是DOM 加载完毕,不包含图片 falsh css 等就可以执行 加载速度比 load更快一些。


调整窗口大小事件

window.onresize = function(){} 
或者
window.addEventListener("resize",function(){});
// window.onresize 是调整窗口大小加载事件,  当触发时就调用的处理函数。


注意:

  1. 只要窗口大小发生像素变化,就会触发这个事件。
  2. 我们经常利用这个事件完成响应式布局。 window.innerWidth 当前屏幕的宽度


    <script>
        // 注册页面加载事件
        window.addEventListener('load', function() {
            var div = document.querySelector('div');
          // 注册调整窗口大小事件
            window.addEventListener('resize', function() {
                // window.innerWidth 获取窗口大小
                console.log('变化了');
                if (window.innerWidth <= 800) {
                    div.style.display = 'none';
                } else {
                    div.style.display = 'block';
                }
            })
        })
    </script>
    <div></div>


1.2.5. 定时器(两种)


window 对象给我们提供了 2 个非常好用的方法-定时器。

1.setTimeout()
2.setInterval()  


setTimeout() 炸弹定时器

开启定时器

e181abb204004f04b2232ee5406168ab.png

a09d1cc36488460db01290e41f93b90e.png

beaef268bf094272a704280ba5324123.png


普通函数是按照代码顺序直接调用。
简单理解: 回调,就是回头调用的意思。上一件事干完,再回头再调用这个函数。
例如:定时器中的调用函数,事件处理函数,也是回调函数。
以前我们讲的   element.onclick = function(){}   或者  element.addEventListener(“click”, fn);   里面的 函数也是回调函数。
    <script>
        // 回调函数是一个匿名函数
         setTimeout(function() {
             console.log('时间到了');
         }, 2000);
        function callback() {
            console.log('爆炸了');
        }
    // 回调函数是一个有名函数
        var timer1 = setTimeout(callback, 3000);
        var timer2 = setTimeout(callback, 5000);
    </script>


案例:5秒后关闭广告

7bec8ad5bffe4006968498a39c16ede0.png

<body>
    <img src="images/ad.jpg" alt="" class="ad">
    <script>
        // 获取要操作的元素
        var ad = document.querySelector('.ad');
    // 开启定时器
        setTimeout(function() {
            ad.style.display = 'none';
        }, 5000);
    </script>
</body>


停止定时器

e3e964d903fc439e8a1bb8b25426f287.png

e4e48c18e1ea419eac382c06c538595c.png

    <button>点击停止定时器</button>
    <script>
        var btn = document.querySelector('button');
    // 开启定时器
        var timer = setTimeout(function() {
            console.log('爆炸了');
        }, 5000);
    // 给按钮注册单击事件
        btn.addEventListener('click', function() {
            // 停止定时器
            clearTimeout(timer);
        })
    </script>


目录
相关文章
|
6月前
|
存储 安全 数据安全/隐私保护
第2期笔记
该文探讨数据要素的流转,包括采集、存储、加工等环节,以及数据外循环中面临的安全风险和权属问题。为建立信任,提出从主体信任转向技术信任。在数据流通中,期望实现原始数据不可见、使用可控可计量及数据可算不可识的隐私计算原则。为此,倡导通过开源降低门槛,以促进数据的安全流通。
|
6月前
|
机器学习/深度学习 算法 安全
第3期笔记
隐语架构包括产品层、算法层、计算层、资源管理层和硬件层。产品层旨在降低终端用户和集成商的成本,主要产品有SecretPad、多形态部署和SecretNote。算法层聚焦于PSI/PIR协议,提供高性能、轻量级解决方案,以及Data Analysis - SCAL,用于密态数据分析。联邦学习部分关注安全攻防和混合机器学习。计算层包括混合编辑调度框架RayFed和SPU,SPU提供密态计算能力,HEU是高性能同态加密库,而TEEU是可信执行环境相关的技术。资源管理层的Kuscia负责资源管理和任务调度。硬件层涉及互联互通和跨域管控,确保数据安全和流转控制。
|
6月前
|
存储 设计模式 Java
《HowTomcatWork》笔记总结(一)
《HowTomcatWork》笔记总结(一)
82 0
|
6月前
C++2.0(C++11) 笔记 二
C++2.0(C++11) 笔记 二
48 0
|
存储 编译器 C++
C++系列笔记(五)
C++系列笔记(五)
C++系列笔记(五)
|
JavaScript 前端开发
WebAPIs-第02天笔记(二)
WebAPIs-第02天笔记(二)
107 0
WebAPIs-第02天笔记(二)
|
缓存 JavaScript 前端开发
WebAPIs-第05天笔记(二)
WebAPIs-第05天笔记(二)
122 0
WebAPIs-第05天笔记(二)
|
存储 JavaScript Android开发
WebAPIs-第06天笔记(二)
WebAPIs-第06天笔记(二)
127 0
WebAPIs-第06天笔记(二)
|
移动开发 算法 数据库
WebAPIs-第02天笔记(一)
WebAPIs-第02天笔记
110 0
WebAPIs-第02天笔记(一)
|
程序员 编译器 C语言
C++系列笔记(七)
C++系列笔记(七)

相关实验场景

更多