全局

1 window.addEventListener('scroll', () => {
2 console.log('------')
3 console.log(document.documentElement.scrollTop, document.body.scrollTop, window.pageYOffset)
4 console.log('------')
5 this.someThing()
6 }, true)

DOM

对单个DOM监听:

document.getElementById("myDiv").addEventListener("click", myFunction)

VUE项目可以通过 ref 代替

this.$refs.someDom.$el.scrollTop
/* 代替 */
document.documentElement.scrollTop || document.body.scrollTop || window.pageYOffset

DOM的可视窗口相关属性

  • 屏幕可视窗口大小  A    B

JS: window.innerHeight  标准浏览器及IE9+  ||  document.documentElement.clientHeight  标准浏览器及低版本IE标准模式  ||  document.body.clientHeight  低版本混杂模式

JQ: $(window).height()

  • 浏览器窗口顶部与文档顶部之间的距离(滚动条滚动的距离)  C    D

JS: window.pagYoffset  IE9+及标准浏览器  ||  document.documentElement.scrollTop  兼容ie低版本的标准模式  ||  document.body.scrollTop  兼容混杂模式

JQ: $(document).scrollTop()

  • 元素的尺寸(左JQuery右JS原生)  E    F

$(o).width() => o.style.width

$(o).innerWidth() => o.style.width+o.style.padding

$(o).outerWidth() => o.offsetWidth = o.style.width+o.style.padding+o.style.border

$(o).outerWidth(true) => o.style.width+o.style.padding+o.style.border+o.style.margin

* 要使用原生的style.xxx方法获取属性,这个元素必须已经有内嵌的样式,如<div style="...."></div>;

* 如果原先是通过外部或内部样式表定义css样式,必须使用o.currentStyle[xxx] || document.defaultView.getComputedStyle(0)[xxx]来获取样式值

  • 元素的位置信息  G    H

1)  返回元素相对于文档document顶部的距离

JS: getoffsetTop()

JQ: $(o).offset().top

2)  返回元素相对于文档document左部的距离

JQ: $(o).offset().left

3)  返回元素相对于第一个以定位的父元素的偏移距离

JQ:position()返回一个对象

  $(o).position().top = style.top

  $(o).position().left = style.left

通过上述方法和图示

不在可视区:同时判断元素的两端是否同时不在可视区,两个条件用  &&  衔接

    在可视区:判断是否有一端存在可视区,两个条件用  ||  衔接

addEventListener( ) 方法

语法:

element.addEventListener(event, function, useCapture)

第一个参数是事件的类型 (如 "click" 或 "mousedown").

第二个参数是事件触发后调用的函数。

第三个参数是个布尔值用于描述事件是冒泡还是捕获。该参数是可选的。

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

引用外部函数

element.addEventListener("click", function(){ alert("Hello World!") })
element.addEventListener("click", myFunction)

function myFunction() {
alert ("Hello World!")
}

事件冒泡 / 事件捕获

事件传递有两种方式:冒泡与捕获。

<div>
Father
<p>children</p>
</div>

 冒泡 中,内部元素的事件会先被触发,然后再触发外部元素,即: <p> 元素的点击事件先触发,然后会触发 <div> 元素的点击事件。

在 捕获 中,外部元素的事件会先被触发,然后才会触发内部元素的事件,即: <div> 元素的点击事件先触发 ,然后再触发 <p> 元素的点击事件。

addEventListener() 方法可以指定 "useCapture" 参数来设置传递类型:

addEventListener(event, function, useCapture)

默认值 false, 即冒泡传递,当值为 true 时, 事件使用捕获传递。

document.getElementById("myDiv").addEventListener("click", myFunction, true)

removeEventListener( ) 方法

removeEventListener() 方法移除由 addEventListener() 方法添加的事件句柄:

element.removeEventListener("mousemove", myFunction)

浏览器兼容处理

var x = document.getElementById("myBtn")
if (x.addEventListener) { // 所有主流浏览器,除了 IE 8 及更早版本
x.addEventListener("click", myFunction)
} else if (x.attachEvent) { // IE 8 及更早版本
x.attachEvent("onclick", myFunction)
}

IE 8 及更早 IE 版本,Opera 7.0及其更早版本不支持 addEventListener() 和 removeEventListener() 方法。但是,对于这类浏览器版本可以使用 detachEvent() 方法来移除事件句柄:

element.attachEvent(event, function)
element.detachEvent(event, function)

- END -

JS003. 事件监听和监听滚动条的三种参数( addEventListener( ) )的更多相关文章

  1. Second Day: 关于Button监听事件的三种方法(匿名类、外部类、继承接口)

    第一种:通过匿名类实现对Button事件的监听 首先在XML文件中拖入一个Button按钮,并设好ID,其次在主文件.java中进行控件初始化(Private声明),随后通过SetOnClickLis ...

  2. extjs组件添加事件监听的三种方式

    extjs对组件添加监听的三种方式  在定义组件的配置时设置 如代码中所示:  Java代码  xtype : 'textarea',  name : 'dataSetField',  labelSe ...

  3. libevent (三) 事件注册与循环监听

    事件注册与循环监听 在libevent中为了监听某种事件的发生,设置事件触发后的回调函数,也就是说对该事件注册到当前的IO模型中. 事件注册 事件初始化 使用`event_new`函数来对事件进行初始 ...

  4. Android监听点击事件实现的三种方法

    监听点击事件实现的三种方法:1.匿名内部类2.外部类3.直接实现接口 1.匿名内部类: package com.jereh.calculator; import android.content.Con ...

  5. jQuery封装自定义事件--valuechange(动态的监听input,textarea)之前值,之后值的变化

    jQuery封装自定义事件--valuechange(动态的监听input,textarea)之前值,之后值的变化 js监听输入框值的即时变化 网上有很多关于 onpropertychange.oni ...

  6. SpringBoot | 第三十二章:事件的发布和监听

    前言 今天去官网查看spring boot资料时,在特性中看见了系统的事件及监听章节.想想,spring的事件应该是在3.x版本就发布的功能了,并越来越完善,其为bean和bean之间的消息通信提供了 ...

  7. Android开发入门——Button绑定监听事件三种方式

    import android.app.Activity; import android.os.Bundle;import android.view.View;import android.widget ...

  8. JavaScript监听手机物理返回键的两种解决方法

    JavaScript没有监听物理返回键的API,所以只能使用 popstate 事件监听. 有两个解决办法: 1.返回到指定的页面 pushHistory(); window.addEventList ...

  9. vue条件语句、循环语句、计算属性、侦听器监听属性

    因为 v-if 和v-for是一个指令,所以必须将它添加到一个元素上.但是如果想切换多个元素呢?此时可以把一个 <template> 元素当做不可见的包裹元素,并在上面使用 v-if.最终 ...

随机推荐

  1. HDFS总结

    hadoop分布式文件存储系统,用来解决海量数据的存储问题 HDFS的组成------核心配置文件:hdfs-site.xml.core-site.xml NameNode:负责整个HDFS集群的管理 ...

  2. 【Lua篇】静态代码扫描分析(三)语法分析

    一.语法分析 通过将词法分析获取的Token流按照目标语言的语法进行解析的过程,例如解析函数声明.函数调用.变量声明.各种语句等. 二.Lua语法分析 在写语法分析程序前,先需要了解Lua的语句和语法 ...

  3. 代码重构与单元测试——使用“以查询取代临时变量”再次对Statement()方法进行重构(七)

    代码重构与单元测试(一) 代码重构与单元测试--测试项目(二) 代码重构与单元测试--"提取方法"重构(三) 代码重构与单元测试--重构1的单元测试(四) 代码重构与单元测试--对 ...

  4. Vue实现点击按钮进行文件下载(后端Java)

    最近项目中需要实现点击按钮下载文件的需求,前端用的vue,因为文件是各种类型的,比如图片.pdf.word之类的.这里后端是可以返回文件的地址给前端的,但我看了下网上各种五花八门的答案,感觉都不是我想 ...

  5. 浅谈C#取消令牌CancellationTokenSource

    前言 相信大家在使用C#进行开发的时候,特别是使用异步的场景,多多少少会接触到CancellationTokenSource.看名字就知道它和取消异步任务相关的,而且一看便知大名鼎鼎的Cancella ...

  6. cas5.3.1 从搭建到连接mysql(简而优美)

    前言: cas是单点登录服务框架,为单点登录业务提供了便捷服务,它分为client,server端,client端要聚合到我们自己的项目. server端要单独构建运行,本篇文章主要讲解一下cas5. ...

  7. Python语言系列-03-文件操作和函数

    ## 深浅拷贝 #!/usr/bin/env python3 # author:Alnk(李成果) # 赋值运算 # 可变的数据类型:由于数据类型可变,修改数据会在原来的数据的基础上进行修改, # 可 ...

  8. Java横向技术 网络【笔记】

    Java横向技术 网络[笔记] 计算机网络 服务器返回给客户端 http 响应包的状态码有哪几大类?302.304 分别是什么意思? ​ 状态码分为五大类: ​(1)信息性状态码(Informatio ...

  9. python3.9 manage.py runserver 报错问题解决

    报错信息如下 You have 13 unapplied migration(s). Your project may not work properly until you apply the mi ...

  10. WPF/Winform 图表库LiveCharts

    早前的博客,自己动手写了几个图表饼状图,柱形图,折线图等,重在思路. 那么如果你不想这么麻烦自己动手,有没有现成的图表库那? 当然有,虽然我也刚开始用没多久,不过还是对这么良心的项目充满了敬佩!! g ...