javascript - 仅在执行前一条语句后才开始的语句

标签 javascript jquery html css callback

初学者问题在这里。我正在使用 JavaScript 和 jQuery 构建一个照片查看器。

当您单击箭头查看下一张图片时,我希望当前图片淡出,然后下一张图片淡入。我遇到的问题是,如果图片加载时间稍长,当淡入开始时,我想让旧图片仍然存在,所以本质上我需要的是确保在加载新图片之前不会开始淡入。

所以这三个语句必须运行,每个语句只有在前一个语句已经执行时才执行:

$('#image').fadeOut(500);
getImage();
$('#image').fadeIn(500);

这是我获取新图像的函数:

getImage = function() {
    document.getElementById("image").src = "Images/Image" + counter + ".jpg";
}

其中 counter 是我之前声明的变量,当您单击“下一步”按钮等时它会更新...

所以,由于对编程了解不多,我正在寻找一种方法来确保这一点

$('#image').fadeIn(500);

除非已获取新图像或发生的情况是旧图像开始淡入然后我们得到新图像,否则不会运行。

我试过回电,像这样:

$('#image').fadeOut(500, function() {
        getImage();
});

$('#image').fadeIn(500);

但这行不通,因为您需要在回退中进行回退,而我不知道该怎么做。

我尝试过的另一件事是做这样的事情:

var hasloaded = $('#image').fadeOut(500, function() {
    getImage();
});

if (hasloaded)
{$('#image').fadeIn(500);}

这也行不通,尽管我认为我写它的时候真的很聪明。

感谢任何帮助。

谢谢。

最佳答案

您可以创建一个 JavaScript Image 对象,并在 load 事件中将 src 设置为目标元素

$('#image').fadeOut(500, function () {
    getImage(function () {
        $('#image').fadeIn(500);
    });
});

getImage = function (cb) {
    var img = new Image();
    img.onload = function () {
        document.getElementById("image").src = img.src;
        cb();
    };
    img.src = "Images/Image" + counter + ".jpg";
}

使用 promise()

$('#image').fadeOut(500, function () {
    getImage().then(() => {
        $('#image').fadeIn(500);
    });
});

getImage = function () {
    return new Promise((resolve, reject) => {
        var img = new Image();
        img.src = "Images/Image" + counter + ".jpg";
        img.onload = function () {
            document.getElementById("image").src = img.src;
            resolve("Success!");
        };
    });
}

关于javascript - 仅在执行前一条语句后才开始的语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45412068/

相关文章:

javascript - 使用按钮控件执行 ESRI GP 服务

ASP.NET - 如何检查浏览器是否支持 html5?

javascript - md-select 中的预选值 - AngularJS

javascript - Laravel 使用 xmlhttp.open 链接一个 Controller 函数

javascript - jQuery 到纯 JS 循环特定部分的代码,其中涉及获取索引顺序

javascript - 为什么不显示引导工具提示的样式?

php - 在 div 中加载的页面的面包屑

javascript - 使用 Jquery 在另一个元素第一次出现之前插入元素/文本

javascript - 用于验证纬度和经度正则表达式的 jQuery

javascript - 切换后的动画不应用第二种样式