JS笔记

9.25

1.JS事件

特点:

1.特效是由事件触发的

2.事件源:任何一个html元素(节点)都是一个事件源,一个事件源可以添加多个事件

3.键盘事件:keypress键盘事件,keyup抬起,keydown按下

4.鼠标事件 文档:load加载 表单:focus获得焦点,blur失去焦点,submit提交事件,change改变事件

5.其他:scroll滚动事件,select start选择事件

2.JS触发事件的方式

方法一:直接添加

在js获取元素/标签
元素.事件名称 = 匿名函数 / function(){}
var oBox = document.querySelector('.box');
oBox.onclick = function(){
    console.log(oBox);
}

方法二:元素.事件名称 = 函数名称

var oBox = document.querySelector('.box');
oBox.onclick = changeColor;
function changeColor(){
    oBox.style.backgroundColor = 'red';
}

方法三:在html中触发 onclick = "代码段 / 函数调用" 如果是函数的调用,可以传递一个参数,this(表示的是当前的标签)

<div class="box" onclick="changeColor(this,'green')"></div>
<script>
function changeColor(getThis,color1){
    console.log(getThis);
    getThis.style.backgroundColor = color1;
}
</script>

3.事件的分类

3.1.鼠标事件

事件事件说明
onclick鼠标点击某个对象
ondblclick鼠标双击某个对象
onmouseover鼠标被移到某元素之上
onmouseout鼠标从某元素移开
onmousemove鼠标被移动
onmousedown某个鼠标按键被按下
onmouseup某个鼠标按键被松开
oncontextmenu右键事件
onmousewheel当滚轮被滚动的时候
onmouseenter鼠标进入
onmouseleave鼠标离开

onmouseenter 和 onmouseover的区别

1、onmouseover、onmouseout:鼠标经过时自身触发事件,经过其子元素时也触发该事件;(父亲有的东西,儿子也有) ,支持冒泡

2、onmouseenter、onmouseleave:鼠标经过时自身触发事件,经过其子元素时不触发该事件。(父亲的东西就是父亲的,不归儿子所有) ,不支持冒泡

3.2.键盘事件

事件说明
onkeypress[使用的比较少]键盘的某个键被按下
onkeydown键盘的某个键被按下或按住
onkeyup键盘的某个键被松开

一个onkeydown+onkeyup = 鼠标单击事件,想要区分键盘上的每个按键,是通过键盘的keyCode值来判断的,所以想要知道按下的是哪个按键,可以使用event.keyCode onkeydown 只要是按下的状态,就会一直触发当前事件 onkeyup 只有弹起的那一瞬间,才会触发 

// 简单案例,键盘按下输出1,键盘弹起输出2
document.onkeydown = function(){
    console.log(111111111);
}
document.onkeyup = function(){
    console.log(222222222);
}

获取对应的键盘值

document.onkeyup = function(){
    console.log(event.keyCode);
}

注意:js中的.style添加的是行内样式,获取的也是行内样式 默认情况下标签没有margin-left值的话,获取之后转为float类型的时候,会变成NaN,所以:记得给标签添加默认的行内css样式

当然最好的方法还是通过left,top这些值来改变元素的位置,这样代码会更简单

3.3.光标事件

事件说明
onfocus元素获得焦点
onblur元素失去焦点

 3.4.窗口事件

事件说明
onresize览器窗口被调整大小时发生

3.5.表单事件

事件说明
onsubmit提交按钮被点击
onreset重置按钮被点击
onselect文本内容被选定
onchange用户改变表单元素的内容
oninput在用户输入时触发

文本被选中

// 给多行文版框添加 选择的功能
var text = document.querySelector('textarea');
text.onselect = function(){
    console.log('123456789');
}

onchange 内容发生改变

// 只用多行文本发生会触发
text.onchange = function(){
    console.log('页面内容发生改变');
}
// 表单中的任意一个内容发生改变,都会触发onchange
var form1 = document.getElementById('form1');
form1.onchange = function(){
    console.log('change');
}

注意:onselect 属性可用于以下元素内:< input type="file" >、< input type="password">、< input type="text">、< keygen> 以及 < textarea>.

注意2:oninput事件类似于 onchange 事件。不同之处在于 oninput 事件在元素值发生变化是立即触发, onchange 在元素失去焦点时触发。另外一点不同是 onchange 事件也可以作用于 <keygen> 和 <select> 元素。

3.6.单选框和复选框被选中

复选框是否被选中需要判断复选框中的checked的值 true:选中 false:没选中

3.7.加载事件

事件说明
onload页面或图像加载完成
onbeforeunload页面卸载前执行

 表示没有 “无法读取null属性(读取'innerHTML')”,也就是没有获取到对象,这时候可以在所有js的代码外面天际onload的;表示,html页面内容加载完毕之后,在执行js代码

3.8.滚动事件

事件说明
onscroll窗口发生滚动
scrollTo滚动到指定位置【增加】

方法一: window.scrollTo(x-coord,y-coord) x-coord 是文档中的横轴坐标。 y-coord 是文档中的纵轴坐标。 比如: window.scrollTo(x-coord,y-coord) x-coord 是文档中的横轴坐标。 y-coord 是文档中的纵轴坐标。 比如:window.scrollTo(0,1000); // 垂直滚动到1000的位置

方法二: window.scrollTo(options) // option为对象格式 window.scrollTo(options) // option为对象格式 

1.top 等同于 y-coord

2.left 等同于 x-coord

3.behavior 类型String,表示滚动行为,支持参数 smooth(平滑滚动),instant(瞬间滚动),默认值auto,实测效果等同于instant

3.9.offset系列

  1. offsetLeft : 用于获取元素到最近的定位父盒子的左侧距离

    1. 计算方式: 当前元素的左边框的左侧到定位父盒子的左边框右侧

    2. 如果父级盒子没有定位, 那么会接着往上找有定位的盒子

    3. 如果上级元素都没有定位,那么最后距离是与body的left值

  2. offsetTop : 用于获取元素到最近定位父盒子的顶部距离

    1. 计算方式:当前元素的上边框的上侧到定位父盒子的上边框下侧

    2. 如果父级盒子没有定位,那么会接着往上找有定位的盒子

    3. 如果上级元素都没有定位,那么最后距离是与body的top值

  3. offsetWidth :用于获取元素的真实宽度(包括元素宽度、内边距和边框,不包括外边距)

  4. offsetHeight : 用于获取元素的真实高度(包括元素宽度、内边距和边框,不包括外边距)

  5. offsetParent :用于获取该元素中有定位的最近父级元素

    1. 如果当前元素的父级元素都没有进行定位,那么offsetParent为body

  6. offsetX:event.offsetX

  7. offsetY:event.offsetX

3.10.client系列 

  1. clientWidth : 元素的宽度(包括元素宽度、内边框,不包括边框和外边框)

  2. clientHeight: 元素的高度(包括元素宽度、内边框,不包括边框和外边框)

  3. clientX : 获取鼠标事件发生时的应用客户端区域的水平坐标 event.clientX

  4. clientY : 获取鼠标事件发生时的应用客户端区域的垂直坐标(不包含滚动上去的部分)

3.11.inner系列 

首先这两个属性是比较特殊的,只能由浏览器使用的。返回当前浏览器窗口大小所对应的宽高度

window.innerHeight (包含滚动条的宽度)

window.innerWidth

3.12.scroll系列

  1. scrollHeight :是一个只读属性,它返回该元素的像素高度(包含元素宽度、内边框,不包括边框和外边框),是一个整数,单位是像素 px

    1. 如果内容不足,就是元素的高度

  2. scrollWidth : 是一个只读属性,它返回该元素的像素高度(包含元素宽度,内边距(padding),不包含外边距(margin)、边框(border)),是一个整数,单位是像素 px

    1. 如果内容不足,就是元素的宽度

  3. scrollTop : onscroll事件发生时,元素向上卷曲出去的距离

    1. 标准浏览器生效: document.documentElement.scrollTop

    2. IE浏览器有效: document.body.scrollTop

  4. scrollLeft : onscroll事件发生时,元素向左卷曲出去的距离

  5. scrollIntoView 滚动元素的父容器

3.13.getBoundingClientRect() 

语法:Element.getBoundingClientRect()

返回值是一个 DOMRect 对象,这个对象是由该元素的 getClientRects() 方法返回的一组矩形的集合, 即:是与该元素相关的CSS 边框集合。

属性值

属性名属性值
top元素上边距离页面上边的距离
left元素右边距离页面左边的距离
right元素右边距离页面左边的距离
bottom元素下边距离页面上边的距离
width元素宽度
height元素高度

 

4.js中两种添加事件的方式

 4.1方式一 :on+事件名

// 添加事件关联
oneDiv.onclick = function() {
  console.log("+++++");
}
oneDiv.onclick = function() {
  console.log("-----");
}
// 取消事件关联
oneDiv.onclick = null;
oneDiv.onclick = false;

4.2.方法二:添加事件监听

语法1:element.addEventListener(event, function, useCapture)

Event: 必须。字符串,指定事件名。

注意: 不要使用 "on" 前缀。 例如,使用 "click" ,而不是使用 "onclick"。

Function: 必须。指定要事件触发时执行的函数。

useCapture: 可选。布尔值,(默认值, false. true 代表以事件捕获形式触发事件, false 代表以事件冒泡形式触发事件)

5.addEventListener()

与点击事件的添加近乎相同,存在兼容性问题

// 其他浏览器
oneDiv.addEventListener("click", fun1);
oneDiv.removeEventListener("click", fun1);
// IE 低版本浏览器
Ie浏览器中的on关键词不能少
oneDiv.attachEvent("onclick", fun1);
oneDiv.detachEvent("onclick", fun1);

6.对比onclick和addEventListener

1.addEventListener可以对同一个元素绑定多个事件【相同事件】,执行顺序从上到下依次执行。而onclick同一个元素只能绑定一个【相同】事件,如有多个,后面的事件会覆盖前面的事件。

2.addEventListener的第三个参数为布尔类型,默认为false,也就是执行的冒泡机制,如为true,则执行捕获机制

3.addEventListener它对任何 DOM 元素都是有效的,而不仅仅只对 HTML 元素有效。点击查看dom分类

4.注册addEventListener事件时不需要写on,而onclick方式则必须加on

5.在移除事件上,onclick使用的是指针指向null,例如document.onclick = null,而addEventListener则使用的是独有的移除方法removeListener(要使用此方法,addEventListener必须执行的是外部函数或存在函数名,不然则不能使用)

6.addEventListener为DOM2级事件绑定,onclick为DOM0级事件绑定

总结:对于简单事件(同一个元素上只有一个事件)使用行内的onclick更合适。对于复杂事件使用 addeventlistenr 最后可以删除事件。 推荐大家使用addeventlistenr ,他是现在浏览器的标准,浏览器的兼容性会更好一些

7. DOM CSS动态样式

 7.1.obj.style

【获取行内样式】 注意:可以获取样式,也可以设置样式

动态样式

  • 动态样式指通过脚本动态控制元素的样式,实现页面显示格式的动态变化。比如:动态滚动的文本、动态移动的图片、可折叠的树形菜单等。

使用style对象访问样式

  • 每个HTML标记均具有style属性,相应的,JavaScript脚本中的HTML元素对象都具有style属性,该属性是一个style对象。

  • Style对象的属性与CSS样式中的属性一一对应。

元素对象.className="类名"

  • 因为属性名class在JS中为关键字,所在此处写做className

var box = document.getElementById("box");
box.style.color="#ff0000";
box.style.width="400px";
box.style.height="300px";
box.style.backgroundColor="#ff0000";
box.style.border="1px solid #f00";

7.2.getComputedStyle

【非IE浏览器下,获取内部样式,或者外部样式】

注意:只能获取不能设置

基本语法: window.getComputedStyle(元素).样式属性

7.3.currentStyle

【IE浏览器下获取内部样式,或者外部样式】

基本语法: 元素.currentStyle.样式属性

7.4.js获取css样式,兼容性写法

// 兼容写法
/**
 * 
@param obj 获取哪个元素的样式【属性】
@param attr  样式的名称【属性】
@returns 返回样式的值【属性值】
*/
function getCss(obj,attr){
    if(obj.currentStyle){
        return obj.currentStyle[attr];
    }else{
        return window.getComputedStyle(obj)[attr];
    }   
}

7.5.event对象使用技巧

  e.target 获取元素本身 我们可以使用e.target获取元素本身

  e.target.dataset 获取data-绑定的属性

  e.currentTarget 当前绑定事件的元素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值