【问题标题】:Canvas element can't be drawn on after jquery display transitionjQuery显示转换后无法绘制画布元素
【发布时间】:2012-02-09 22:14:34
【问题描述】:

我正在使用画布创建绘图应用程序。如果显示包含画布元素的 div,它可以正常工作。但是,我希望最初隐藏包含的 div,然后使用 jquery 转换“启动”绘图应用程序以淡入绘图界面。所以包含的 div 最初将其 css 'display' 属性设置为 'none' 然后我显示它。但是,当我这样做时,画布元素将不再接收任何绘图输入。我尝试在我的脚本渲染画布元素后动态设置 display:none 以确保那里没有干扰,但没有骰子。有什么建议吗?

绘制界面的html结构如下:

<!--DRAWING INTERFACE-->
    <style>
       #draw-container {
         display:none;
         width:1920px;
         height:1080px;
         position:absolute;
         top:0px;
         left:0px;
       }
     </style>
<div id="draw-container">
    <h1>Send a Drawing</h1>
    <div id="draw" class="panel">
    </div>
    <div id="draw-buttons">
        <a id="sendButton" href="#" class="round">></a>
        <a id="clearButton" href="#" class="round">+</a>
    </div>
</div>

然后这个函数被调用,它将画布元素创建为“draw”div的子元素:

//creating canvasses
function drawCanvas(id,xOffset){
    //draw
    var canvas = document.createElement("canvas");
    canvas.width = canvasWidth;
    canvas.height = canvasHeight;
    canvas.id = id;
    $('#draw').append(canvas);
}

当用户点击按钮以显示绘图模块时:

document.getElementById('drawLaunch').addEventListener("click", function(){
    $('#draw-container').show();
});

最后,这是绘图功能:

function _drawCircle(mouseX, mouseY) {
//get position
var x = mouseX - offsetLeft,
    y = mouseY - offsetTop;
//move mouse to the previous point
if (lastX == null) {
    lastX = x;
    lastY = y;
}
context.moveTo(lastX,lastY);
//draw line
context.lineTo(x, y);
context.stroke();
//set new last point
lastX = x;
lastY = y;

}

现在,如果我保持一切不变,只是从样式表中删除“display:none;”,以便在页面加载时显示画布,一切正常。但如果它被隐藏然后显示,你可以不要画它。

【问题讨论】:

    标签: jquery html canvas


    【解决方案1】:
     #draw-container {
         visibility:hidden;
         width:1920px;
         height:1080px;
         position:absolute;
         top:0px;
         left:0px;
       }
    

    你能用visibility:hidden代替display:none吗?这样元素就留在页面上只是肉眼看不到?

    当你希望它再次可见时,只需编写

      visibility:visible;
    

    或在您的代码中

    document.getElementById('drawLaunch').addEventListener("click", function(){
        $('#draw-container').css('visibility','visibile');
    });
    

    【讨论】:

    • 在我的回答中添加了一些内容
    • 谢谢,成功了!只是给需要这个的其他人的注释——它应该是“可见的”,而不是“可见的”。
    • 抱歉打错了-如果答案正确,请检查我。谢谢!我更新了代码,使其可见
    猜你喜欢
    • 2012-02-17
    • 2021-08-31
    • 2019-08-30
    • 2020-05-14
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 2019-10-02
    • 1970-01-01
    相关资源
    最近更新 更多