【问题标题】:Javascript image onloadJavascript图像加载
【发布时间】:2011-03-20 05:33:10
【问题描述】:

每次之前加载的图像完成加载时,我都会尝试加载新图像。 函数 create_photo_list 工作正常。它创建了一组需要加载的照片。如果不需要加载,则数组为空。问题是,当没有更多要加载的项目时,它会一直调用 load_next_photo 函数。

我每次在函数中调用 registerEventHandler 的原因是因为如果我不这样做,则在下一张照片加载时不会调用该函数。

    function registerEventHandler(node, event, handler) {
    if (typeof node.addEventListener == "function")
        node.addEventListener(event, handler, false);
    else
        node.attachEvent("on" + event, handler);
}

// Remove an HTML element event handler such as onclick
// ex: unregisterEventHandler($("textfield"), "keypress", showEvent);
function unregisterEventHandler(node, event, handler) {
if (typeof node.removeEventListener == "function")
    node.removeEventListener(event, handler, false);
else
    node.detachEvent("on" + event, handler);
}

function load_next_photo() {
    var loading_list = create_photo_list();
    alert(loading_list.length);
    if (loading_list.length > 0) {
        img[loading_list[0]]['loaded'] = 1;
        registerEventHandler($("load_img"), "onload", load_next_photo());
        $("load_img").src = img[loading_list[0]]['img'];
    }
    else {
        alert("nothing");
        unregisterEventHandler($("load_img"), "onload", load_next_photo())
    }
    unregisterEventHandler($("load_img"), "onload", load_next_photo())
}

【问题讨论】:

  • 只是好奇,你为什么不使用 jquery 作为你所有的事件监听代码?
  • 我是一名业余开发人员,我以前从未听说过它;)不过,我真的更喜欢解决方法。
  • 不不,我的意思是所有的$("load_img") 电话。这看起来像 jquery(除非你有自己的框架设置)。
  • 我会在这里从 load_next_photo 中删除 ():..registerEventHandler($("load_img"), "onload", load_next_photo());

标签: javascript dom javascript-events


【解决方案1】:

我无法理解您目前拥有的内容,但这样的代码可以正常工作:

var _images = ["image1.jpg", "image2.jpg", "image3.jpg"];
var _index = 0;

window.onload = function() {
    LoadImage();
};

function LoadImage() {
    //stop condition:
    if (_index >= _images.length)
        return false;

    var url = _images[_index];
    var img = new Image();
    img.src = url;
    img.onload = function() {
        _index++;
        LoadImage();
    };

    document.getElementById("Container").appendChild(img);
}

这会将图像一个一个添加到容器(ID为Container的元素),现场测试用例:http://jsfiddle.net/yahavbr/vkQQ7/

这是纯 JS,请随时询问任何部分以进行详细说明。 :)

【讨论】:

  • 带有警报的版本以显示它确实在一个接一个地加载:jsfiddle.net/yahavbr/vkQQ7/1
  • 所以它可以工作,但我有一个名为 img 的函数之外的数组。当我尝试在函数中引用它时(例如 alert(img[first_photo]['img']);)它给出了一个未捕获的类型错误:无法读取未定义的属性 '3'。我知道数组存在。这是什么原因造成的?
  • @Sam 试试alert(typeof img); - 你看到了什么?如果“未定义”,则意味着由于某种原因它没有在任何地方定义。发布相关代码(编辑您的原始问题),我们将尝试了解原因。请在执行此操作时发表评论,以便我收到通知。
  • @Shadow Wizard 它是“未定义的”。 img数组其实是用php创建的,所以直接查看page的源码就更简单了。
  • @Sam - 谜团解开了。我也称我的局部变量为img,因此它“覆盖”了全局变量。将我函数中的代码更改为:var image = new Image(); image.src = url; image.onload = ...,它应该可以工作。
猜你喜欢
  • 2011-08-21
  • 2014-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-11
  • 2012-07-04
  • 2021-09-20
  • 2011-02-22
相关资源
最近更新 更多