调整大小事件未在div上触发

san*_*han 3 html javascript css

看一下这个例子:https : //jsfiddle.net/vxun2Lgg/2/

我在containerdiv 上附加了“调整大小”事件监听器。打开开发工具并修改的宽度后container,不会调用resize回调。我想念什么?

PS:我对窗口调整大小事件不感兴趣,仅对containerdiv 感兴趣。

的HTML:

<div class="container"></div>
Run Code Online (Sandbox Code Playgroud)

js:

var container = document.getElementsByClassName("container")[0];
container.addEventListener("resize",function(){console.log("resizing")});
Run Code Online (Sandbox Code Playgroud)

Alm*_*pos 15

这个答案通过提供可运行的代码扩展了接受的答案,您可以在代码片段运行器(底部的按钮)上尝试该代码。我将解释直接保留在代码上。

不管你信不信,你只需要一个 3 行函数(onresize)来模拟调整大小事件。

好好享受!

// This function works like an Event Listener for
// resizing a dom element.
//
// The ResizeObserver calls the callback function
//   whenever the size of the dom_element changes
//   (because it's "observing" the dom_elem)
//
// Do this:
//
//    understand_it_first
//       .then(copy_it)
//       .then(use_it);
//
// THIS IS THE 3-LINE FUNCION YOU WANT TO USE :)
//
const onresize = (dom_elem, callback) => {
  const resizeObserver = new ResizeObserver(() => callback() );
  resizeObserver.observe(dom_elem);
};

// USING IT
//

// Using constants to make it easier to read the code
//
const bb = document.getElementById('bad_boss');
const be = document.getElementById('bad_employee');

// Finally, register the observer for the dom_elem
//
onresize(bb, function () {
  be.style.width  = bb.offsetWidth + 'px';
  be.style.height = bb.offsetHeight + 'px';
});
Run Code Online (Sandbox Code Playgroud)
#bad_boss, #bad_employee{
  font-size        : 32px;
  height           : 200px;
  width            : 200px;
}
  
/* Colors that Talk*/

#bad_boss {
  background-color : #0badb055;
}
#bad_employee {
  background-color : #0b00c0de;
  color            : #0badc0de;
}
Run Code Online (Sandbox Code Playgroud)
<!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>ResizeObserver - onresize Demo</title>
    </head>
    <body>
        <!-- Experiment to resize this <textarea> -->
        <textarea id="bad_boss">Always do whatever I say!</textarea>
        <div id="bad_employee">Always, Boss!</div>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)


H.B*_*.B. 6

resize仅对有效window如果支持,可以使用ResizeObserver

new ResizeObserver(() => console.log("resizing")).observe(container);
Run Code Online (Sandbox Code Playgroud)

否则,您可能必须轮询使用setInterval并检查大小。

  • 轮询?这是一个非常糟糕的建议。如果您的 div 大小发生了变化,那是由于外部事件造成的。处理此外部事件。 (2认同)
  • @Kaiido:我猜这是……人们可以有的一种意见。 (2认同)