js基础篇 10 更多事件 更多事件对象 更多元素方法 BOM this的指向 js执行机制 location navigator history

10 更多事件 更多事件对象 更多元素方法 BOM this的指向 js执行机制 location navigator history

更多事件

keyup

键盘事件 按键弹起

keypress

键盘事件 按键按下的时候触发 不能识别功能键 比如 ctrl shift 左右箭头

keydown

键盘事件 按键按下的时候触发 能识别功能键 比如 ctrl shift 左右箭头

keyup、keypress、keydown补充

三个事件的执行顺序 keydown – keypress – keyup

更多事件对象

e.keycode

键盘事件对象中的keyCode属性可以得到相应键的ASCII码值

  1. 我们的keyup 和keydown事件不区分字母大小写 a 和 A 得到的都是65
  2. 我们的keypress 事件 区分字母大小写 a 97 和 A 得到的是65

更多元素方法

focus()

使该元素获得焦点

例子

核心思路: 检测用户是否按下了s 键,如果按下s 键,就把光标定位到搜索框里面
使用键盘事件对象里面的keyCode 判断用户按下的是否是s键
搜索框获得焦点: 使用 js 里面的 focus() 方法

var search = document.querySelector('input');
document.addEventListener('keyup', function(e) {
    if (e.keyCode === 83) {
        search.focus();
    }
})

BOM

介绍

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

  • BOM有一系列相关对象组成,并且每个对象都提供了很多方法和属性

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

在这里插入图片描述

顶级对象window

所有全局的变量和函数都会变成window的属性和方法

不仅如此,window还包含着documentlocationnavigationscreenhistory

窗口加载事件
load

script标签一般位于body标签的最下方,原因是因为加载是按标签顺序来加载的,如果使用onload事件则可以将script标签位于任意位置。

  1. onload事件是等页面内容全部加载完毕再去执行处理函数
  2. 传统注册事件只能写一次,多个只生效最后一个所以应当善用addEventListener
例子
window.addEventListener('load', function() {
    var btn = document.querySelector('button');
    btn.addEventListener('click', function() {
        alert('点击我');
    })
})
DOMContentLoaded

DOMContentLoaded事件在DOM加载后触发,此时样式表,图片,flash等未必加载完成

有兼容性问题 ie 9以上支持

如果页面的样式表,图片,flash很多的话,从用户访问到onload触发可能需要较长的事件,交互不能实现必然影响体验,此时就应当使用DOMContentLoaded

例子
document.addEventListener('DOMContentLoaded', function() {
    var btn = document.querySelector('button');
    btn.addEventListener('click', function() {
        alert('点击我');
    })
})
调整窗口大小事件
resize

当窗口被调整大小时触发

相关属性

window.innerheight 返回窗口的文档显示区的高度。

window.innerwidth 返回窗口的文档显示区的宽度。

setTimeout

语法规范: window.setTimeout(调用函数, 延时时间);

  1. 这个window在调用的时候可以省略
  2. 这个延时时间单位是毫秒 但是可以省略,如果省略默认的是0
  3. 这个调用函数可以直接写函数 还可以写 函数名 还有一个写法 ‘函数名()’,但这种做法我们不推荐
  4. 页面中可能有很多的定时器,我们经常给定时器加标识符 (名字)
clearTimeout(timer)

清除setTimeout定时器

setInterval

语法规范: window.setInterval(调用函数, 延时时间);

clearInterval(timer)

清除setInterval定时器

setTimeout、setInterval补充

setTimeout 延时时间到了,就去调用这个回调函数,只调用一次 就结束了这个定时器
setInterval 每隔这个延时时间,就去调用这个回调函数,会调用很多次,重复调用这个函数

例子
手机号码: <input type="number"> <button>发送</button>
<script>
    // 按钮点击之后,会禁用 disabled 为true 
    // 同时按钮里面的内容会变化, 注意 button 里面的内容通过 innerHTML修改
    // 里面秒数是有变化的,因此需要用到定时器
    // 定义一个变量,在定时器里面,不断递减
    // 如果变量为0 说明到了时间,我们需要停止定时器,并且复原按钮初始状态
    var btn = document.querySelector('button');
    var time = 3; // 定义剩下的秒数
    btn.addEventListener('click', function() {
        btn.disabled = true;
        var timer = setInterval(function() {
            if (time == 0) {
                // 清除定时器和复原按钮
                clearInterval(timer);
                btn.disabled = false;
                btn.innerHTML = '发送';
            } else {
                btn.innerHTML = '还剩下' + time + '秒';
                time--;
            }
        }, 1000);
    })
</script>
补充

disabled=false可以使button不可点击

this的指向

this 指向问题 一般情况下this的最终指向的是那个调用它的对象

  1. 全局作用域或者普通函数中this指向全局对象window( 注意定时器里面的this指向window)
  2. 方法调用中谁调用this指向谁
  3. 构造函数中this指向构造函数的实例

例子

//1 window
console.log(this);
function fn() {
    console.log(this);

}
window.fn();
window.setTimeout(function() {
    console.log(this);
}, 1000);
// 2 方法调用中谁调用this指向谁
var o = {
    sayHi: function() {
      	console.log(this); // this指向的是 o 这个对象
    }
}
o.sayHi();
var btn = document.querySelector('button');
btn.onclick = function() {
     console.log(this); // this指向的是btn这个按钮对象
}
btn.addEventListener('click', function() {
    console.log(this); // this指向的是btn这个按钮对象
})
// 3. 构造函数中this指向构造函数的实例
function Fun() {
    console.log(this); // this 指向的是fun 实例对象
}
var fun = new Fun();

js执行机制

同步任务

同步任务都在主线程执行,形成一个执行栈

异步任务

js异步是通过回调函数实现的

一般而言异步任务有以下三种类型

  1. 普通事件 如click、resize等
  2. 资源加载 如load、error等
  3. 定时器,包括setInterval、setTimeout等

放到任务队列中

location

常用属性以及方法

location.href

获取或者设置url

location.host

返回主机(域名)

location.port

返回端口号 如果未写返回 空字符串

location.pathname

返回路径

location.search

返回参数

location.hash

返回片段(#后面的内容)

location.assign(url)

和href一样,可以跳转页面(重定向)记录浏览历史,所以可以实现后退功能

例子
location.assign('http://www.itcast.cn');
location.replace(url)

替换当前页面,不记录浏览历史,所以不可以实现后退功能

例子
location.replace('http://www.itcast.cn');
location.reload()

重新加载页面,相当于刷新,如果里面有参数true,则为强制刷新

获取url参数

步骤
前提

需要一个get请求发向需要获取url参数的html 例:url=http://127.0.0.1:8848/index.html

<form action="index.html">
    用户名: <input type="text" name="uname">
    <input type="submit" value="登录">
</form>

例:输入biang登录

操作

url=http://127.0.0.1:8848/index.html?uname=biang

  1. 先去掉url中的? substr(‘起始的位置’,截取几个字符);

    console.log(location.search); //?uname=biang
    var params = location.search.substr(1); 
    console.log(params);// uname=biang
    
  2. 利用=把字符串分割为数组 split(’=’);

    uservar arr = params.split('=');
    console.log(arr); // ["uname", "biang"]
    
  3. 把数据写入div中

    var div = document.querySelector('div');
    div.innerHTML = arr[1] + '欢迎您';
    

navigator

userAgent

以下来自百度百科

用户代理,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。

常见用法

在这里插入图片描述

history

用于于浏览器历史记录进行交互

back()

可以回退功能

forward()

前进功能

go(index)

前进后退功能 参数如果是1则前进1个界面 如果是-1则回退1个界面

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值