使用jQuery创建canvas元素并设置其width和height属性

时间:2012-05-03 14:03:27

标签: javascript jquery canvas html

我只是想在jQuery中执行以下操作:

var newCanvas = $('<canvas/>',{'width':100,'height':200,'class':'radHuh'});
$(body).append(newCanvas);

这是有效的(有点)并生成以下标记:

<canvas style="width:100px; height:200px;" class="radHuh"></canvas>

正如大多数人可能知道canvas元素不太喜欢CSS维度但期望宽度和高度属性,所以这个对象创建失败了。

我知道我可以这样做:

var newCanvas = $('<canvas/>',{'class':'radHuh'}).attr({'width':100,'height':200});

相反,但我只是想知道,如果有任何方式告诉jQuery widthheight在通过$('element',{attributes})创建元素而不是CSS时应被视为属性?

6 个答案:

答案 0 :(得分:30)

jQuery尝试将每个属性名称与jQuery函数名称匹配。匹配函数被称为。

widthheight是jQuery函数,因此您的原始代码与此相同:

  var newCanvas = 
    $('<canvas/>',{'class':'radHuh'})
    .width(100)
    .height(100);

width(value)height(value)函数设置 CSS 元素的宽度和高度。


相关的jQuery源代码行(https://github.com/jquery/jquery/blob/master/src/attributes.js#L308

if ( pass && name in jQuery.attrFn ) {

attrFn对象定义(https://github.com/jquery/jquery/blob/master/src/attributes.js#L288):

attrFn: {
    val: true,
    css: true,
    html: true,
    text: true,
    data: true,
    width: true,
    height: true,
    offset: true
},

答案 1 :(得分:25)

var newCanvas = $('<canvas/>',{
                   'class':'radHuh',
                    id: 'myCanvas'                   
                }).prop({
                    width: 200,
                    height: 200
                });
$('#canvas').append(newCanvas);

<强> Proof

答案 2 :(得分:10)

你可以这样使用

$('<canvas/>',{'class':'radHuh','Width':100,'Height':200});

更改案例并尝试

答案 3 :(得分:8)

似乎更改任何字母的大小写将阻止jQuery将属性转换为样式,因此ranganadh可能偶然发现jQuery中的一些意外缺陷,它会根据样式检查属性,但不区分大小写。

这例如似乎也起作用了

var newCanvas = $('<canvas/>', {heiGht: 200, widtH: 100});
$('body').append(newCanvas);​​​

本机JS属性没有转换为样式,我可能会使用以下解决方案来确保它是“未来证明”(setAttribute()似乎也可以正常工作):

var newCanvas = $('<canvas/>');
    newCanvas[0].height = 200;
    newCanvas[0].width = 100;

$('body').append(newCanvas);​​​

答案 4 :(得分:1)

我发现这是最好的:

$('<canvas height="50px" width="50px"/>')

您也可以通过这种方式添加idclass或其他属性。因为它不在style=""属性中,所以它不算作CSS并弄乱你的形状。

答案 5 :(得分:0)

修改:这个速度较慢,请参阅下面的评论。

这可能会比此处发布的任何解决方法更快:

var attributes = {width: 100, height: 100, class: "whatever"};
$('<canvas width="'+attributes.width+'" height="'+attributes.height+'" class="'+attributes.class+'""></canvas>').appendTo(document.body);

稍微不那么漂亮,但是在功能调用较少的情况下,它实际上是相同的。