【发布时间】:2021-05-22 17:42:37
【问题描述】:
这不是重复的!我对其他答案的结果不满意。如果您仍然认为它是重复的,请在您认为它的原因之前评论它!
我必须观察元素的大小变化。我试图通过在 offsetWidth 属性上创建一个 setter 来做到这一点,如下所示:
const div = document.querySelector("div");
div.addEventListener("resize", console.log);
div.addEventListener("click", () => console.log(div.offsetWidth));
let width = div.offsetWidth;
Object.defineProperty(div, "offsetWidth", {
get: () => width,
set: val => {
width = val;
div.dispatchEvent(new Event("resize"));
}
});
document.querySelector("button").onclick = () => div.style.width = "200px";
div {
background-color: #f00;
width: 300px;
height: 300px;
}
<div></div>
<button>
Set size
</button>
点击红框记录大小。然后按下按钮。什么都没发生。如果再次单击该框,它仍将显示旧尺寸。为什么这不起作用?
【问题讨论】:
-
你考虑过ResizeObserver吗?
-
你没有设置
offsetWidth(它是派生的并且是只读的)所以你的setter永远不会运行。
标签: javascript html resize offsetwidth