如何在 div 中做响应式 HTML 画布

Posted

技术标签:

【中文标题】如何在 div 中做响应式 HTML 画布【英文标题】:How to do responsive HTML canvas within div 【发布时间】:2015-05-25 05:57:22 【问题描述】:

我有三个 div。第一个和第三个 div 有 Next - Previous 按钮。第二意味着中心 div 有一个 html 画布。所以我想让它响应。但最大画布高度应为 400 像素,最大宽度应为 300 像素。 检查这个小提琴 -

http://jsfiddle.net/4zx732ug/1/

<div>
<div class="left"> First Div </div>
<div class="middle">
<canvas  id="myCanvas"      style="border:1px solid #000000;"></canvas>
</div>
<div class="right"> Third Div </div>
</div>

CSS -

.left 
float: left;
background-color: #ddd;


.middle 
background-color: yellow;
float: left;


.right 
float: left;
background-color: #ddd;

那么如何让这个 div 响应画布?

【问题讨论】:

【参考方案1】:

也许这对你有帮助。

HTML:

<div>
<div class="left"> First Div </div>
    <div class="middle">
        <canvas  id="myCanvas"  ></canvas>
    </div>
    <div class="right"> Third Div </div>
</div>

CSS:

.left 
    float: left;
    background-color: #ddd;

.middle 
    background-color: yellow;
   float: left;
   border:1px solid #000000;
   width: 300px;

.right 
    float: left;
    background-color: #ddd;

@media all and (max-width: 450px) 
    .middle 
        width: calc(69% - 10px);
    

@media all and (max-width: 410px)
    .middle 
        width: calc(67% - 10px);
    

@media all and (max-width: 360px)
    .middle 
        width: calc(60% - 10px);
    

DEMO

【讨论】:

高度未调整大小。高度也应该像宽度一样调整大小 你可以在每个@media 中设置这个 所有三个 div 都应该水平放置。 div 正在更改为垂直。【参考方案2】:

要使画布跟随 div,假设您已将 CSS 应用到 div(对于此工作很重要),您可以使用 div 的边界客户端矩形使 位图 匹配大小这个父 div 的。

在 DOM 加载完成时调用,以及在窗口的调整大小事件时调用:

var rect = document.querySelector(".middle").getBoundingClientRect();
var canvas = document.getElementById("myCanvas");

canvas.width  = Math.max(1, Math.min(400, rect.width));
canvas.height = Math.max(1, Math.min(300, rect.height));

由于画布位图不能小于 1 像素,因此在此端也强制夹紧。

【讨论】:

以上是关于如何在 div 中做响应式 HTML 画布的主要内容,如果未能解决你的问题,请参考以下文章

适用于不同设备的响应式画布

响应式画布 vuejs

如何在Angular2中做响应式组件

我应该如何使用 createJs 创建响应式画布以适应不同的移动设备屏幕?

HTML5 响应式画布:调整浏览器画布绘制的大小消失

如何在 tkinter 上制作响应式画布?