【问题标题】:Get img src and img dimensions from two dimensional array and display in body从二维数组中获取img src和img维度并显示在body中
【发布时间】:2016-09-04 10:41:55
【问题描述】:

我正在尝试从二维数组中获取图像源并设置尺寸

var ImgArray=new Array(2)

ImgArray[0][0] = ["http://imgsrc.jpg"]
ImgArray[0][1] = [width="200",height="200"]
ImgArray[1][0] = ["http://imgsrc.jpg"]
ImgArray[1][1] = [width="200",height="200"]

,将源的尺寸更改为新尺寸(200x200)

var i=0;
var j=0;

function NextImg(){
    ++i;
    ++j;
    document.getElementById('imageset').width = ImgArray[i][j]
    document.getElementById('imageset').height = ImgArray[i][j]
    document.getElementById('imageset').src = ImgArray[i][j]
}

并在此处显示结果

<img id="imageset" /> 
<button type="button" onclick="NextImg()">Next image</button>

【问题讨论】:

    标签: javascript arrays image function dimensions


    【解决方案1】:

    您需要打开您的开发工具(在大多数浏览器中为 F12)并查看出现的错误。一旦你这样做了,很明显你的大部分代码甚至都不是有效的 javascript,而且许多其他部分也有很大的问题。

    例如,您开始将值分配给 ImgArray[0][0]...但是甚至还没有 ImgArray[0] 可以分配 [0] 给。您可能有一个长度为 2 的数组......但是 2 是什么?这些值仍然是undefined。您需要将它们本身设置为新数组,然后才能开始将它们用作数组。您的开发工具会立即告诉您这是一个问题。

    而且你分配的值在很多情况下不是有效的JS,比如[width="200",height="200"]。那根本不是 JS。

    如果您尝试创建一个具有宽度/高度属性的对象,它将是{width:"200", height:"200"},如果您尝试创建一个数组(您未来的使用建议),那么它将是["200", "200"],作为数组元素没有这种方式的属性名称,它们从 0 开始索引。所以第一个是 [0],第二个是 [1]

    最重要的是,您的 j 变量或递增它没有任何意义。不需要其他递增变量。

    而且你也在函数的开始处递增,所以你的第一个图像将是数组的第二个 ([1]) 索引。尝试从 -1 开始 i 以使 0 成为递增后的第一个结果。

    一个工作的 JSFiddle 在这里:https://jsfiddle.net/c0psj611/

    还有一个更好的方法(使用对象存储关联数据):https://jsfiddle.net/2s5x7nL5/

    【讨论】:

    • @lor - 不,你又把数组和简单对象混在一起了。如果你希望它是一个属性/值对,你可以做一个对象,它是花括号:{propertyname:"propertyvalue"} 或一个数组,如果你想要索引值,它是方括号:["value at [0]", "value at [1]"] 数组不需要属性名称(即那里没有宽度/高度命名)
    • 好的,所以我只保留["200", "200"]...所以代码应该是这样的...var ImgArray=new Array(3) ImgArray[0] = new Array(2) ImgArray[0][0] = ["imgsrc.jpg"] ImgArray[0][1] = ["200","200"] ImgArray[1] = new Array(2) ImgArray[1][0] = ["imgsrc.jpg"] ImgArray[1][1] = ["200","200"] 对吗?
    • 是的,这是工作代码。但是,首先这很麻烦的原因之一是您只是错误地使用了数组。数组用于数据列表。根数组(ImgArray)适用于此,但它保存的值应该是简单的对象(具有属性/值对的数据),而不是数组。这样,每个值都可以简单地具有一个属性,告诉该图像的 url、宽度和高度。见这里:jsfiddle.net/2s5x7nL5
    • 非常感谢! jsfiddle 帮了大忙。你能解释一下这条线吗? document.getElementById('imageset').width = ImgArray[i][1][0]; [i][1][0] 部分看不懂。
    • @lor - ["200", "200"] 是用于创建具有 2 个值(“200”和“200”)的数组的简写语法。由于您将其分配给ImgArray[i][1],这意味着它本身正在保存另一个数组......所以我们现在的数组深度为 3 级,所以ImgArray[i][1][0] 将打赌该第 3 级数组的第一个元素和@987654344 @ 将是第二个。
    【解决方案2】:

    你同时增加 i 和 j 所以你只能访问:

    ImgArray[0][0] and  ImgArray[1][1]
    

    另外,你没有得到这个语句中的宽度和高度

    document.getElementById('imageset').width = ImgArray[i][j]
    document.getElementById('imageset').height = ImgArray[i][j]
    

    鉴于此,您应该执行类似的操作

    var ImgArray = [["http://imgsrc.jpg", 200, 200],["http://imgsrc.jpg", 200, 200]];
    

    那么你的功能会是这样的:

    var i=0;
    
    function NextImg(){
       ++i; //or i++;
       document.getElementById('imageset').width = ImgArray[i][0];
       document.getElementById('imageset').height = ImgArray[i][1];
       document.getElementById('imageset').src = ImgArray[i][2];
    }
    

    你可以保持你的显示像:

    <img id="imageset" /> 
    <button type="button" onclick="NextImg()">Next image</button>
    

    【讨论】:

    • 设置.width.height 肯定会改变宽度和高度,因为有问题的元素是&lt;img&gt; 元素,它会改变宽度和高度属性。
    猜你喜欢
    • 2013-04-17
    • 2019-06-13
    • 1970-01-01
    • 2021-03-02
    • 2021-12-12
    • 2012-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多