js(Dom+Bom)第五天(2)

webAPI

01-事件监听

  • 为什么要学事件监听

    之前给元素注册事件的时候,同一个事件会被覆盖掉
    
  • 事件监听的本质

    通过另外一种方式给元素注册事件, 同时可以解决同一个事件不会被覆盖掉.
    
  1. 知识点-通过 on 方式给元素注册事件

    之前注册事件的方式:事件源.onclick = function() {}on是一种方式
    click 才是一个具体的事件类型特点:
    1.无法给同一个事件源注册同一种事件类型,后面的事件会将前面的事件覆盖掉.
    2.对象身上有onclick这个属性, 当给onclick这个属性赋值的时候,属性原来的值会被覆盖掉
    
  2. 知识点-通过addEventListener方式注册事件

    • 语法

      事件源.addEventListener('事件类型', 函数处理程序);注意事项:
      1. 事件类型是不能代 'on'  例如点击事件:  click
      2. 函数处理程序 可以是一个匿名函数,也可以调用一个命名函数
      3. 第二个参数函数处理程序如果是一个命名函数,那么只写函数的名称,不能加小括号(代表函数的调用)例如:
      btn.addEventListener('click', fn);
      function fn() {alert('你好');
      }4. 如果addEventListener想要调用一个带有参数的函数那么可以按照如下写法:btn.addEventListener('click', function(){fn(2);
      })function fn(a){alert(a);
      }
      
    • 特点

      • addEventListener 在注册事件的时候,同一种事件不会被覆盖掉
      • 原理:将事件添加到一个 eventTarget 对象集合(数组)上
  3. 知识点-通过attachEvent方式注册事件

    • attachEvent 专门为IE低版本浏览器设置的方法

    • 语法

      事件源.attachEvent('事件类型', 处理程序);
      
    • 特点

      • 事件类型需要加 ‘on’
      • 处理程序 与 addEventListener 中的处理程序用法一模一样
  4. 知识点-移除事件

    • 移除 on 方式注册事件

      事件源.事件类型 = null;
      例如:div.onclick = null;
      
    • 移除addEventListener事件

      • 语法

        DOM.removeEventListener('事件类型', 命名函数)
        
      • 总结

        1. removeEventListener()这个方法就是用来移除addEventListener注册的事件
        2. addEventListener注册事件的时候,必须使用命名函数
        3. removeEventListener()中第二参数命名函数

    在这里插入图片描述

    • 移除attachEvent事件

      DOM.detachEvent(event_type,event_name)
      
      • 总结:
        1. detachEvent方法是用来移除 attachEvent 事件的
        2. detachEvent()方法中第二个参数也需要一个命名函数
        3. detachEvent方法的使用方式与removeEventListener一样

在这里插入图片描述
5. 兼容写法

var btn = document.getElementById("myBtn");
if (btn.addEventListener) {                   btn.addEventListener("click", myFunction);
} else if (btn.attachEvent) {//兼容写法btn.attachEvent("onclick", myFunction);
}

02-事件流

在网页中,如果遇到嵌套的盒子, 那么当点击子元素的时候, 父元素也会有被点击的效果  ----> 类似于CSS中的塌陷
  1. 事件流组成

    • 知识点-事件冒泡阶段

      以点击事件举例:子元素被点了, 父元素也有被点击的效果  ----> 事件冒泡
      
    • 知识点-事件捕获阶段

      以点击事件举例:当前元素被点击的时候, 先从父元素开始执行, 然后传到 子元素
      
    • 知识点-事件目标阶段

      事件目标阶段 : 就是指的是当前事件源
      

    在这里插入图片描述

    • 事件流总结

      1. 事件流与注册事件的方式没有任何关系
      2. 不是所有的事件都有事件冒泡
      3. 如果当前事件有冒泡, 那么通过 addEventListener 可以将冒泡阶段和 捕获阶段都可以通过第三参数表现出来 
      4. 如果有事件冒泡, 那么 通过 onclick 这种方式 只能看到冒泡阶段, 无法表现捕获阶段(不支持第三个参数)
      
  2. 事件委托

    事件委托: 属于一种编程实现.
    事件委托: 本应该当前事件源执行对应的事件,但是最后是交给父元素执行的
    
    • 事件委托具备的条件
      • 当前元素得有父元素
      • 当前事件得有冒泡效果
  3. 事件对象参数

    • 什么是事件对象参数

      事件对象参数:  事件中内置的一个参数, 保存了用户在执行这个事件时候的一些信息比如:
      当前事件的类型, 点击的对象是谁(真正的事件源是谁).....
      
    • 事件对象参数怎么用

      1. 事件对象参数不需要我们手动的传值(当执行事件的时候,就会有值)
      2. 事件对象参数本质上就是一个对象

03-事件对象参数

一下的代码结构可以用此方式查询:
在这里插入图片描述

Dom.onclick = function(e){console.log(e);    }

在这里插入图片描述

  1. e.target : 获取真正触发事件的对象(事件源)

  2. e.type: 事件类型

  3. e.clientX | e.clientY (鼠标坐标信息)

    e.clientX :  获取鼠标的横坐标相对整个网页的可视区域
    e.clientY :  获取鼠标的纵坐标相对整个网页的可视区域
    
  4. e.pageX | e.pageY (鼠标坐标信息)

    e.pageX:   获取鼠标的横坐标相对整个页面的
    e.pageY:   获取鼠标的纵坐标相对整个页面的如果:
    1. 网页中没有滚动条, 默认  e.pageX  和 e.clientX
    2. 如果网页中有滚动条, 那么  e.pageX 就要包含滚动条滚出去的位置
    
  5. e.screenX | e.screenY (鼠标坐标信息)

    e.screenX: 获取鼠标横坐标相对整个屏幕的
    e.screenY: 获取鼠标的纵坐标相对整个屏幕的
    
  6. e.offsetX | e.offsetY (鼠标坐标信息)

    e.offsetX :  获取鼠标横坐标相对当前事件源左上角
    e.offsetY:   获取鼠标纵坐标相对当前事件源左上角
    
  7. e.stopPropagation() 阻止事件冒泡

    e.stopPropagation() 作用: 阻止事件冒泡
    

04-键盘事件对象参数

  1. 知识点-onkeydown事件
  2. 知识点-onkeyup事件
  3. 知识点-onkeypress事件
  4. 键盘事件对象参数
    • e.key
    • e.keyCode
  5. 课堂案例-键盘移动案例

BOM

取鼠标纵坐标相对当前事件源左上角


7. e.stopPropagation() 阻止事件冒泡 ```js
e.stopPropagation() 作用: 阻止事件冒泡

04-键盘事件对象参数

  1. 知识点-onkeydown事件
  2. 知识点-onkeyup事件
  3. 知识点-onkeypress事件
  4. 键盘事件对象参数
    • e.key
    • e.keyCode
  5. 课堂案例-键盘移动案例

BOM

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/248208.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UIAutomator简介

简介 Android 4.3发布的时候包含了一种新的测试工具–uiautomator,uiautomator是用来做UI测试的。也就是普通的手工测试,点击每个控件元素 看看输出的结果是否符合预期。比如 登陆界面 分别输入正确和错误的用户名密码然后点击登陆按钮看看是否能否登陆以…

从零开始实现ASP.NET Core MVC的插件式开发(五) - 插件的删除和升级

标题:从零开始实现ASP.NET Core MVC的插件式开发(五) - 使用AssemblyLoadContext实现插件的升级和删除 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/11395828.html 源代码:https://github.com/lamondlu/Mystique 前景回…

【JavaWeb】石家庄地铁搭乘系统——第一版(功能尚未完善)

小组成员:高达,程超然 项目目的:能算出地铁搭乘的最优路线并显示在地图上 个人任务:调用队友写好的java代码,将结果显示在网页上 新的知识:百度地图API,使用JQuery的AJAX异步提交 进度&#xff…

扫描枪连接zebra打印机打印条码标签无需电脑

在一些流水线生产的现场,需要及时打印条码标签,由于现场环境和空间限制,无法摆放电脑或者通过连接电脑来打印条码标签的速度太慢, 瑞科条码特提供了一套扫描枪直接连接条码打印机,扫描枪扫描条码之后直接打印输出条码标…

简单的动画函数封装(1)

//创建简单的动画函数封装效果(目标对象&#xff0c;目标位置) function animate(obj,target){var id setInterval(function(){if(obj.offsetLeft > target){clearInterval(id);}else{obj.style.left obj.offsetLeft 5 px;}},30) }可以实现如下效果&#xff1a; <div…

NodeMCU学习(三) : 进入网络世界

阅读原文可以访问我的个人博客 把NodeMCU连接到路由器网络上 NodeMCU可以被配置为Station模式和softAP模式或者Station AP模式&#xff0c;当它被配置为Station模式时&#xff0c;就可以去连接Access Point&#xff08;如路由器&#xff09;。当它被配置为Soft Access Point模…

操作系统原理之进程调度与死锁(三)

一、进程调度的功能与时机 进程调度&#xff1a;进程调度的功能由操作系统的进程调度程序完成 具体任务&#xff1a;按照某种策略和算法从就绪态进程中为当前空闲的CPU选择在其上运行的新进程。 进程调度的时机&#xff1a;进程正常或异常结束、进程阻塞、有更高优先级进程到来…

模拟京东侧边栏

思路&#xff1a; // 1. 获取元素 // 1.1 获取一组li // 1.2 获取一组类名为item的div // 1.3 获取类名为slide的div// 2. 循环遍历给每一个li注册onmouseenter&#xff0c;并且每一个li添加一个index表示索引 // 2.1 循环遍历把所有的li的类名设置为,把所有的item的display设…

ViewPager + TabLayout + Fragment + MediaPlayer的使用

效果图 在gradle里导包 implementation com.android.support:design:28.0.0 activity_main <?xml version"1.0" encoding"utf-8"?><LinearLayout xmlns:android"http://schemas.android.com/apk/res/android" xmlns:tools"http…

vs code打开文件显示的中文乱码

这种情况下&#xff0c;一般是编码格式导致的&#xff0c;操作办法&#xff1a; 鼠标点击之后&#xff0c;上面会弹出这个界面&#xff0c;双击选中 然后从UTF-8换到GB2312&#xff0c;或者自己根据情况&#xff0c;更改编码格式 转载于:https://www.cnblogs.com/132818Creator…

操作系统原理之内存管理(第四章第一部分)

内存管理的⽬标&#xff1a;实现内存分配和回收&#xff0c;提高内存空间的利用率和内存的访问速度 一、存储器的层次结构 寄存器&#xff1a;在CPU内部有一组CPU寄存器&#xff0c;寄存器是cpu直接访问和处理的数据&#xff0c;是一个临时放数据的空间。 高速缓冲区&#xff1…

自写图片遮罩层放大功能jquery插件源代码,photobox.js 1.0版,不兼容IE6

版权声明&#xff1a;本文为博主原创文章。未经博主同意不得转载。 https://blog.csdn.net/u010480479/article/details/27362147 阿嚏~~~ 话说本屌丝没啥开发插件的经验&#xff0c;可是天公不作美&#xff0c;公司须要让我自己开发个图片放大的插件 但公司老大的话&#xff0…

黑白两客进入页面(1)

<div><span>欢</span><span>迎</span><span>来</span><span>到</span><span><strong>黑白两客</strong></span><span>的</span><span>博</span><span>客</sp…

zookeeper学习之原理

一、zookeeper 是什么 Zookeeper是一个分布式协调服务&#xff0c;可用于服务发现&#xff0c;分布式锁&#xff0c;分布式领导选举&#xff0c;配置管理等。这一切的基础&#xff0c;都是Zookeeper提供了一个类似于Linux文件系统的树形结构&#xff08;可认为是轻量级的内存文…

前端js基础智能机器人

<script>var flag true;while(flag) {//获取用户输入信息 var code prompt(你好,我是小娜\n请输入编号或者关键词选择功能,输入Q(q)退出聊天\n1.计算\n2.时间\n3.笑话);switch( code ) {case q:case Q:alert(狠心的抛弃了小娜);flag false;break;case 1:case 计算:var…

2018-2019-2 《Java程序设计》第6周学习总结

20175319 2018-2019-2 《Java程序设计》第6周学习总结 教材学习内容总结 本周学习《Java程序设计》第七章和第十章&#xff1a; 内部类&#xff1a; 1.内部类可以使用外嵌类的成员变量和方法。 2.类体中不可以声明类变量和类方法。 3.内部类仅供外嵌类使用。 4.类声明可以使用s…

Hbase基本原理

一、hbase是什么 HBase 是一种类似于数据库的存储层&#xff0c;也就是说 HBase 适用于结构化的存储。并且 HBase 是一种列式的分布式数据库&#xff0c;是由当年的 Google 公布的 BigTable 的论文而生。HBase 底层依旧依赖 HDFS 来作为其物理存储。 二、hbase的列式存储结构 行…

最终的动画函数封装(2)

<button>点击触发1</button><button>点击触发2</button><div></div><style>*{margin: 0;padding: 0;}div{width: 100px;height: 100px;background-color: red;position: relative;top: 100px;left: 0;}.div1{display: block;width: …

第二次JAVA作业

感觉和C语言后面都差不多&#xff0c;就是开头的定义和输入输出有点差别&#xff0c;多写几次应该能搞清楚开头的定义&#xff0c;接下来是四道题目的截图。 第一题&#xff1a; 第二题&#xff1a; 第三题&#xff1a; 第四题&#xff1a; 转载于:https://www.cnblogs.com/YSh…

js(Dom+Bom)第七天(1)

JavaScript BOM介绍 概念 BOM&#xff08;Browser Object Model&#xff09;即浏览器对象模型。 本质&#xff1a; 通过对象抽象浏览器中的一些功能 例如&#xff1a;&#xff08;刷新页面&#xff0c;alert,confirm,pormpt,跳转 ...&#xff09;BOM顶级对象 window对象是js中…