JavaScript 原生事件
1、原生事件的绑定:https://www.cnblogs.com/shsxt/p/7903216.html
a、DOM0级事件:
1. 行内事件
2. 元素.on事件名=函数
b、DOM2级事件:addEventListener 【removeEventListener,不能移除匿名添加的函数】 。
注意:addEventListener 绑定事件的第三个参数,有过修改。https://juejin.im/post/5a4f41cc518825734c5b34ee 或 https://segmentfault.com/a/1190000017247263?utm_source=tag-newest
阻止默认行为是配合passive使用,http://www.mamicode.com/info-detail-2306048.html
2、即时反应的input和propertychange方法 :https://www.cnblogs.com/LHYwin/p/6136256.html
3、js自定义一个事件 :
为什么要自定义事件:https://juejin.im/entry/5ad070b56fb9a028db591d49 (事件本质是一种消息)
自定义事件的实现: http://www.jb51.net/article/83911.htm 或 http://chayangge.com/2016/04/29/javascript%E8%87%AA%E5%AE%9A%E4%B9%89%E4%BA%8B%E4%BB%B6/ (推荐)
自定义事件需要用到函数Event 和 dispatchEvent。内置的事件会由浏览器根据某些操作进行触发,自定义的事件就需要 js程序 触发(如,dispatchEvent)。
总结:基于DOM的自定义事件 和 纯js实现自定义事件。他们的区别就是,基于DOM的自定义事件,需要addEventListener注册一个自定义的事件名称,js控制这个事件触发。而,
纯js实现的事件,就是一个函数的封装(事件容器)。需要DOM的话,就是DOM原有的事件触发后调用这个事件容器的函数。其实,原有事件的叠加,也可以变成自定义的事件。如下面的 3次点击事件。
4、3次点击事件实现 :https://blog.csdn.net/xiazhiqiang01/article/details/52527478
原有的事件,结果叠加封装在一个方法里,就可以自定义一个事件。
去掉一些兼容性的处理,简化后的代码:
var button = document.getElementById('button'); // 鼠标3击事件
function click3Event(dom, fn) {
var handler = function (event) {
var target = event.target;
var handler = function (event) {
var target = event.target;
target.removeEventListener('click', handler, false);
// 执行内容
fn();
}; target.addEventListener('click', handler, false)
// 为防止双击后较长时间再次单击执行事件
setTimeout(function () {
target.removeEventListener('click', handler, false);
}, 300);
}; dom.addEventListener('dblclick', handler, false)
} click3Event(button, function (event) { // 函数绑定自定义事件,及事件函数。函数内部绑定事件还是使用原生的事件绑定
console.log('3 click');
});
5、元素事件传递 问题:
1、事件冒泡和事件捕获(标准文档流中);
2、固定和绝对定位元素z-index比标准文档流的大,会遮挡下面元素的事件触发(CSS属性:pointer-events:none;可以让事件传递下去。);
体会:pointer-events:none;这个属性相当于告诉浏览器,所有的事件都把我忽略了吧,对于事件而言我是不存在的,即不阻挡也不反应。
3、相对定位的z-inde属性失效,所以不存在遮挡下面元素;
4、定位元素的子元素,如果再定位的话,不能阻止事件传递到这个父定位元素中(这个方法就没法实现点击模态框空白部分,隐藏模态框的效果)。
5、在js中给一个元素DOM绑定事件,可以阻止事件冒泡,从而阻止事件传递。
6、在CSS中有一个 pointer-events: none;属性,可以让当前标签完全没有事件,里面子标签的事件也被禁掉了。(这个感觉在阻止事件传递上不实用,
既然给这个标签绑定了事件,又让它不能被触发 比较矛盾,我们只是不想让子元素的事件,传递到父元素中。)
7、兄弟标签的重叠部分,怎么让两个标签的事件都触发呢。(事件冒泡和事件捕获的事件传播,说的都是祖先关系的dom元素)
说明:暂时没有找到可以实现这个功能的方法,实际项目基本不会有这种情况出现(把它们变成祖先关系的标签就可以解决)。但是特定情况会有这个需求,如在手机左下角,放一个隐藏的标签div,连续点击8次,显示 vconsole 面板。
如果这个div标签下面的标签是有点击事件的话,则会遮挡下面标签的点击事件(不是祖先关系的两个标签,无法实现两个都能触发)。只能把隐藏的标签放到没有事件的标签上面,避免这种情况出现。
具体事件:
1、popstate事件(浏览器前进、回退事件):https://www.cnblogs.com/myclovers/p/6229687.html
总结:popstate 事件,不同的环境,处理触发有的区别。使用这个要注意测试不同的环境,效果是否一致。
2、hashchange事件(监听浏览器链接的hash值变化):https://www.jianshu.com/p/100242c095e7 (试了下,好像一直没有触发这个事件)
3、load事件:(img、script 等DOM元素也有load事件)https://blog.csdn.net/a__loser/article/details/71186922
注意:不是 只有Window 有load事件,所有会加载资源的DOM标签都有这个事件。资源加载成功后,就会触发。
常用的就是js中通过script标签,加载的js文件。如果程序有先后关系,就可以使用 load 事件处理。
var script = document.createElement('script'),
head = document.getElementsByTagName('head')[0];
script.type = 'text/javascript';
script.charset = 'UTF-8';
script.src = "https://cdn.bootcss.com/vConsole/3.3.4/vconsole.min.js";
/* 插入DOM中 */
document.getElementsByTagName('head')[0].appendChild(script)
/* script加载资源事件 */
script.addEventListener('load', function () {
new VConsole()
}, false);
4、pageshow 和 pagehide:https://www.runoob.com/jsref/event-onpageshow.html
说明:在ios的设备上当用户点击返回时,为了提高性能网页呈现的是快照形式,并不会更新内容,所以,在返回网页时需要用到localtion.reload() 来刷新页面 ,重新请求页面内容。
<body οnpageshοw="location.reload()">
查看页面是直接从服务器上载入还是从缓存中读取,你可以使用 PageTransitionEvent 对象的 persisted 属性来判断。 https://blog.csdn.net/m0_38073829/article/details/79072141
5、
JavaScript事件
1、事件流
2、DOM0级事件处理程序(类似jQuery事件的快捷)
3、DOM2级事件处理程序(类似jQuery事件的on方式)
4、IE事件处理程序 ( attachEvent() 和 detachEvent() )
5、事件对象
参考:https://www.cnblogs.com/chun6/p/6063522.html
jQuery事件
1、快捷方式
2、on方式
3、JQuery的事件对象属性与方法
JavaScript 原生事件的更多相关文章
- jQuery 事件绑定 和 JavaScript 原生事件绑定
总结一下:jQuery 事件绑定 和 JavaScript 原生事件绑定 及 区别 jQuery 事件绑定 jQuery 中提供了四种事件监听绑定方式,分别是 bind.live.delegate.o ...
- javascript原生事件总结
javascript原生的事件,总结了一下,包括事件流.处理函数.事件对象这几样东西.而在兼容性方面,主要是老牌ie8以及以下和现代浏览器的差异,也就是ie和DOM事件标准的差异. 事件流这个事件流i ...
- javascript 原生事件综合查询
click() 对象.click() 使对象被点击. closed 对象.closed 对象窗口是否已关闭true/false clearTimeout(对象) 清除已设置的setTimeout对象 ...
- JAVASCRIPT事件详解-------原生事件基础....
javaScirpt事件详解-原生事件基础(一) 事件 JavaScript与HTML之间的交互是通过事件实现的.事件,就是文档或浏览器窗口中发生的一些特定的交互瞬间,通过监听特定事件的发生,你能 ...
- React—Native开发之原生模块向JavaScript发送事件
首先,由RN中文网关于原生模块(Android)的介绍可以看到,RN前端与原生模块之 间通信,主要有三种方法: (1)使用回调函数Callback,它提供了一个函数来把返回值传回给JavaScript ...
- jQuery? 回归JavaScript原生API
如今技术日新月异,各类框架库也是层次不穷.即便当年漫山红遍的JQuery(让开发者write less, do more,So Perfect!!)如今也有被替代的大势.但JS原生API写法依旧:并且 ...
- 据说每个大牛、小牛都应该有自己的库——JavaScript原生对象拓展
在据说每个大牛.小牛都应该有自己的库——框架篇中我扬言要做个小牛,没想到一天没更新,小伙儿伴们就戏谑的问我,油哥是不是要太监了?其实事情是这个样子的,这不是太监的节奏,一是,关于写个自己的库的想法由来 ...
- javascript通用事件封装
随着最近几年Html5的兴起,越来越多的应用采用html5进行实现,一个优秀的网页应用不但需要美观简洁的UI界面,更需要一个良好的交互.网页应用大部分的交互需要用javascript事件进行实现.虽然 ...
- JavaScript 阻止事件冒泡的实现方法
JavaScript 阻止事件冒泡,无使用其它插件来辅助,原生JS代码,考虑到浏览器的兼容性问题,这里对IE/火狐.Operating以及Chrome都有针对性的判断,代码如下: function c ...
随机推荐
- pic16f877a的AD实验学习
一.主函数 //采集AD值 #include <pic.h> #include "ad.h" #include "usart.h" __CONFIG ...
- PostgreSQL角色和权限
PostgreSQL是通过角色来管理数据库访问权限的,我们可以将一个角色看成是一个数据库用户,或者一组数据库用户.角色可以拥有数据库对象,如表.索引,也可以把这些对象上的权限赋予其它角色,以控制哪 ...
- oracle 中和mysql的group_concat有同样作用的写法
所有版本的oracle都可以使用select wm_concat(name) as name from user;但如果是oracle11g,使用select listagg(name, ',') w ...
- 关于sql中日期操作
select * from account where DAYOFWEEK('2019-11-30') =7 limit 10 DAYOFWEEK对应结果: 周日:1 周一:2 周二:3 周三:4 ...
- 判断数组中值为empty
const n = this.item.answerSelfId.length; let num = 0; for (let m = 0 ; m < n ; m++) { if ( !this. ...
- 发送验证码倒计时60s
var wait=60; function time(o) { if (wait == 0) { o.removeClass("gray"); o.text("发送验证码 ...
- 19-python基础-进制之间的转换
二进制-八进制-十进制-十六进制相互转换 1.十进制转为其他进制 # (1)十进制转二进制 a = 8 bin(a) --->>'0b1000' # (2)十进制转八进制 oct(a) - ...
- java性能调优03
1.java中的四种引用类型(级别由高到低为:强引用,软引用,弱引用和虚引用) 1.1 强引用:默认创建的变量都是强引用,垃圾回收机制不会将其回收,当内存空 间不足,Java虚拟机宁愿抛出OutOfM ...
- ssh文件 ip锁定
vi ~/.ssh/config Host web*hostname 115.29.242.1**user lian Host **hostname 192.168.1.**user dface
- mySQL学习入门教程——2.创建表
二.创建表 一.创建数据表的SQL语句模型(弱类型)CREATE TABLE [IF NOT EXISTS] 表名称(字段名1 列的类型[属性][索引],字段名2 列的类型[属性][索引],-字段名n ...