当画布放在另一个画布上时,文本模糊

时间:2014-05-30 15:26:24

标签: javascript jquery html5 canvas

我想在鼠标移动时在画布上显示鼠标的x位置。有人可以告诉为什么文本如此大而模糊,也有办法实现这两幅画布之间的透明度

<body style="margin: 0; padding: 0; height: 100%; width: 100%; overflow: hidden;">
  <canvas id="myCanvas" style="display: block; height: 100%; width: 100%;">
            Your browser does not support the HTML5 canvas tag.</canvas>  <canvas id="temp">
            Your browser does not support the HTML5 canvas tag.</canvas>
    <script type="text/javascript">

        var c = document.getElementById("myCanvas");

        var ctx = c.getContext("2d");

        var hgap = 0;
        var vgap = 0;
        var rows, cols;
        var annotation_x = 1;
        var row = 0; var col = 0;
        //ctx.font = "14px Arial";

        var t = document.getElementById("temp");
        tctx = t.getContext("2d");
        // tctx.lineWidth = 10;
        tctx.lineJoin = 'round';
        tctx.lineCap = 'round';
        tctx.strokStyle = 'red';


        var mouse = { x: 0, y: 0 };
        c.addEventListener('mousemove', function (evt) {
        //    tctx.clearRect(0, 0, c.width, c.height);
            ctx.clearRect(0, 0, c.width, c.height);
            mouse.x = evt.pageX;
            mouse.y = evt.pageY;
            ctx.fillText(mouse.x, 10, 10);

        }, false);



    </script>
</body>

2 个答案:

答案 0 :(得分:2)

问题不在于有两个画布。

问题是您使用CSS缩放画布,但不修改其像素数(heightwidth属性)。然后,结果很模糊。

如果你不用CSS缩放它,结果很好:Demo

或者,您可以尝试使用image-rendering CSS属性(例如crisp-edgesdemo

您还可以在调整浏览器大小(resize事件)时修改heightwidth属性,并重绘画布。

答案 1 :(得分:2)

<canvas id="myCanvas" style="display: block; height: 100%; width: 100%;">

^您不应该使用CSS缩放canvas元素,除非您希望对其内容进行插值。考虑一个300x125像素的图像,您可以将其缩放到浏览器窗口的宽度和高度 - 图像将变得模糊。

如果您希望使用全屏画布,则需要使用JS进行缩放:

var c = document.getElementById("myCanvas");
c.width = window.innerWidth;
c.height = window.innerHeight;

..或HTML:

<canvas width="1920" height="1080"></canvas>