【问题标题】:Getting dimensions of Element with image inside that loads late获取元素的尺寸,其中包含延迟加载的图像
【发布时间】:2021-05-03 04:12:56
【问题描述】:

我目前正在努力使用offsetWidth 获取元素“幻灯片”的宽度。

var slide = $('.slides');

console.log(slide[0].offsetWidth);
console.log(slide[1].offsetWidth);

幻灯片中的所有元素都有不同的宽度。但是,它为所有元素返回相同的值,并且仅对第一个元素返回正确的值。

元素有一个width: min-content 属性。

.slides{
    width: min-content;
}

'slides' 元素内部是一个 <img> 元素,每个元素都有各自的纵横比,但高度相同。

.slides img{
    max-width: inherit;
    height: 35vw;
}

【问题讨论】:

  • 你能告诉我们实际的标记吗?或者至少创建一个最小的、具体的和可验证的例子。单个 .slides 可能具有相同的宽度,但内部元素可能不会:但是在您更新您的问题并提供更多详细信息之前,这一点尚不清楚。
  • 好的问题是图像在视口中后被加载。在此之前,slides 的大小相同。还是谢谢你。我应该删除问题吗?
  • 如果您自己解决了问题,您可以:关闭问题或发布答案。如果发布答案,您可能想让标题更“容易找到”。但无论哪种方式,感谢您更新问题。

标签: javascript jquery dom


【解决方案1】:

问题解决了。

如果您有同样的问题,请检查孩子内部的内容是否没有延迟加载。就像我的情况一样,里面的图像在视口中后被加载。这意味着在此之前它还没有宽度。

我是这样解决的:

这段代码会等待图片加载以获取宽度

var counter = 0;
$(document).ready(function(){
    images_length = $('.gallery-image').length;
    //i needed to wait until all images have loaded so i picked the last image that fires the last event.
    $('.gallery-image').on("load", function() {
        if(counter == images_length -1){
            var slides = $('.gallery-slide', this);
            for (let i = 0; i < slides.length; i++) {
                 console.log(slides[i].offsetWidth);
            }
        }
        counter++;
    });
});

【讨论】:

  • 你也有解决问题的办法吗?例如,您等待加载图像的事件是什么?
  • 我正在努力。如果我找到合适的解决方案,我会分享它。不幸的是,在我的情况下,解决方案可能过于具体,因为我使用的是“Imageoptimizer”。
  • 这里的东西可能会对你有所帮助:stackoverflow.com/search?q=%5Bjquery%5D+image+loaded+event
猜你喜欢
  • 2013-07-19
  • 1970-01-01
  • 2014-01-20
  • 1970-01-01
  • 2023-02-15
  • 1970-01-01
  • 2021-04-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多