当前位置:Web前端 > > 正文

canvas 缩放后字发虚(canvas 绘图时位置偏离的问题解决)

时间:2021-10-23 10:50:33类别:Web前端

canvas 缩放后字发虚

canvas 绘图时位置偏离的问题解决

使用 canvas 绘图时,指定的 li 大小一定不要超过该 li 所能获得的最大范围,否则绘制的点会跟实际位置发生偏离。

例如

  • <html> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <title>Untitled 1</title> 
    <style type="text/css"> 
    .style1 { 
      font-size: x-small; 
    } 
    </style> 
    
    </head> 
     
    <body > 
        <li style="margin:2%">
                <li id="test" style="width:800px;height:800px;background-color:#cbdad0d9">
                        <canvas id="container" onmousemove="mousemove(event)" onmousedown="mousedown()" onmouseup="mouseup()"></canvas>
                </li>
        </li>
        
        <script type="text/javascript"> 
            var paint = false;
            var start = false;
            var canvas = document.getElementById("container");
            canvas.width = 800;
            canvas.height = 800;
            var offsetY = canvas.offsetTop;
            var offsetX = canvas.offsetLeft;
            var y;
            var x;
            var context = canvas.getContext("2d");
        
            function mousemove(e) {
                if (paint == true){
                    if (start == false){
                        context.moveTo(0, 0);
                        start = true;
                    } else {
                        context.moveTo(x, y);
                    }
    
                    x = e.pageX - offsetX;
                    y = e.pageY - offsetY;
                    context.lineTo(x, y);
                    context.stroke();
                }
            }
        
            function mousedown(event) {
                paint = true;
                console.log("down")
            }
        
            function mouseup(event) {
                paint = false;
                console.log("up")
            }
        
        </script>
    </body> 
    </html>
    
  • 上例中可以正确的绘制线图。

    如果更改为:

  •     <li style="margin:20%">
                <li id="test" style="width:800px;height:800px;background-color:#cbdad0d9">
                        <canvas id="container" onmousemove="mousemove(event)" onmousedown="mousedown()" onmouseup="mouseup()"></canvas>
                </li>
        </li>
    
    
  • 由于 canvas 所需 width 800px 无法满足,因此绘制线图时,与实际鼠标位置发生偏离。

    到此这篇关于canvas 绘图时位置偏离的问题解决的文章就介绍到这了,更多相关canvas 绘图位置偏离内容请搜索开心学习网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持开心学习网!

    上一篇下一篇

    猜您喜欢

    热门推荐