JS5---事件的监听,冒泡捕获事件,事件的委托

dom元素事件的操作

一. dom事件

 *  键盘事件
    onkeydown  onkeyup  onkeypress(鼠标按下加抬起:按键事件)
 *  鼠标事件 
    onmouseover   onmousemove  onmouseout(包涵垂直离开)  
  	onmouseleave(水平离开)  onclick  ondbclick  onmousedown
    onmouseup  oncontentmenu(鼠标右击,出现菜单)  onmouseenter(鼠标进入事件)
*   表单事件
    onfocus(获焦)   onblur(失焦)   onselected  onchange(改变)
 *  浏览器事件
    onload(加载完成)   onreload (重新加载)  onresize(浏览器窗口变化)
    onerror(图片加载失败)

二.事件在js中的写法

1. 直接在标签上写
<a href="javascript:;"  onclick="hello()">

<script>
function hello(){
	 alert("hello world!");
}
</script>
2.动态绑定事件

事件里面的this 代表的是当前正在执行的对象

语法: 事件.对象 = 函数 (不可一次性绑定多个事件)

①匿名函数

 var btn = document.querySelector("#btn");
 btn.onclick = function () {
 alert("你点我");
 btn.onclick=null;
 }
语法: 事件.对象 = 函数名称(不加括号)

②其他函数

 btn.onclick=showalert;// 函数名称  不加括号
 function showalert(){
 alert("你点我");
 }

3.事件的监听

语法:对象.addEventListener(事件名 ,函数 ,flase/true);

①事件名不加 on
②flase 为冒泡 从里到外,true为捕获 从外到里 。若不写第三个参数则默认为冒泡

优点:① 可以绑定多个事件 (常规的事件绑定只执行最后绑定的事件)

可以给同名的事件,绑定多个事件处理程序
同名事件不会覆盖,而是会依次执行

②可以解除相应的绑定
语法: 对象.removeEventListener(事件名 ,函数 ,flase/true);
//绑定多个事件
btn.addEventListener('click',function (  ) {
     alert('11111');
 },false);

btn.addEventListener('click',function (  ) {
    alert('2222');
},false);

//解除事件的绑定
<input type="button" value="click me" id="btn5">

<script>
	var btn5 = document.getElementById("btn5");
	btn5.addEventListener("click",hello1);//执行了
	btn5.addEventListener("click",hello2);//不执行
	this.removeEventListener("click",hello2);
	
	function hello1(){
	 alert("hello 1");
	}
	function hello2(){
	 alert("hello 2");
	}
</script>
冒泡与捕获
1.了解事件捕获与冒泡

冒泡: 当父级元素拥有同名事件时才会被触发
捕获: 去寻找与父元素具有同名事件的子元素

<ul>
    <li>1</li>
    <p>1111</p>
    <li>2</li>
</ul>
<script>
 
  	 var ul = document.getElementsByTagName("ul");
     var li = document.getElementsByTagName("li");
     ul[0].addEventListener("click", function () {
     console.log(1);
     },true);               //①事件的捕获,点击ul输出 1 2  外到里 ②若为事件的冒泡,输出2 1  里到外
     li[0].addEventListener("click", function (e) {
     e.stopPropagation();
     console.log(e.target);  // <li>1</li>
     console.log(2);         //阻止事件捕获,输出为 2
     },true);  
</script>
2.阻止冒泡
语法: e.stopPropagation( ); e为事件的执行参数

三.事件的执行参数

e表示正在触发的对象所对应的事件

在这里插入图片描述

document.body.onkeypress=function (e) {
	e=e||window.event;                //有时写这句话是为了浏览器的兼容性(可以省略)
    console.log(e);                   //由上述图片可以看出e对应的是一个事件
    console.log(e.keyCode);           //获取按键键值  ASCII值
    console.log(e.code);              //获取键值  eg: keyA  space....
}        
 //事件的执行对象直接添加事件匿名函数上面

  另一种写法:
  可以直接声明变量使用window.event  调用事件的执行对象
      document.body.onkeypress=function () {
        var e=window.event;           //匿名函数括号中不写 e
        console.log(e);
        console.log(e.keyCode);
        console.log(e.code)
    }

e.pageX, e.pageY 鼠标移动的 x,y坐标
document.documentElement.onmousemove=function(e){
    e=e||window.event;
    console.log(e.pageX, e.pageY);
}
 // e.clientX, e.clientY 有时为了浏览器兼容性将坐标写成下边这样
	var x= e.pageX|| e.clientX;
    var y= e.pageY|| e.clientY;

e.target

当前正在触发的对象

若鼠标移动事件 则会显示出鼠标当前在的位置的标签名

四.this对象

1.函数里边的this 指代window对象

 function a(){
     console.log(this); //window 
    }
 a();

2.事件里边的this 指代当前执行事件的对象

<button class="btn"></button>
<script>
  var btn=document.querySelector(".btn");
    btn.onclick=function(){
        console.log(this);     //<button class="btn"></button>
    }
</script>

五.dom元素属性操作

1.js代码若写到header中
window.onload 加载完成事件 dom元素已经渲染完成

 window.onload=function(){
    这里边是你的js内容
}
2. js里面获取或设置元素的属性

1.innerHTML 获取文本值,但可以自动解析标签
2.innerText 只获取文本值,无法解析标签
3.value 针对表单元素

<button id="btn"></button>
<script>
	var btn = document.getElementById("btn");
	 console.log(btn);
    
	 btn.innerHTML="<span>123</span>";
	 btn.innerText="<span>123</span>";
	 btn.value="111";
	 btn.className="btn blist";  //js中给元素赋类名称(前面的为旧名称,后边的为新名称)
</script>   

运行结果如图: 在这里插入图片描述
在这里插入图片描述


js获取其他属性方式

语法:对象.style.属性
eg : btn.style.backgroundColor

console.log(btn.getAttribute("id"));    //获取id名称 
console.log(btn.getAttribute("class"));  //获取class名称
console.log(btn.getAttribute("style"));  //获取style
元素自定义属性
getAttribute也可以用来获取自定义的属性

1.给元素设置自定义属性
data-src setAttribute()

  eg:①btn.setAttribute("data-src", "./img/1.jpg");
	 ② < img data-src="./img/1.jpg">

2.读取自定义属性
btn.getAttribute("data-src");

3.js样式的相关操作
  1. j s操作的样式为元素的行内样式
    js不能直接eg操作内嵌或者外部样式

  2. 如何获取内嵌样式或者外部样式

window.getComputedStyle();只可以获取,但没办法去更改
eg:window.getComputedStyle( btn.width);

js里面数据类型的强制转化

1.parseInt 强转为整数型
2.parseFloat 强转为浮点型

    var a = "123";
    console.log(parseInt(a));    //123
    var b = "1.23";
    console.log(parseFloat(b));  //1.23
    console.log(parseInt(b));    //1

    var c = "100px";
	console.log(parseInt(c));    //100
    var m = "px100";
    console.log(parseInt(m));    //NaN

六.事件的委托

事件的委托 click事件委托

父级把他的事件委托给特定子集

    //输出的当前点击的元素
    //找到委托的元素对象
     <ul>
    <li>111</li>
    <p>5464</p>
    <li>11222</li>
</ul>
<script>
var ul = document.getElementsByTagName("ul")[0];
var li = document.getElementsByTagName("li")[0];
ul.onclick = function (e) {

    var child = e.target || e.srcElement;        //当前鼠标点击的对象
  
    if (child.nodeName.toLowerCase() == "li") {  //nodeName 节点名称 toLowerCase转化为小写
        console.log(1);
    }
}

参考文章链接:https://blog.csdn.net/weixin_42839080/article/details/81909675

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值