[英]How to observer multiple elements with a ResizeObserver?
How do I observe multiple elements with ResizeObserver like all textareas?如何像所有文本区域一样使用 ResizeObserver 观察多个元素? Using document.querySelectorAll() results in an error.
使用 document.querySelectorAll() 会导致错误。
var ro = new ResizeObserver( entries => {
for (let entry of entries) {
// do something
}
});
// Works
ro.observe(document.querySelector('textarea'));
// Doesn't work
ro.observe(document.querySelectorAll("textarea"));
Error: VM112:8 Uncaught TypeError: Failed to execute 'observe' on 'ResizeObserver': parameter 1 is not of type 'Element'.
at <anonymous>:8:4
querySelectorAll
returns aNodeList
, you can use .forEach
to iterate over each and pass it into the observer: querySelectorAll
返回一个NodeList
,您可以使用.forEach
遍历每个并将其传递给观察者:
const boxes = document.querySelectorAll('.box'); const myObserver = new ResizeObserver(entries => { for (let entry of entries) { const width = Math.floor(entry.contentRect.width); const height = Math.floor(entry.contentRect.height); entry.target.value = `I'm ${ width }px and ${ height }px tall`; } }); boxes.forEach(box => { myObserver.observe(box); });
.box { text-align: center; border: 1px solid black; height: 100px; border-radius: 8px; display: flex; }
<textarea class="box"> </textarea> <textarea class="box"> </textarea>
EDIT: You could also observe single element at a time but they need to be initialized individually:编辑:您也可以一次观察单个元素,但它们需要单独初始化:
const boxes = document.querySelectorAll('.box'); boxes.forEach(box => { new ResizeObserver(entries => { const width = Math.floor(entries[0].contentRect.width); const height = Math.floor(entries[0].contentRect.height); entries[0].target.value = `I'm ${ width }px and ${ height }px tall`; }).observe(box); });
.box { text-align: center; border: 1px solid black; height: 100px; border-radius: 8px; display: flex; }
<textarea class="box"> </textarea> <textarea class="box"> </textarea>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.