javascript - 每次按 "next"按键后,自定义 js 图像查看器加载速度变慢

标签 javascript jquery performance

我已经构建了一个工作正常的自定义图像查看器,但每次我使用箭头查看下一个或上一个图像时,它的加载速度越来越慢。到第 10 个图像时,可能需要花费几分钟,甚至卡住。我用来打开查看器的片段与我用来移动到下一张图像的片段相同,并且每次打开总是快如闪电;只有当我使用箭头键时,速度才会变慢。有时 .php 文件根本不会加载,它只会说“未定义”,我相信它来自 JS 的某个地方?

function image_load(id) {
    $('.view').empty().load(image-viewer.php?id='+id, function() {
        $(document).keyup(function(e) {
            if (e.keyCode == 39) { 
                var next = $('#next').attr('alt');
                if(next != "null") {
                    image_load(next);
                    return false;
                }
            }
            if (e.keyCode == 37) { 
                var prev = $('#prev').attr('alt');
                if(prev != "null") {
                    image_load(prev);
                    return false;
                }
            } 
        });
    }); 
}

因此下一个/上一个引用它们所包含的函数。它是否以某种方式创建无限循环并减慢处理器速度?

最佳答案

根据我的评论,您正在创建一个无限循环,因为您一遍又一遍地重复绑定(bind)关键事件。您应该做的是将函数声明与事件处理程序分开:

var image_load = function(id) {
    $('.view').empty().load('image-viewer.php?id='+id);
};

$(document).keyup(function(e) {
    // Prevent default key actions
    e.preventDefault();

    // Evaluate pressed keys
    if (e.keyCode == 39) { 
        var next = $('#next').attr('alt');
        if (next) image_load(next);
    } else if (e.keyCode == 37) { 
        var prev = $('#prev').attr('alt');
        if (prev) image_load(prev);
    } 
});

关于javascript - 每次按 "next"按键后,自定义 js 图像查看器加载速度变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27414823/

相关文章:

javascript - Jquery显示更多的div和显示更少的div

javascript - 为什么这个简单的代码可以在 JSFiddle 上运行,但不能在我的服务器上运行?

javascript - 无法将 ASP.NET/MVC "Model"成员抓取到我的 JQuery 函数中

javascript - 主要和次要刻度线风格不同,整个页面覆盖D3?

javascript - 在调整大小时将图像高度应用于 Div

javascript - 为什么 IE8 用 Ja​​vaScript 渲染页面无法使用,而 FF 却表现良好?

javascript - jQuery document.ready 不前置

c# - 工具提示中的 Gridview

python - 在 Python 中有效确定幂集成员之间的子集

c# - ElapsedTicks、ElapsedMilliseconds、Elapsed.Milliseconds 和 Elapsed.TotalMilliseconds 之间的区别? (C#)