使用javascript加载页面后预加载图像&;for循环

使用javascript加载页面后预加载图像&;for循环,javascript,image,loops,for-loop,preload,Javascript,Image,Loops,For Loop,Preload,我目前正在创建一个网页照片库。我有很多图片,我想在页面加载后用Javascript预加载。我的数组中没有一个非常非常长的HTML链接列表,是否可以利用进行循环?请看我下面的代码。任何关于for循环的错误的有用见解都将不胜感激!谢谢 <script type="text/javascript"> function preloader() { var images = new Array() function preload() {

我目前正在创建一个网页照片库。我有很多图片,我想在页面加载后用Javascript预加载。我的数组中没有一个非常非常长的HTML链接列表,是否可以利用
进行
循环?请看我下面的代码。任何关于for循环的错误的有用见解都将不胜感激!谢谢

<script type="text/javascript">
    function preloader() {
        var images = new Array()
        function preload() {
            for (i = 0; i < preload.arguments.length; i++) {
                images[i] = new Image()
                images[i].src = preload.arguments[i]
            }
        }
        preload(
            var i=1;
            "http://example.com/images/gallery/elephants-" + for (i=1;i<=5;i++) {document.write(i);} + ".jpg",
            "http://example.com/images/gallery/penguins-" + for (i=1;i<=2;i++) {document.write(i);} + ".png"
        )
    }

    function addLoadEvent(func) {
        var oldonload = window.onload;
        if (typeof window.onload != 'function') {
            window.onload = func;
        } else {
            window.onload = function() {
                if (oldonload) {
                    oldonload();
                }
                func();
            }
        }
    }
    addLoadEvent(preloader);
</script>

不能将字符串和循环连接在一起。您必须使用循环和方法构建字符串数组:

因此,您的整个预加载功能变为:

function preloader() {
    var images = new Array()
    function preload() {
        for (i = 0; i < preload.arguments.length; i++) {
            images[i] = new Image()
            images[i].src = preload.arguments[i]
        }
    }

    var i, urls = [];
    for(i = 1; i <= 5; i++)
        urls.push('http://example.com/images/gallery/elephants-' + i + '.jpg');
    for(i = 1; i <= 2; i++)
        urls.push('http://example.com/images/gallery/penguins-' + i + '.jpg');

    preload.apply(null, urls);
}
函数预加载程序(){
var images=新数组()
函数预加载(){
对于(i=0;i对于(i=1;i您定义了一个预加载函数,该函数接受零个参数,但您试图将多个参数传递到预加载函数中。此外,您使用分号来分隔参数,而不是使用必需的逗号

为了实现这一点,我建议修改预加载函数,以获取一个数组对象,然后您可以迭代该对象,而不管有多少参数传入该函数。下面是一个示例函数定义:

function preload(arr) {
    for(var i = 0; i < arr.length; i++) {
        var img = document.createElement("img");
        img.setAttribute("style","display:none");
        img.setAttribute("src",arr[i]);
        document.body.appendChild(img);
    }
}
此数组包含3个字符串,3个字符串中的每一个都将传递到单独的隐藏图像标记的src属性中


对于我的具体示例,我唯一的免责声明是IE的某些版本可能会缓存隐藏图像,也可能不会缓存隐藏图像。无论何时使用原始JavaScript,而不是像jQuery这样的库,您都需要在每个浏览器中进行彻底测试,以确保解决方案是交叉兼容的。也许您可以简单地修改您的函数以接受c请更正参数,然后使用您现有的技术预加载图像,前提是您的解决方案经过验证,并且您知道它适用于您计划支持的所有浏览器。

谢谢Paul!我非常感谢您的帮助!您的解决方案非常有效!!
preload.apply(null, urls);
function preloader() {
    var images = new Array()
    function preload() {
        for (i = 0; i < preload.arguments.length; i++) {
            images[i] = new Image()
            images[i].src = preload.arguments[i]
        }
    }

    var i, urls = [];
    for(i = 1; i <= 5; i++)
        urls.push('http://example.com/images/gallery/elephants-' + i + '.jpg');
    for(i = 1; i <= 2; i++)
        urls.push('http://example.com/images/gallery/penguins-' + i + '.jpg');

    preload.apply(null, urls);
}
function preload(arr) {
    for(var i = 0; i < arr.length; i++) {
        var img = document.createElement("img");
        img.setAttribute("style","display:none");
        img.setAttribute("src",arr[i]);
        document.body.appendChild(img);
    }
}
preload( 
    [ 
        "/images/first.png",
        "/images/second.png",
        "/images/third.png"
    ]
);