这是一个有点复合的情况,但在更孤立的情况下不发生。
我创建了两个自定义元素:
<my-element> (聚合物),需要知道它的宽度时,当邮票到DOM (最初是多汁瓦片清单)
my-element.html
聚合物(‘my-element’,{ domReady: function (){ this.width = this.offsetWidth;<dynamic-import> (VanillaJS),它在附加时添加HTML (<link>标记到头部)(最初是导入模板),并且根本不改变元素的DOM。
dynamic-import.html
DynamicImportPrototype.attachedCallback = function () { //创建新的链接标记// .Document.head.appendChild(链接);};然后我就把它们打包到<template>上
...
<template bind>
<my-element>
<dynamic-import></dynamic-import>
</my-element>
</template>全演示在这里
在金丝雀(本地HTML支持?)中,this.offsetWidth是0,但是对于带有样式width: 100%的空<div>,则应该是容器- <body>宽度。
在Chrome稳定的环境下,IE工作得很好,在几毫秒后也会得到修正。删除包装<template>修复初始宽度,以及删除document.head.appendChild行。在头部添加节点是如何以及为什么影响元素大小的?这是聚合物,金丝雀,还是我的代码中的一个bug?有什么好办法吗?
发布于 2014-06-27 21:27:06
不过,我找到了一个临时解决办法--从附加流中删除动态导入:
DynamicImportPrototype.attachedCallback = function () {
// create new link tag
var link = document.createElement('link');
link.rel = "import";
link.href = "components/whatever.html";
// add it to the head
setTimeout( function asyncImport(){
document.head.appendChild(link);
});
};然后,测量应该发生之前,进口将增加。相反,这样做需要等待导入继续呈现,这不仅很难实现,而且可能严重影响UX。
https://stackoverflow.com/questions/24454516
复制相似问题