我有一个脚本需要某个 div 的高度。
问题是 .height()
jQuery 中的方法不会返回正确的值,除非它位于 setTimeout
中函数,即使是 0
的值.
所以这个:
console.log("1:" + $(slides[0]).find('.slide__inner').height());
setTimeout(function(){console.log(
"2:" + $(slides[0]).find('.slide__inner').height());}
, 0);
结果
1: 0
2: 399 //expected value
现在我知道浏览器多线程的事情了,计时器元素中的元素以它们自己的....尺寸运行,但我需要让这个选择器打印正确的值而不使用 setTimeout 或任何计时器函数。
附加信息:
目标 div 是绝对位置,函数本身是为了在内部内容(和高度)都设置好之后专门启动。
编辑
这不是 When should I use jQuery's document.ready function? 的副本.我特别说过我不想使用 setTimeout....
编辑2
提到的afterLoad
函数是 Fancybox3 js 插件的一部分。
阅读源码发现here :
afterLoad : $.noop, // When the content of a slide is done loading
由于工作限制,我不能展示太多代码,但 block 本身位于 resize()
中内部声明 afterLoad
,它在 afterLoad
结束时被调用 block
最佳答案
基于 the documentation of the plugin you're using以及您对原始问题的评论,看起来您的问题可以通过使用 afterShow
回调而不是 afterLoad
来解决。此回调将在打开动画完成后触发,此时高度查询是合适的。
关于javascript - 选择器仅在 setTimeout 中找到合适的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46760571/