![](/img/trans.png)
[英]How can I load some html code into a <div> but mantaining the css and js of the original page?
[英]How can I compensate for longer load times when dynamically setting div dimensions with CSS and JS?
我正在创建一个Polymer应用程序,它在自定义元素“table”中的行中显示信息。 我使用聚合物flexbox类来初始定位元素。 我需要在元素加载后使用JS进行测量,并相应地为表中的元素指定宽度。 问题是这样的:
row 1
*--------------------*
| *-----------*|
| | el a ||
| *-----------*|
*--------------------*
row 2
*--------------------*
| *------*|
| | el b ||
| *------*|
*--------------------*
第1行和第2行具有固定的宽度,但是el a
或b
可以具有任何宽度。 无论el a
或b
的内容如何,我都希望行中包含的el与宽度最宽。 因此,在这种情况下, a
是最宽的,因此el b
应调整其宽度以匹配a
。
我正在使用聚合物attached
方法来确保在通过JS进行scrollWidth
测量之前加载元素。 当我尝试用querySelector
抓取它时,我最初遇到了获取未定义元素的问题,但我使用Polymer的async
修复了这个问题。 我可以在现代浏览器中很好地设计元素的样式。 请考虑以下代码。
attached: {
this.async(function() {
console.log(Polymer.dom(this.root).querySelector('#a').scrollWidth);
console.log(Polymer.dom(this.root).querySelector('#b').scrollWidth);
}, 100);
}
现代版本的chrome将返回类似100px的a
和60px的b
。 如果我测试较旧版本的chrome或不同的浏览器(如firefox),则a
和b
将比现代测量的镀铬低5-15px。 我发现如果我足够长时间地增加异步时间,无论浏览器的年龄如何,我最终都会得到一个与现代镀铬返回的测量值相匹配的测量值。 这就是说,当看起来div存在于页面上并且我可以使用querySelector
抓取它时,它似乎是波动的,所以它还没有达到它的全宽。
我不想猜测元素在进行测量之前需要多长时间才能完全加载。 我试图找出一种方法,我可以100%确信元素已经完成加载,或者可能是另一种造型这些我忽略的元素的方法。 我最成功的是在正在进行测量的函数上使用setTimeout
并等待它连续几次测量同样的事情。 但即使这样,一直走在时间和偶尔不一致b
将略少宽比a
出现在网页时。
当你需要继续检查事物的一个选项,即使它已经成功几次,就是继续无限地使用setTimeout,直到值不再为certian#of iterations改变。 例如,如果它们在10次超时后仍然相同,则停止超时。
就像是...
var count = 0;
function check() {
do_something();
if (same_as_last_time == true) {count++}
if (count < 10) setTimeout (check,100);
}
setTimeout (check,100);
虽然这可能非常低效,并且可能无效,具体取决于您的数据出现的交错方式。
我相信这里的实际解决方案在于您使用变量“.scrollWidth”作为测量点,这是一种可靠的测量方法,可以跨浏览器标准化您的宽度。 有关详细信息,请参阅此SO帖子( https://stackoverflow.com/a/33672058/3479741 )
我建议改为使用另一种获取宽度的方法,然后比较看看你的结果是否更一致。 在上面的文章中,有许多选项比“.scrollWidth”更加一致。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.