Visual Studio highlighted my onresize attribute of my div tag, and says that it isn\'t a valid attribute for HTML5. Is this true? What should I use
Currently all major browser doesn't support a resize event for html-element's, just for the window object.
What you can to is to intercept the user interaction to build your own listener, like this:
function detectResize(_element)
{
let promise = {};
let _listener = [];
promise.addResizeListener = function(listener)
{
if(typeof(listener) != "function") { return; }
if(_listener.includes(listener)) { return; };
_listener.push(listener);
};
promise.removeResizeListener = function(listener)
{
let index = _listener.indexOf(listener);
if(index >= 0) { _listener.splice(index, 1); }
};
let _size = { width: _element.clientWidth, height: _element.clientHeight };
function checkDimensionChanged()
{
let _currentSize = { width: _element.clientWidth, height: _element.clientHeight };
if(_currentSize.width != _size.width || _currentSize.height != _size.height)
{
let previousSize = _size;
_size = _currentSize;
let diff = { width: _size.width - previousSize.width, height: _size.height - previousSize.height };
fire({ width: _size.width, height: _size.height, previousWidth: previousSize.width, previousHeight: previousSize.height, _element: _element, diff: diff });
}
_size = _currentSize;
}
function fire(info)
{
if(!_element.parentNode) { return; }
_listener.forEach(listener => { listener(info); });
}
let mouseDownListener = event =>
{
let mouseUpListener = event =>
{
window.removeEventListener("mouseup", mouseUpListener);
window.removeEventListener("mousemove", mouseMoveListener);
};
let mouseMoveListener = event =>
{
checkDimensionChanged();
};
window.addEventListener("mouseup", mouseUpListener);
window.addEventListener("mousemove", mouseMoveListener);
};
_element.addEventListener("mousedown", mouseDownListener);
window.addEventListener("resize", event =>
{
checkDimensionChanged();
});
return promise;
}
How to use it:
document.addEventListener("DOMContentLoaded", event =>
{
let textarea = document.querySelector("textarea");
let detector = detectResize(textarea);
let listener = info => { console.log("new width: ", info.width, " new height: ", info.height); };
detector.addResizeListener(listener);
});
html:
css:
html, body
{
height: 100%;
box-sizing: border-box;
overflow: hidden;
margin: 0px;
}
textarea
{
resize: both;
width: 96px;
height: 112px;
width: 100%;
height: 100%;
border: 1px solid black;
}