最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
jquery中document ready 与事件监听绑定和解绑
时间:2022-06-25 17:43:30 编辑:袖梨 来源:一聚教程网
1、document ready
先看代码:
$(function(){
alert('你好');
});
传入的参数是一个函数,我们需要做的是,需要在文档准备完毕之后去执行它。现在有2种情况:
1、文档还没有准备完毕,这些事件怎么办
2、文档已经准备完毕,这些事件怎么办
解决办法是,预先定义一个闭包内的全局变量来收集这些事件,然后在文档准备完毕之后去执行它。而如果文档已经准备完毕之后,传入的事件就直接执行即可。
(function() {
// 预先定义事件队列容器
var readyFnQueue = [];
// 文档是否准备完毕判断变量
var docIsReady = !1;
// ...省略其他无关代码
function yQuery(selector, context) {
if (_type(selector) === 'function') {
docIsReady ? selector() : readyFnQueue.push(selector);
}
}
// ...省略其他无关代码
_listen(doc, "DOMContentLoaded", function() {
// 文档准备完毕,则立即执行事件队列
readyFnQueue.forEach(function(fn) {
fn();
});
readyFnQueue = null;
docIsReady = !0;
});
})();
2、event bind and unbind
上面提到了监听文档的ready事件,这里具体说说事件的监听绑定与解绑。事件的监听在不同浏览器中有兼容问题,这里就不多深究了,我们只需要关注标准的东西,其他的东西都只是兼容与容错。
(function() {
/**
* 事件绑定
* @param {Element} element DOM元素
* @param {String} eventType 事件类型
* @param {Function} fn 事件回调
* @return {Undefined}
* @version 1.0
* 2013年12月3日10:00:41
*/
function _listen(element, eventType, fn) {
element.addEventListener(eventType, function(e) {
if (fn.call(element, e) === !1) _eventFalse(e);
}, !1);
}
/**
* 阻止事件传递、默认事件、事件队列
* @param {Object} e 事件对象
* @return {Undefined}
* @version 1.0
* 2013年12月29日23:00:01
*/
function _eventFalse(e) {
if (e.preventDefault !== udf) e.preventDefault();
if (e.stopPropagation !== udf) e.stopPropagation();
if (e.stopImmediatePropagation) e.stopImmediatePropagation();
}
/**
* 解除事件绑定
* @param {Element} element DOM元素
* @param {String} eventType 事件类型
* @param {Function} fn 事件回调
* @return {Undefined}
* @version 1.0
* 2014年6月22日17:53:11
*/
function _unlisten(element, eventType, fn) {
element.removeEventListener(eventType, fn);
}
})();
3、普通事件原型方法
高频普通事件包括click、change、focus、input、keyup、mouseup等,直接把这些事件添加到原型上,便于日常使用。
var normalEventArr = "blur change click contextmenu dblclick error focus input keydown keypress keyup load mousedown mouseenter mouseleave mousemove mouseout mouseover mousewheel reset resize scroll submit".split(" ");
// 赋值到原型链
normalEventArr.forEach(function(eventType) {
$.fn[eventType] = function(fn) {
return this.each(function() {
_listen(this, eventType, fn);
});
}
});
相关文章
- 《原神》5.2卡池抽取建议 11-14
- 《原神》5.2版本新怪物介绍 11-14
- 《原神》希诺宁增伤触发方法 11-14
- 《原神》循音觅奇活动入口 11-14
- 《原神》循音觅奇兑换码获取方法 11-14
- 《原神》花羽会活动飞行技巧介绍 11-14