javascript - 我如何知道图像何时加载并对其使用react?

标签 javascript

我正在执行一个 AJAX 调用,当 AJAX 调用满足某些条件时,它会使用此函数,它应该显示两个图像。

我用函数创建元素,我所做的是添加一个类,同时使元素等“rightIn”和“leftIn”成为动画类。问题是当添加类并且图像来自左/右图像可能还没有完全加载到图像元素的源中......这会产生不好的效果?

那么基本上我如何等待并检查图像何时加载,然后在类中添加右/左?我用 .complete 和 load 事件尝试了一些不同的东西,但没有完全达到我想要的效果。

function optionTwo(versusOne, versusTwo, versusOneId, versusTwoId) {
    var newElement = createElement("div", {
        "id": "contentVersusWrapper",
        "class": ["contentVersusWrapper"]
    }, contentWrapper);
    var contentVersusWrapper = document.getElementById("contentVersusWrapper");
    var newElement = createElement("div", {
        "id": "contentVersusHelperOne",
        "class": ["contentVersusHelper", "leftIn"]
    }, contentVersusWrapper);
    var contentVersusHelperOne = document.getElementById("contentVersusHelperOne");

    var newDiv = createElement("img", {
        "id": "versusOne",
        "class": ["babeVersus"],
        "src": versusOne
    }, contentVersusHelperOne);
    var newDiv = createElement("input", {
        "id": "versusOneId",
        "class": ["versusOneId"],
        "type": "hidden",
        "name": "versus",
        "value": versusOneId
    }, contentVersusHelperOne);

    var newDiv = createElement("img", {
        "id": "versusIcon",
        "class": ["versusIcon", "scaleIn"],
        "src": "assets/img/versusIcon.png"
    }, contentVersusWrapper);

    var newElement = createElement("div", {
        "id": "contentVersusHelperTwo",
        "class": ["contentVersusHelper", "rightIn"]
    }, contentVersusWrapper);
    var contentVersusHelperTwo = document.getElementById("contentVersusHelperTwo");
    var newDiv = createElement("img", {
        "id": "versusTwo",
        "class": ["babeVersus"],
        "src": versusTwo
    }, contentVersusHelperTwo);
    var versusOne, versusTwo;

    var newDiv = createElement("input", {
        "id": "versusTwoId",
        "class": ["versusTwoId"],
        "type": "hidden",
        "name": "versus",
        "value": versusTwoId
    }, contentVersusHelperTwo);

    document.getElementById("versusOne").addEventListener('click', shuffleContent.bind(null, "versusOne"), false);
    document.getElementById("versusTwo").addEventListener('click', shuffleContent.bind(null, "versusTwo"), false);
}

最佳答案

一般来说,输入 load <img> 上的事件是一个很好的检查方法。

const img = document.createElement('img');
img.src = 'myurl.png';
img.addEventListener('load', () => console.log('loaded'));

但是,有一个问题。如果图像之前已加载,则不会触发 load事件

如果您创建大量图像并带有一些重复出现的 URL,则可能会发生这种情况。

但是,您可以通过检查 width 来检查这一点。或height的图像。未加载的图像的宽度和高度始终为 0。如果不是零,则已加载。

const img = document.createElement('img');
img.src = 'myimage.png';
img.addEventListener('load', onLoadFunc);

if (img.width) {
  onLoadFunc();
}

这将确保您捕获这两种方法以确保其已加载。

假设您的 createElement返回 Image元素(与 document.createElement('img') 产生的内容相同,那么您的代码可能如下所示:

var newDiv = createElement("img", {
    "id": "versusIcon",
    "class": ["versusIcon", "scaleIn"],
    "src": "assets/img/versusIcon.png"
}, contentVersusWrapper);
newDiv.addEventListener('load', doSomething);

if(newDiv.width) {
    doSomething();
}

哪里doSomething()是一个函数,可以在加载图像时执行您需要执行的任何操作。

关于javascript - 我如何知道图像何时加载并对其使用react?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44596659/

相关文章:

javascript - 生成列表

javascript - Wordpress 定制器自定义控件传输 postMessage 不起作用

javascript - 停止 if 语句 javascript AngularJS

javascript - 如何使用 Javascript 在 tbody 中的最后一个 tr 上添加行

javascript - jquery removeClass 似乎不起作用

javascript - 如何强制 jsonStringify 输出不带引号的数组?

javascript - 是否可以使用 jquery 完全删除元素?

javascript - 当可以在函数中定义时,定义 var 还重要吗?

javascript - 过滤包含表的表的行

javascript - 将 Fabric JS 中的 Canvas 平移限制到边界?