JAVAscript 事件高级

注册事件

1.1 注册事件概述

给元素添加事件,称为注册事件或者绑定事件

注册事件有俩种方式:传统方式和方法监听注册事件

注册事件传统方式:

利用on开头的事件onclick

特点:注册事件的唯一性

同一个元素同一个事件只能设置一个处理函数

最后注册的处理函数将被覆盖前面注册的处理函数

方法监听注册方式

w3c标准推荐方式

addEvent listener ()它是一个方法

IE9之前的IE不支持此方法 可使用attachEvent()

特点:同一个元素同一个事件可以注册多个监听器函数

事件侦听注册事件

里面的事件类型是字符串,必须加引号。而且不带on

同一个元素 同一个事件可以添加多个侦听器(事件处理程序)

注册事件兼容性解决方案

function addEventListenner(element ,evenName,fn){

//判断当前浏览器是否支持 addEventListener方法

if(elment.addEventListenner){

element.addEventListener(evenName,fn);

}else if(element.addachEvent){

element.attachEvent('on'+eventName,fn);

}else{

//相对于element.onclck=fn;

element['on'+eventNome]=fn;

}

兼容性处理的原则:首先照顾大多数浏览器,再处理特殊浏览器 。

DOM的事件流

事件流是从页面中接受事件的顺序

事件发生时会在元素节点之间按照特定的顺序传播,这个传播过程就是dom事件流

dom事件分为3个阶段

捕获阶段

当前目标阶段

冒泡阶段

注意:js代码中只能执行捕获或者其中一个阶段

onclick和attachEvent 只能得到冒泡阶段

addEventListenter(type,listener【,usecapure】)第三个参数如果是true表示在事件捕获阶段调用事件处理程序:如果false不写默认就是false,表示在事件冒泡阶段调用事件处理程序。

4,实际开发中我们很少使用事件捕获,我们更关注事件冒泡

5,有些事件是没有冒泡的比如onblur onfocus onmouseenter onmouseleve

事件冒泡有时候会带来麻烦有时候又会很巧妙的帮助我们做有些事情。

事件对象

div.onclick = function (event){}

event就是一个事件对象 ,写到我们侦听函数里面的小括号里面

事件对象的常见属性和方法

e.target 返回触发事件的对象

e.sreElement 返回触发事件的对象 非标准ie678使用

e.type 返回事件类型 比如cilik mouse over 不带on

e.canceVubble 该属性阻止冒泡 非标准 ie678使用

e.returnValue 该属性阻止默认事件默认行为 非标准

e.prevenDefault() 该方法阻止默认事件 标准 比如不让链接跳转

e.stopPropagation() 阻止冒泡标准

重点 阻止事件冒泡的两种方式

事件 冒泡:开始时由最具体的元素接收 然后逐级向上传播到DOM最顶层

有好处也有坏处 也有兼容性问题在低浏览器

我们使用的是 e.canceBubble=ture; //非标准cancle取消bubble泡泡

京东快递单号案例

 <style>
        .search {
            position: relative;
            width: 178px;
            margin: 100px;
        }

        .con {
            display: none;
            position: absolute;
            top: -40px;
            width: 171px;
            border: 1px solid rgba(0, 0, 0, 0.2);
            box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
            padding: 5px 0;
            font-size: 18px;
            line-height: 20px;
            color: #333;
        }

        .con::before {
            content: '';
            width: 0;
            height: 0;
            position: absolute;
            top: 28px;
            left: 18px;
            border: 8px solid #000;
            border-style: solid dashed dashed;
            border-color: #fff transparent transparent;
        }
    </style>
</head>

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

    <script>
        var con = document.querySelector('.con');
        var jd = document.querySelector('.jd');
        jd.addEventListener('keyup', function () {
            if (this.value == '') {
                con.style.display = 'none';
            } else {
                con.style.display = 'block';
                con.innerHTML = this.value;
            }
        })

        //当我们获得焦点,就这个con盒子
        jd.addEventListener('blur', function () {
            con.style.display = 'none';
        })
        jd.addEventListener('focus', function () {
            if (this.value !== '') {
                con.style.display = 'block';
            }
        })
    </script>

京东搜索框 当我们输入s时 光标定位到搜索框

   <input type="text">
    <script>
        //核心思路  检测用户是否按下s建,如果按下s建就把光标拿过来
        //使用键盘事件对象的key  判断用户是否按下sjian
        //搜索框获得焦点:使用JS里面的focus()方法
        var input = document.querySelector('input');
        document.addEventListener('keyup', function (e) {
            if (e.key === 's') {
                input.focus();
            }
        })
    </script>

图片跟随鼠标箭头

    <img src="1.gif" alt="">


    <script>
        var pic = document.querySelector('img');
        document.addEventListener('mousemove', function (e) {
            var x = e.pageX;
            var y = e.pageY;

            pic.style.left = x + 'px';
            pic.style.top = y + 'px';
        })
    </script>
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值