javascript - 如何延迟 JavaScript 的执行?

标签 javascript jquery css

我是 JavaScript 的新手,对此感到很紧张......

问题的演示在这里:http://codepen.io/sol_b/pen/PzgdWy

这是脚本:

var sections = function() {
  $('.image').each(function() {
    var $this = $(this),
        x = $this.find('img').width()
    $this.width(x);
  });
};

$(document).ready(function() { 
  sections();
 });

$(window).resize(function() {
  sections();
})

图像的宽度被计算并分配给图像的容器。这个想法是图像行将始终保持其纵横比,容器之间没有间隙。

问题是代码大约有 50% 的时间会失败,并且图像会挤在一起。调整窗口大小可以修复它,所以我认为这与加载顺序有关。

我试过使用 window.onload 和 img.onload 而不是 document.ready,但这些都没有解决问题。我错过了脚本中的某些内容吗?

最佳答案

在图像上使用load 并计数直到所有图像都加载完毕,然后执行您的函数。

var images $('.image');
var amount = images.length;

images.on('load', function() {
    if( --amount == 0 ) {
        sections();
    }
});

要防止从监听器执行缓存的图像,您可以手动触发它们(甚至在 window.load 上)。这行将触发缓存元素的事件:

images.each(function() {
    $(this).complete && $(this).trigger('load');
});

关于javascript - 如何延迟 JavaScript 的执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39101046/

相关文章:

javascript - 保存并读取数据库中的复选框值,更改标签的状态

javascript - highcharts:在钻取中使用 JSON

javascript - 如何修改此主题标签正则表达式以检查第二个字符是 a-z 还是 A-Z?

javascript - 如何在java脚本中向任何给定日期添加任意天数

javascript - 在 knockout.js 中执行所有 observableArray 依赖项后如何执行函数

javascript - 如何在 p5.js 中启用右键单击?

javascript - 在 JavaScript 中通过引用从 json 树中删除对象

html - 如何显示带图片的无序列表并且每张图片旁边都有段落?

html - 如何使用显示 :flex? 显示包含图像和文本的列表

html - 如何设置文本背景颜色而不溢出过去的文本