首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对象jQuery中数组的访问元素

对象jQuery中数组的访问元素
EN

Stack Overflow用户
提问于 2015-04-25 22:54:02
回答 2查看 4.4K关注 0票数 3

我想用一个颜色填充画布,这个颜色是一个对象内部数组的元素,元素索引应该是i,但是代码似乎错了。color1中的变量已经声明,并包含一个字符串,该字符串是颜色的十六进制值。

代码语言:javascript
复制
var colorsObj = {
    color1: [orange,amber,apricot,tangerine,bittersweet,persimmon,salmon,peach,pumpkin]
}

function drawCanvas(color) {
    for(var i = 1; i < 10; i++){
    $('.app').append('<canvas class="shadescolors" id="shade'+i+'"  width="100" height="100">');
    var canvas = document.getElementById('shade'+i);
    var context = canvas.getContext('2d');

    canvas.width = window.innerWidth / 3;
    cc = canvas.width;
    radius = cc/2-10;
    canvas.height = canvas.width;
    context.beginPath();
    context.arc(cc/2, cc/2, cc/2-10, 0, Math.PI*2, true);
    alert(colorsObj.color[i]);
    context.fillStyle = colorsObj.color[i];
    context.fill();
    context.lineWidth = 2;
    context.strokeStyle = '#8A8A8A';
    context.stroke();
    }
}

drawCanvas('color1');

警报也不会开火。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-25 23:10:10

这里的主要问题是您需要使用colorObj[color]来获取颜色列表,而不是colorObj.color,因为您希望使用color变量的值来选择colorObj中的特定颜色列表。(我想您以后可能在colorObj中有一个colorObj条目,对吗?)

此外,通过使用1启动循环,您丢失了颜色列表的第一个元素,10循环限制应该使用颜色列表的.length而不是硬编码。

在循环中的几个变量上缺少一个var,由于您将cccanvas.widthcanvas.height都设置为相同的值,所以最好在一条语句中这样做。

作为一个简化技巧,没有必要给您的canvas元素一个顺序ID并使用getElementById()查找它。相反,您可以在创建元素时保存对元素的引用,只需使用该引用即可。

我还为width=元素提取了canvas代码中的canvasheight=;它们是多余的,因为您正在设置代码中的宽度和高度。

最后,请输入您的代码!:-)

所以你可以试试这样的方法:

代码语言:javascript
复制
var colorsObj = {
    color1: [ orange,amber,apricot,tangerine,bittersweet,persimmon,salmon,peach,pumpkin ]
}

function drawCanvas( color ) {
    var colorList = colorsObj[color];
    for( var i = 0;  i < colorList.length;  i++ ) {
        var $canvas = $('<canvas class="shadescolors">').appendTo('.app');
        var canvas = $canvas[0];
        var context = canvas.getContext('2d');

        var cc = canvas.width = canvas.height = window.innerWidth / 3;
        var radius = cc/2-10;
        context.beginPath();
        context.arc(cc/2, cc/2, cc/2-10, 0, Math.PI*2, true);
        context.fillStyle = colorsList[i];
        context.fill();
        context.lineWidth = 2;
        context.strokeStyle = '#8A8A8A';
        context.stroke();
    }
}

drawCanvas('color1');
票数 3
EN

Stack Overflow用户

发布于 2015-04-25 23:05:39

color1数组字符串中的值还是其他变量中的值?如果它们是字符串,则应该是:

代码语言:javascript
复制
color1: ['orange','amber','apricot','tangerine','bittersweet','persimmon','salmon','peach','pumpkin']

请记住,数组中的第一个元素有索引0,因此要修复for循环,我需要这样做:

代码语言:javascript
复制
for(var i = 0; i < colorsObj.color1.length; i++)

在使用alert(colorsObj.color[i]);而不是alert(colorsObj.color1[i]); (color1,而不是颜色)的警报语句中也有一个错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29871630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档