如何在多个画布HTML5上绘制圆?

Chintan_chiku

我想使用JavaScript在响应式画布上绘制圆圈。我正在获取画布的宽度和高度,但是由于div标签的宽度和高度%,我能够正确绘制圆形。div标签的宽度和高度以%为单位,因为我想在单个页面上显示5个画布。是否有其他方法可以在单个页面上放置5个画布,并使用画布的高度和宽度在每个画布中绘制一个圆?还有一件事,我不需要绝对位置,因为根据浏览器宽度,我想更改画布位置

图片:192.168.10.29/1.png

的CSS

.all
{
    width:30%;
    height:45%;
    float:left;
}

canvas
{
    width:100%;
    height:100%;
}

的HTML

<div id='container'>
<div class='all'>
<canvas id='clock1' style="border:solid">
</div>
<div class='all'>
<canvas id='clock2' style="border:solid">
</div>
<div class='all'>
<canvas id='clock3' style="border:solid">
</div>
<div class='all'>
<canvas id='clock4' style="border:solid">
</div>
<div class='all'>
<canvas id='clock5' style="border:solid">
</div>
</div>

Java脚本

function draw(canvasarray)
{

    var clock = document.getElementById(canvasarray);

    var style = getComputedStyle(document.getElementById(canvasarray));

    var height = parseInt(style.getPropertyValue("height"),10);
    var width = parseInt(style.getPropertyValue("width"),10);

    var radius = 0;

    console.log('Width : ' + width + ' Height : ' + height);

    if(width < height)
    {
        radius = width/2;
    }
    else
    {
        radius = height/2;
    }
    console.log('Radius : '+ radius);
    var ctx = clock.getContext('2d');
    ctx.beginPath();
    ctx.arc(width/2,height/2,radius,0,Math.PI*2);
    ctx.stroke();
}
用户名

您可以首先使用所有画布定义一个数组:

/// store references to element directly - define in global scope
var canvasArray = [
    document.getElementById('clock1'),
    document.getElementById('clock2'),
    document.getElementById('clock3'),
    document.getElementById('clock4'),
    document.getElementById('clock5')
]

现在,这将保留对每个时钟画布的引用,因此我们不必每次都查找它们。

然后参考。上一个问题,我们可以将大小调整代码与绘制代码分开:

function resizeCanvases() {

    /// iterate array and update each canvas' bitmap according to CSS size
    for(var i = 0, c; c= canvasArray[i]; i++) {
        var style = getComputedStyle(c);
        c.width   = parseInt(style.getPropertyValue("width"),10);
        c.height  = parseInt(style.getPropertyValue("height"),10);
    }

    draw(canvasArray);
}

/// initial call when code starts
resizeCanvases();

/// update when window resizes (remember to redraw as well)
window.addEventListener('resize', resizeCanvases, false);

现在我们可以专注于绘制代码:

function draw(clocks) {

    var clock,
        ctx,
        width, height,
        radius,
        i = 0;

    for(; clock = clocks[i]; i++) {

        /// get dimension of this canvas - remember to subtract line width
        width = clock.width;
        height = clock.height;

        /// get radius
        radius = Math.min(width, height) * 0.5;

        /// draw circle
        ctx = clock.getContext('2d');
        ctx.beginPath();
        ctx.arc(width/2,height/2,radius,0,Math.PI*2);
        ctx.stroke();
    }
}

然后致电:

draw(canvasArray);

需要的时候。

更新资料

参考 图片中的问题。我有这个结果:

快照

我稍微修改了CSS,但是它不会影响外观,但是使重排效果更好:

.all
{
    width:30%;
    height:45%;
    display:inline-block;
    /*float:left;*/
}

以及:

html, body {
    width:100%;
    height:100%;
    margin:0;
    overflow:hidden;
}

Chrome似乎在CSS上有问题(或者getComputedStyle()在这种情况下可能是个问题),而在Firefox和Opera中却可以正常工作。

在这里摆弄

希望这可以帮助!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在HTML5画布上绘制多个圆的问题

来自分类Dev

HTML5 Canvas-如何在画布上的图像上绘制矩形

来自分类Dev

使用for循环绘制HTML5画布圆

来自分类Dev

如何在HTML5画布上绘制背景图像

来自分类Dev

在画布HTML5上绘制视频

来自分类Dev

如何在画布上绘制具有径向渐变的圆?

来自分类Dev

如何在Android中的画布上的路径内绘制圆

来自分类Dev

如何在移动设备上调出键盘以捕获用于在HTML5画布上绘制的输入?

来自分类Dev

如何在Javascript和HTML5画布上以2D模式在对象前面绘制圆圈

来自分类Dev

如何在 HTML5 画布上使用二次贝塞尔曲线绘制小写 b

来自分类Dev

在html5画布上绘制多个粒子元素而无需渲染终止

来自分类Dev

在HTML5画布上绘制多个图像有时不起作用

来自分类Dev

在html5画布上绘制多个粒子元素而无需渲染终止

来自分类Dev

html5画布绘制多个图像

来自分类Dev

如何使用JavaScript在HTML5 Canvas中绘制圆?

来自分类Dev

RXJS在HTML5画布上绘制线条

来自分类Dev

无法在html5画布上绘制

来自分类Dev

如何获取在HTML5画布上绘制的图像的X / Y值?

来自分类Dev

如何在HTML5画布内旋转图像而不绘制图像?

来自分类Dev

HTML5画布-绘制线段和圆-一个圆使用不同的颜色

来自分类Dev

在多个画布上绘制的HTML5图像没有显示在其中一个图像上

来自分类Dev

如何在HTML图像上绘制p5.js圆

来自分类Dev

需要帮助JS图像事件侦听器在html5画布上绘制多个图像

来自分类Dev

如何在HTML5画布中显示多个外部SVG图形

来自分类Dev

如何在画布上绘制多个半透明矩形?

来自分类Dev

如何在HTML画布上绘制“真棒字体”图标[版本<5]

来自分类Dev

如何在画布上绘制带有动画的圆轨迹的箭头?

来自分类Dev

如何在具有更好插值的html5画布上缩放图像?

来自分类Dev

如何在HTML5中使绘图在画布上可拖动

Related 相关文章

  1. 1

    在HTML5画布上绘制多个圆的问题

  2. 2

    HTML5 Canvas-如何在画布上的图像上绘制矩形

  3. 3

    使用for循环绘制HTML5画布圆

  4. 4

    如何在HTML5画布上绘制背景图像

  5. 5

    在画布HTML5上绘制视频

  6. 6

    如何在画布上绘制具有径向渐变的圆?

  7. 7

    如何在Android中的画布上的路径内绘制圆

  8. 8

    如何在移动设备上调出键盘以捕获用于在HTML5画布上绘制的输入?

  9. 9

    如何在Javascript和HTML5画布上以2D模式在对象前面绘制圆圈

  10. 10

    如何在 HTML5 画布上使用二次贝塞尔曲线绘制小写 b

  11. 11

    在html5画布上绘制多个粒子元素而无需渲染终止

  12. 12

    在HTML5画布上绘制多个图像有时不起作用

  13. 13

    在html5画布上绘制多个粒子元素而无需渲染终止

  14. 14

    html5画布绘制多个图像

  15. 15

    如何使用JavaScript在HTML5 Canvas中绘制圆?

  16. 16

    RXJS在HTML5画布上绘制线条

  17. 17

    无法在html5画布上绘制

  18. 18

    如何获取在HTML5画布上绘制的图像的X / Y值?

  19. 19

    如何在HTML5画布内旋转图像而不绘制图像?

  20. 20

    HTML5画布-绘制线段和圆-一个圆使用不同的颜色

  21. 21

    在多个画布上绘制的HTML5图像没有显示在其中一个图像上

  22. 22

    如何在HTML图像上绘制p5.js圆

  23. 23

    需要帮助JS图像事件侦听器在html5画布上绘制多个图像

  24. 24

    如何在HTML5画布中显示多个外部SVG图形

  25. 25

    如何在画布上绘制多个半透明矩形?

  26. 26

    如何在HTML画布上绘制“真棒字体”图标[版本<5]

  27. 27

    如何在画布上绘制带有动画的圆轨迹的箭头?

  28. 28

    如何在具有更好插值的html5画布上缩放图像?

  29. 29

    如何在HTML5中使绘图在画布上可拖动

热门标签

归档