带 jquery、json 和上一个/下一个按钮的图库。如果 json 请求返回未定义,则画廊中断

发布于 2024-08-10 03:01:35 字数 1312 浏览 4 评论 0原文

我是一名初级编码员,在今年夏天的实习中学习了 CSS、HTML 和 Jquery。我的老板希望我创建一个画廊,其中包含一个主图像,然后有两个按钮来显示下一个或上一个项目。他希望我使用 json,以便他们可以轻松添加和删除图像。我这样写,我从变量 0 开始,然后当我单击上一个/下一个时,它会减少/增加变量,然后返回到 json 来查找相应的图片。唯一的问题是,如果我有四张图片,如果值低于零或高于 3,它就会崩溃。
如何让 jquery 判断 json 查找是否返回未定义,以便我可以让它循环或禁用按钮?我想 if 语句是理想的,但我把它留给你。

$(document).ready(function(){
    $.getJSON("layout.json",function(data){

    // Then put the first picture up from the json data...
        $("<img />").attr({
            id: "0-middle_image", 
            class: "middle_image", 
            src: data.items[0].image ,
            })
        .appendTo("div#middle_image");

    // because I'm starting with the zeroth object, middleimage variable is 0
        var mi_val = 0 

    // when you click one of the cycle buttons...
        $("div.cycle_button").click(function(){
        //if it is the previous, decrement mi_val, else, increment mi_val
            if ( $(this).attr("id") == "button_prev") 
                         {--mi_val;}
            else {++mi_val;}
        //then, call the appropriate image object from the json
            $("img.middle_image").fadeOut(500,function(){
                $(this).attr({src: data.items[mi_val].image})
                .fadeIn(500);
                });
            });
        }); 
    }); 

I'm a beginning coder, learned CSS, HTML, and Jquery in an internship this summer. My boss wants me to create a gallery that has one main image, and then two buttons to display the next or previous item. He wants me to use json, so that they can easily add and remove images. I have it written so that, I start with a variable 0, then when I click prev/next it decrements/increments the variable, and then goes back to the json to look for the corresponding picture. The only problem is that if I have four pictures, if the value goes below zero or above 3, it breaks.
How can I have the jquery tell if the json lookup returned undefined, so that I can have it either loop or disable the button? I suppose an if statement would be ideal, but I leave it to you.

$(document).ready(function(){
    $.getJSON("layout.json",function(data){

    // Then put the first picture up from the json data...
        $("<img />").attr({
            id: "0-middle_image", 
            class: "middle_image", 
            src: data.items[0].image ,
            })
        .appendTo("div#middle_image");

    // because I'm starting with the zeroth object, middleimage variable is 0
        var mi_val = 0 

    // when you click one of the cycle buttons...
        $("div.cycle_button").click(function(){
        //if it is the previous, decrement mi_val, else, increment mi_val
            if ( $(this).attr("id") == "button_prev") 
                         {--mi_val;}
            else {++mi_val;}
        //then, call the appropriate image object from the json
            $("img.middle_image").fadeOut(500,function(){
                $(this).attr({src: data.items[mi_val].image})
                .fadeIn(500);
                });
            });
        }); 
    }); 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

夏夜暖风 2024-08-17 03:01:35

好吧,我想我现在明白了这个问题。

我会将图像交换代码概括为一个函数,该函数可以在给定索引的情况下交换当前图像。我将此函数称为 setImageWithIndex()。然后我们可以简单地处理 .click() 代码中的索引是什么。

这需要将 data 保存到另一个全局 jsonData 中。

我还将 (a) JSON 数据中返回的图像数量和 (b) 当前图像索引(最初为零)保存在两个全局变量中。

这是代码。我还删除了一些 jquery 并将其替换为标准 javascript,它实际上并没有添加任何内容。

var imageCount;
var currentImage = 0;
var jsonData;

function setImageWithIndex(index) {
    $("img.middle_image").fadeOut(500, function() {
         $("img.middle_image")
            .attr({src: jsonData.items[index].image})
            .fadeIn(500);
    });
}

window.onload = function() {
    $.getJSON("layout.json", function(data) {
        jsonData = data;

        $("<img />").attr({
            id: "0-middle_image", 
            class: "middle_image", 
            src: data.items[0].image
        })
        .appendTo("div#middle_image");

        /* <PSEUDOCODE class="may not work"> */
        imageCount = data.items[0].length;
        // ie: save the number of images in a global variable
        /* </PSEUDOCODE> */
    }

    $("div.cycle_button").click(function() {
        if (this.id == "button_prev")
            if (currentImage > 0)
                setImageWithIndex(--currentImage);
        else
            if (currentImage < imageCount)
                setImageWithIndex(++currentImage);
    });
}

OK, I understand the problem now I think.

I would generalise the image-swapping code into a function that swaps out the current image given an index. I've called this function setImageWithIndex(). Then we can deal simply with what the index is in the .click() code.

This requires saving the data into another global, jsonData.

I would also save (a) the number of images returned in the JSON data and (b) the current image index (initially zero) in two global variables.

Here's the code. I've also removed some jquery and replaced it with standard javascript where it doesn't really add anything.

var imageCount;
var currentImage = 0;
var jsonData;

function setImageWithIndex(index) {
    $("img.middle_image").fadeOut(500, function() {
         $("img.middle_image")
            .attr({src: jsonData.items[index].image})
            .fadeIn(500);
    });
}

window.onload = function() {
    $.getJSON("layout.json", function(data) {
        jsonData = data;

        $("<img />").attr({
            id: "0-middle_image", 
            class: "middle_image", 
            src: data.items[0].image
        })
        .appendTo("div#middle_image");

        /* <PSEUDOCODE class="may not work"> */
        imageCount = data.items[0].length;
        // ie: save the number of images in a global variable
        /* </PSEUDOCODE> */
    }

    $("div.cycle_button").click(function() {
        if (this.id == "button_prev")
            if (currentImage > 0)
                setImageWithIndex(--currentImage);
        else
            if (currentImage < imageCount)
                setImageWithIndex(++currentImage);
    });
}
裸钻 2024-08-17 03:01:35

您可以使用 typeof 来测试返回变量类型:

$.getJSON("layout.json",function(data){
    // check for undefined return value
    if (typeof data == 'undefined') {
        // handle your undefined cases
    }
});

You can use typeof to test for the return variables type:

$.getJSON("layout.json",function(data){
    // check for undefined return value
    if (typeof data == 'undefined') {
        // handle your undefined cases
    }
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文