我玩弄了一个可以使用 jQuery 的网页设计。现在有一点我需要相反的 Eventwatching,所以我已经通过安装"onnomousemove"
事件的 jQuery 例程意识到了这一点。是的,你没看错,一个NOT HAPPENING EVENT
.
(下面)你可以在 jQuery 中找到我已经工作的解决方案。
这个想法是控制未发生的事件并通过这个额外指定的事件做出反应jQuery.Event
呵呵,我知道最愚蠢的就是用这个来处理"onnoerror"
事件。但这不是所希望的。它现在正在工作,我想在这里向前迈出一步。那么我的问题是什么?
它来了:如何触发相同的行为,native Javascript EventListening
以便element.addEventListener(...);
也可以处理相同的事件?
问题:较新的 Web 浏览器,如 Chrome、Firefox 已经实现了实现CustomEvent
这一点的处理,但在较旧的浏览器中应该有一种使用原型的方法。我现在对 jQuery 有点盲目,无论如何,有没有人知道以传统方式生成自定义事件而无需原型.js 或其他库的怪异技巧?即使使用 jQuery 的解决方案也可以,但期望的目标是本机侦听器应该能够处理它。
jQuery:
(function($){
$.fn.extend({
// extends jQuery with the opposite Event Listener
onno:function(eventname,t,fn){
var onnotimer = null;
var jqueryevent = {};
$(this).on( eventname, function(e){
window.clearTimeout(onnotimer);
function OnNoEventFn(){
jqueryevent = jQuery.Event( "onno"+eventname );
$(this).trigger(jqueryevent);
e.timeStampVision=e.timeStamp+t;
e.timer=t; e.type="onno"+eventname;
fn(e);
}
onnotimer = window.setTimeout( OnNoEventFn, t);
});
return $(this);
}
});
})(jQuery);
$(document).ready(function() {
// installs "onnomousemove" and fires after 5sec if mousemove does not happen.
$(window).onno('mousemove', 5000, function(e){
console.log('function fires after:'+e.timer+'ms at:'+e.timeStampVision+'ms with:"'+e.type+'" event, exact fired:', e.timeStamp);
});
// installs "onnoclick" and fires after 4sec if click does not happen.
$(window).onno('click', 4000, function(e){
console.log('function fires after:'+e.timer+'ms at:'+e.timeStampVision+'ms with:"'+e.type+'" event, exact fired:', e.timeStamp);
});
// just for demonstration, routine with "onno.." eventnamescheme
$(window).on('onnomousemove',function(e){
console.log( 'tadaaaa: "'+e.type+'" works! with jQuery Event',e);
});
// same for "onnoclick"
$(window).on('onnoclick',function(e){
console.log( 'tadaaaa: "'+e.type+'" works! with jQuery Event',e);
});
});
// but how to install Custom Events even in older Safari ?
// newer Chrome, Firefox & Opera have CustomEvent.
window.addEventListener('onnomousemove',function(e){
console.log('native js is watching you',e);
},false);