DOM高级事件

增删改查 属性操作 事件操作

注册事件

传统、方法监听注册事件

  1. 传统注册事件

onclick

特点:唯一性;

同一个元素同一事件只能添加一个处理函数

  1. 方法监听注册

w3c标准

addEventListener();

特点:同一个元素同一个事件可以添加多个

addEventListener
eventTarget.addEv entListener(type,listener)
将指定的监听器注册到目标对象上eventTarget

listener:事件处理函数

type:事件类型 字符串(加引号 不带on),例如click mouseover

<body>
    <button>123</button>
    <button>456</button>
    <script>
        var bt = document.querySelectorAll('button');
        bt[0].addEventListener('click', function () {
            alert(22);
        })
//同一个元素同一个事件可以添加多个
        bt[0].addEventListener('click', function () {
            alert(363);
        })
    </script>
</body>
3.删除事件
  1. 传统

element.onclick = null;

  1. 监听方法
eventTarget.removeEv entListener(type,listener)
  1. 先封装一个函数

  1. 再在函数里移除

例如

bt[0].addEventListener('click', fn);

function fn() {

alert(22);

bt[0].removeEventListener('click',fn);

}

4.DOM事件流
事件发生时节点按照特定的顺序传播,这个传播过程,叫DOM事件流从页面

三个阶段

  1. 捕获阶段 (从上往下 类似于构造函数

  1. 当前目标阶段

  1. 冒泡阶段 (从下往上 类似于解析函数 开始由

注意

  1. js只能执行捕获和冒泡其中一个

  1. onclick只能冒泡阶段

捕获阶段 true 从上往下执行
<body>
    <div class="farther">
        <div class="son">son
        </div>
    </div>
   <script>
        //捕获 最后为true 从上往下 document-html-body-farther-son
        //因为只有son注册了监听事件 所以只执行son
        var son = document.querySelector(".son");
        son.addEventListener('click', function () {
            alert('son');
        }, true);
        //为farther添加事件 先执行farther
        var f = document.querySelector(".farther");
        f.addEventListener('click', function () {
            alert('farther');
        }, true);
<script>
<body>
冒泡阶段 flase或者省略 (一般更关注冒泡
    //冒泡阶段        
    //son-farther-body-html-document
        var son = document.querySelector(".son");
        son.addEventListener('click', function () {
            alert('son');
        }, false);
        var f = document.querySelector(".farther");
        f.addEventListener('click', function () {
            alert('farther');
        }, false);
        document.addEventListener('click', function () {
            alert('document');
        });

onblur onfocus onmouse 没有冒泡

5.事件对象
div.onclick = function(event){}
  • event事件对象,当一个形参看

  • 事件对象是一系列相关数据的集合

  • 系统创建 不需要传递参数

  • 必须先有事件 才有事件对象

div.addEventListener('click',function(e/event){})
  1. e.target 和 this区别
  • this指定绑定事件的对象

  • e.target返回触发事件的对象(指向点击的对象)

例如 var ul = document.querySelector('ul');
ul.addEventListener('click',function(e){
console.log(this); //给ul绑定事件 返回ul
console.log(e.target); //点击li,指向li,返回li
})
  1. 常见属性方法

返回事件类型 click/onmouseout

e.type

阻止默认行为(让链接不跳转 提交按钮不提交)

e.preventDefault(); //dom标准写法 方法
e.returnValue;//属性

阻止冒泡

e.stopPropagation();
加在函数里 可以阻止后面的事件不再发生

e.cancelBubble=true;

6.事件委托

事件代理

原理:不是给每个子结点单独设置监听器,而是事件监听器设置在父节点是,利用冒泡影响每个子结点。
7.鼠标事件

禁用右键

document.addEventListener(' contextmenu',function(e){
e.preventDefault();
})

禁止选择文件

document.addEventListener( 'selectstart',function(e){
e.preventDefault();
})
  1. 鼠标事件对象

相对于浏览器可视区

e.clientX
e.clientY

相对于文档页面 (常用

e.pageX
e.pageY

相对于电脑屏幕的坐标

e.screenX
e.screenY
  1. 案例 图标跟随鼠标移动

思路

1.鼠标移动时的坐标赋值给图片的xy坐标!

<body>
    <img src="" alt="">
<script>
    var im = document.querySelector('img');
    document.addEventListener('mousemove',function(e){
           var x = e.pageX;
           var y = e.pageY;
           im.style.left = x +'px';
           im.style.top = y + 'px';
           
})
  1. 键盘事件

松开时触发

document.addEventListener('onkeyup',function(){}) //松开的时候触发

按下出发(按下时即执行代码)

onkeydouwn onkeypress

onkeypress不识别功能键

注意:

先执行keydown --keypress -- keyup

1.键盘事件对象

得到相应键的ascii码值

e.keyCode
用这个值 判断用户按下了哪些键

keyup keydown不区分大小写

keypress区分大小写

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

敲代码时出的问题:

1.不知道怎么来判断键盘输入的字符

2.不知道获得焦点 focus();

<body>
    <input type="text">
    <script>
        var inp = document.querySelector('input');
        document.addEventListener('keyup', function (e) {
            if (e.keyCode == 83) {
                inp.focus();
            }
        })
    </script>
</body>
案例 模拟快递单号查询

问题:

  1. placeholder 是HTML5 中新增的一个属性。 placeholder可以用来描述输入字段预期值的简短的提示信息。 提示信息会在用户输入值之前显示,一旦用户输入信息该提示就会自动消失。

  1. 隐藏为 element.style.display

  1. 失去焦点为blur

  1. 获得焦点为focus

<body>
    <div class="search">
        <div class="con"></div>
        <input type="text" placeholder="请输入您的快递单号">

    </div>
    <script>
        var con = document.querySelector('.con');
        var inp = document.querySelector('input');
        inp.addEventListener('keyup', function (e) {
            if (this.value == '') {
                con.style.display = 'none';

            } else {
                con.style.display = 'block';
                con.innerText = this.value;
            }
        })
        inp.addEventListener('blur', function (e) {
            con.style.display = 'none';
        })
        inp.addEventListener('focus', function (e) {
            if (this.value !== '') {
                con.style.display = 'block';

            } else {
                con.style.display = 'none';
            }
        })
    </script>
</body>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值