所有图像调整大小后如何触发调整大小事件

时间:2015-12-19 02:40:24

标签: javascript c# model-view-controller razor

我有一个在窗口调整大小上调用的函数

$(window).resize(setVideoElements);

该函数设置一类videoThumbnail容器的高度

var setVideoElements = function () { setElementsHeight('.videothumbnail'); };

function setElementsHeight(selector) {

    console.log('setting Max element height');

    // Get an array of all element heights
    var elementHeights = $(selector).map(function () {
        return $(this).height();
    }).get();

    // Math.max takes a variable number of arguments
    // `apply` is equivalent to passing each height as an argument
    var maxHeight = Math.max.apply(null, elementHeights);

    // Set each height to the max height
    $(selector).height(maxHeight);
}

除了射击太快之外,该功能正常工作

<div class="thumbnail videothumbnail">
  <a href="@Url.Action("Video", new { ID = Video.ID })">
    <img class="videoThumbnailImg" src="@Video.ThumbnailUrl" alt="">
  </a>
  <div class="caption">
     <h3>@Video.Name</h3>
     @foreach (var tag in Video.TagsToVideos)
     {
        <span><a href="#">@tag.Tag.Name</a></span>
     }
  <p>@Video.Description</p>
</div>

问题是在调整图像大小之前函数正在触发。我需要在所有图像都已调整大小后触发调整大小功能。

有人知道如何在所有图像都调整大小后触发此功能吗?

2 个答案:

答案 0 :(得分:2)

<img> HTML元素有一个onload回调。当图像数据从其源完成下载时,它将触发。利用它来记录加载图像的时间。计算加载事件并在加载所有图像后调用setElementHeight

示例如下所示:

var sources = ['img/a.jpg', 'img/b.jpg', 'img/c.jpg'],
    loaded = 0;

for (var idx in sources) {
  var img = document.createElement('img');
  img.onload = function() {
    loaded++;
    if(loaded === sources.length) {
      setElementHeight();
    }
  }
  img.src = sources[idx];
}

答案 1 :(得分:1)

对于任何想知道我需要清除我在调整大小

上设置的固定高度的人
function clearHeight(selector) {
    $(selector).height('auto');
}