javascript - 带 Canvas 的 Bootstrap 模态无法正确显示响应式设计

标签 javascript angular canvas bootstrap-modal

在我的 Angular(不是 JS)应用程序中,我使用引导模式来提供一个界面(HTML5 Canvas),用户可以在其中绘制一些草图。

我面临的问题是,当我将 Canvas 放入模式中时,响应式设计突然停止工作:

HTML:

<div class="modal-body" id="modalbody">

    <other tags like buttons, inputs etc/>

    <canvas #canvas id="canvas"
            (touchstart)="touchDown($event)"
            (touchmove)="touchMove($event)"
            (touchend)="mouseUp()"
            (mousedown)="mouseDown($event)"
            (mousemove)="mouseMove($event)"
            (mouseup)="mouseUp()">
   </canvas>
</div>

Angular :

// Init Canvas Properties
@ViewChild('canvas') public canvas: ElementRef;
private ctx: CanvasRenderingContext2D;
private canvasElem: HTMLCanvasElement;

private setCanvasRenderingContext2d(): void {
    this.ctx = this.canvas.nativeElement.getContext('2d');
    this.canvasElem = this.canvas.nativeElement;
}

在设置canvasElem变量之前,模式会正确显示响应式设计,但是一旦我设置它,响应式设计就会中断,不仅 Canvas 会伸出模式对话框,而且 Canvas 上方的所有其他标签(例如按钮和输入)也会被破坏(就像工具箱一样)也很突出。

canvasElem 唯一的用途就是在这里:

let rect = this.canvasElem.getBoundingClientRect();

否则我什至不需要它,并且 ctx 变量也仅用于绘图操作,例如 ctx.fillRect 等,所以我真的不确定这里出了什么问题..

有谁知道这个问题以及如何解决它?

更新:

我的解决方案/黑客如下:

setTimeout(() => {
  window.dispatchEvent(new Event('resize'));
}, 1);

延迟只有一毫秒,现在效果很好。

最佳答案

它可以像 Canvas 缺少最大宽度 css 一样简单。

canvas {  max-width: 100%; }

我做了一个简单的jsfiddle来测试它。如果没有最大宽度,您的 Canvas 将无法响应。如果您发布工作片段,则更容易重现。

https://jsfiddle.net/mzfk0qnt/

关于javascript - 带 Canvas 的 Bootstrap 模态无法正确显示响应式设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53086177/

相关文章:

javascript - 判断一行是否被隐藏

javascript - 在 Canvas 中使用 arc 方法的 startAngle 以外的值

html - 粗体/斜体不适用于 Canvas fillText()

javascript - 带有 Canvas 的 DOM

javascript - 如何找到div 1的输入标签?

javascript - 如何在 Javascript 中使用 postMessage()?

javascript - Webpack:html-loader 无法解析 srcset 图像

angular - Firebase 安全规则权限不足

angular - 如何设置 ngx-intl-tel-input 的初始值

javascript - Angular 隐藏忽略