Reputation: 32143
I'm making a JS/PHP plugin for distribution. I want it to be as easy to install as this:
<HTML>
<HEAD>
<TITLE>Testing my Plugin</TITLE>
<?php
include 'path/to/myPlugin.php';
echo getMyPluginHeadContent();
?>
</HEAD>
<BODY>
<?php
echo getMyPluginContent("Arguments will go here");
?>
</BODY>
</HTML>
However, I want this plugin to attach a window resize listener without overriding window.onresize
, in case there are any other scripts that also require the use of that method. Is there any javascript command like document.addEventListener("resize", myResizeMethod, true);
? I know that's not it, because that's not working, and the MDN and W3C are very vague about what arguments addEventListener
takes.
I do not want an answer telling me to use window.onresize = myResizeMethod
or <BODY ONRESIZE="myResizeMethod">
, as these are not as plugin-friendly.
Upvotes: 41
Views: 104160
Reputation: 282
I highly recommend ResizeObserver
https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver
Example of use:
const resizeObserver = new ResizeObserver(e => {
console.log(e);
});
resizeObserver.observe(document.body);
Upvotes: 3
Reputation: 4449
Since you are trying to call this function on the resize of the window, you will want to bind the function to the window and not to the document. To support versions of IE that are less than 9, you will want to use attachEvent
. Please note that attachEvent
requires you to specify the on
keyword. Here is an example:
if(window.attachEvent) {
window.attachEvent('onresize', function() {
alert('attachEvent - resize');
});
}
else if(window.addEventListener) {
window.addEventListener('resize', function() {
console.log('addEventListener - resize');
}, true);
}
else {
//The browser does not support Javascript event binding
}
Similarly, you can remove events in the same way. When using removeEventListener
, make sure that you pass the same value of useCapture
as you did when calling addEventListener
. This is the third parameter which is the true/false
value.
if(window.detachEvent) {
window.detachEvent('onresize', theFunction);
}
else if(window.removeEventListener) {
window.removeEventListener('resize', theFunction, true);
}
else {
//The browser does not support Javascript event binding
}
Upvotes: 83
Reputation: 382404
You don't resize the document but the window. This works :
window.addEventListener("resize", function(){console.log('resize!')}, true);
Upvotes: 33