【问题标题】:creating custom drawing with jquery使用 jquery 创建自定义绘图
【发布时间】:2012-01-20 19:27:14
【问题描述】:

这是我的代码:

$('#add_shape').click(function() {
    var rectHeight = $('#rect_height_input').val();
    var rectWidth = $('#width_input').val();

    $('<canvas>').attr({
        id: 'canvas'
    }).css({
        height: function() {
            if (rectHeight > 0) {
                return rectHeight + 'px';
            }
            else {
                return rectWidth + 'px';
            }
        },
        width: rectWidth + 'px'
    }).appendTo('#work_area');

        var canvas = document.getElementById('canvas');
        var ctx = canvas.getContext('2d');

        ctx.fillStyle = $('#color_list option:selected').val();
        ctx.fillRect(0, 0, rectWidth, rectHeight);
});

单击#add_shape 按钮时,矩形不显示。我在这里想念什么?请帮忙。

【问题讨论】:

    标签: javascript jquery html5-canvas


    【解决方案1】:

    回应之前的revision

    您使用 document.getElementById() 检索了现有的画布元素,然后使用 jQuery 创建了另一个元素 $('&lt;canvas&gt;') 并将其附加到 #work_area

    $('&lt;canvas&gt;') 更改为$(canvas) 以使用现有的画布。

    你真的想打电话给document.getElementById('canvas')而不是document.createElement('canvas')吗?在第一种情况下,DOM 中必须已经有一个带有 id="canvas" 的 canvas 元素,这看起来很可疑。

    编辑 #1(响应当前版本):

    如果这只是答案中的书面代码,请检查您的 HTML(您也应该提供)。您的代码如 fiddle 所示运行。

    确保 ID 正确 - 您使用 #rect_height_input 表示高度,但使用 #width_input 表示宽度并仔细检查颜色选项的值 - 可能矩形是使用白色绘制的。

    编辑#2(响应 cmets 中的fiddle):

    • 为每个形状创建一个新的画布元素,所有这些元素都具有相同的 (!) id。这是不正确的。元素的属性id 应该是唯一的。在您的代码中,您将始终获得第一个画布并在其上绘制 - 现在无论您创建了多少形状。其余的画布元素是空的。

    • 您的代码正在正确绘制矩形(除了“相同的画布”问题)。尝试绘制具有大高度和宽度的矩形 - 它正在工作。当宽度/高度非常小时,画布太小而无法显示矩形。设置最小宽度/高度或使用一个大画布并在其上绘制形状是一种方法。

    【讨论】:

    • @dzejkej--我的意思是将getElementById('canvas') 和其他画布方法放在画布创建之后。我的编辑已经完成。话虽如此,您还能想到其他可能出错的地方吗?
    • @codeninja 查看我的答案更新。如果问题得到解决,那么如果您能告诉我们问题出在哪里并感谢我们在此问题上花费的时间(以及之前的修订版),那就太好了:P。如果在你看过小提琴之后它仍然没有运行,那么显示 HTML 代码:)。
    • @dzejkej--这是我迄今为止的工作:jsfiddle.net/RymyY 我的问题涉及左侧的“添加形状”按钮。到目前为止,只为矩形附加了代码。您可以看到我的班级名称与您的示例不同,但文档中的所有内容都是内部一致的。你能发现什么不对吗?
    • @dzejkej--没错,画布正在创建中,但由于某种原因,color 没有被应用。首先我认为这是一个zIndex 问题,但即使设置为 25,画布仍然没有“出现”(颜色方面)。有什么想法吗?
    • @codeninja 我使用 Chrome 并且矩形具有正确的颜色。例如使用= 150,高度= 150。我遇到的唯一问题是fillRect调用,它绘制的不是它应该绘制的确切矩形。另外我正在更新答案......我认为我们应该结束这个问题 - 你问的 Q 已经回答并且解决方案正在工作。用您当前的代码创建一个新问题,让每个人都回答。没有人在阅读这些 cmets,如果其他人有机会看到它并发现所有问题,那将是一个好主意。
    猜你喜欢
    • 2020-12-08
    • 1970-01-01
    • 2021-04-24
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多