1 回答
TA贡献1946条经验 获得超4个赞
当您手动调整大小时,element.style.{width, height}
请进行设置。因此,自动调整大小的一种解决方案是不使用这些属性,而是以其他方式设置宽度和高度,以便您可以区分这些值。
对于width
,这很简单,因为自动调整大小仅设置height
:如果width
设置了(或者,如果设置了类似 的值calc(100% - 2px)
,则设置为其他值),则断开自动调整大小。
为了身高?这更难,但我想到了两种技巧:
在单独的样式表中设置高度(以便
element.style.height
根本不设置),并继续更新该样式元素的文本。使用
height: var(--height)
, 并将其设置--height
为实际值。除非用户调整大小,否则这种方式element.style.height
不会改变。我推荐这种技术,因为它更容易推理,而且我怀疑它可能会更快一点(尽管我根本没有测试过)。
<style>
iframe {
width: calc(100% - 2px);
border: 1px solid black;
resize: both;
}
</style>
<iframe srcdoc="<h1>The quick brown fox jumps over the lazy doggerel."
style="height:var(--height)"
onload="
recalculate = () => {
// (var(--height) could just as easily be shifted to the stylesheet,
// but I’m demonstrating a point here in how it can be done.)
if (this.style.width || this.style.height !== 'var(--height)') {
// User resizing has occurred.
if (observer) {
observer.disconnect();
}
return;
}
this.style.setProperty('--height', this.contentDocument.documentElement.offsetHeight + 'px');
}
var observer = window.ResizeObserver && new ResizeObserver(recalculate);
if (observer) {
observer.observe(this.contentDocument.documentElement);
}
recalculate();
"></iframe>
- 1 回答
- 0 关注
- 69 浏览
添加回答
举报