මම මෑතකදී සිදුවීම් සමඟ වැඩ කරමින් සිටි අතර පිටුවක ඇති සියලුම සිදුවීම් බැලීමට / පාලනය කිරීමට මට අවශ්ය විය. හැකි විසඳුම් දෙස බැලීමෙන් පසු, මගේම මාර්ගයට ගොස් සිදුවීම් අධීක්ෂණය කිරීම සඳහා අභිරුචි පද්ධතියක් නිර්මාණය කිරීමට මම තීරණය කර ඇත්තෙමි. ඉතින්, මම කරුණු තුනක් කළා.
පළමුව, පිටුවේ ඇති සියලුම සිදුවීම් අසන්නන් සඳහා මට කන්ටේනරයක් අවශ්ය විය: එය EventListenersවස්තුවයි. එය එය ප්රයෝජනවත් ක්රම තුනක් ඇත: add(), remove(), සහ get().
ඊළඟට, මම නිර්මාණය EventListenerමෙම අවස්ථාවට සඳහා අවශ්ය තොරතුරු පැවැත්වීමට වස්තුව, එනම්: target, type, callback, options, useCapture, wantsUntrusted, සහ ක්රමය එකතු remove()ශ්රවණය ඉවත් කිරීමට.
අවසාන වශයෙන්, මා විසින් නිර්මාණය කරන ලද ( සහ ) වස්තූන් සමඟ වැඩ කිරීමට ස්වදේශික addEventListener()හා removeEventListener()ක්රම දීර් extended කළෙමි .EventListenerEventListeners
භාවිතය:
var bodyClickEvent = document.body.addEventListener("click", function () {
console.log("body click");
});
// bodyClickEvent.remove();
addEventListener()EventListenerවස්තුවක් සාදයි , එය එකතු කර වස්තුව EventListenersආපසු ලබා දෙයි EventListener, එවිට එය පසුව ඉවත් කළ හැකිය.
EventListeners.get()පිටුවේ සවන්දෙන්නන් බැලීමට භාවිතා කළ හැකිය. එය EventTargetනූලක් හෝ නූලක් පිළිගනී (සිදුවීම් වර්ගය).
// EventListeners.get(document.body);
// EventListeners.get("click");
නිරූපණය
මෙම වත්මන් පිටුවෙහි සෑම සිදුවීම් අසන්නෙකුම දැන ගැනීමට අපට අවශ්ය යැයි කියමු. අපට එය කළ හැකිය (ඔබ මේ අවස්ථාවේ දී ස්ක්රිප්ට් මැනේජර් දිගුවක් භාවිතා කරන බව උපකල්පනය කරන්න, ටැම්පර්මොන්කි). පහත පිටපත මෙය කරයි:
// ==UserScript==
// @name New Userscript
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author You
// @include https://stackoverflow.com/*
// @grant none
// ==/UserScript==
(function() {
fetch("https://raw.githubusercontent.com/akinuri/js-lib/master/EventListener.js")
.then(function (response) {
return response.text();
})
.then(function (text) {
eval(text);
window.EventListeners = EventListeners;
});
})(window);
අපි සියලු සවන්දෙන්නන් ලැයිස්තුගත කරන විට, එයින් කියවෙන්නේ සිදුවීම් අසන්නන් 299 ක් සිටින බවයි. එහි සමහර අනුපිටපත් ඇති බව පෙනේ, නමුත් ඒවා ඇත්ත වශයෙන්ම අනුපිටපත් දැයි මම නොදනිමි. සෑම සිදුවීම් වර්ගයක්ම අනුපිටපත් නොකෙරේ, එබැවින් එම “අනුපිටපත්” සියල්ලම තනි සවන්දෙන්නෙකු විය හැකිය.

කේතය මගේ ගබඩාවේ සොයාගත හැකිය . මට එය මෙහි පළ කිරීමට අවශ්ය නොවීය.
යාවත්කාලීන කිරීම: මෙය jQuery සමඟ වැඩ කරන බවක් නොපෙනේ. මම EventListener පරීක්ෂා කරන විට, ඇමතුම ආපසු ලබා දෙන බව මට පෙනේ
function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}
මම විශ්වාස කරන්නේ මෙය jQuery ට අයත් වන අතර එය සත්ය ඇමතුම නොවේ. jQuery විසින් EventTarget හි ගුණාංගවල සත්ය ඇමතුම් ලබා ගනී:
$(document.body).click(function () {
console.log("jquery click");
});

සිදුවීම් සවන්දෙන්නෙකු ඉවත් කිරීම සඳහා, සත්ය ඇමතුම removeEventListener()ක්රමයට ලබා දිය යුතුය . එබැවින් jQuery සමඟ මෙම කාර්යය කිරීමට නම්, එය තවදුරටත් වෙනස් කිරීම අවශ්ය වේ. මම අනාගතයේදී එය නිවැරදි කළ හැකිය.