Onresize for div elements?

前端 未结 4 717
花落未央
花落未央 2020-11-30 04:36

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

4条回答
  •  情话喂你
    2020-11-30 05:18

    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;
    }
    

提交回复
热议问题