• html5 坐标问题


        最近在研究html5, 主要是随便画一些东西。结果一个问题纠结了好久,主要现象就是画出来的东西和我设置的坐标不符合,看起来总有点被放大模糊的感觉。最好总算找到了原因,是因为canvas的高宽设置问题。canvas有自己的width和height属性,设置其样式的高宽对绘图会产生副作用。

        canvas的默认高宽在chrome里是300px * 150px, 这个可能因浏览器不同有区别。如果你只是设置了style的高宽,例如下面的代码:

        var canvas = document.getElementById("myCanvas");
        canvas.style.width = window.innerWidth + "px";
        canvas.style.height = window.innerHeight + "px";

        那只是改变了canvas的现实区域的大小,canvas的大小仍然是默认值300px * 150px,其最后结果就是一个小canvas被放大后显示在和你设置的高宽匹配的区域里。这当然不是我们期望的,正确的做法应该是直接设置canvas的高宽:    

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

        下面是个简单的例子,大家可以测试一下:

    <!DOCTYPE html>
    <meta charset="UTF-8"/>
    <title>花花</title>    
    <canvas id="content" style="position:absolute;left:0px;top:0px;">
            你的浏览器不支持
    </canvas>
    <script type="text/javascript">
        //通过id获取元素
        function _id(id) {
            return document.getElementById(id);
        };
        
        var painter = {
            cxt: null,
            w: window.innerWidth,
            h: window.innerHeight,
            init: function() {    
                var content = _id("content");
                
                //1.错误的设置方法
                //content.style.width = this.w + "px";
                //content.style.height = this.h + "px";
                
                //2.正确的设置方法
                content.width = this.w;
                content.height = this.h;
                this.cxt = content.getContext("2d");
            },
            drawRainbow: function() {
                var centerX = this.w / 2;
                var centerY = this.h / 2;
                var radius = this.h / 2;
                var startingAngle = 2 * Math.PI;
                var endingAngle = 0 * Math.PI;
                var counterclockwise = false;
                
                this.cxt.fillStyle = "red";            
                this.cxt.beginPath();
                this.cxt.arc(centerX, centerY, radius, startingAngle, 
                    endingAngle, counterclockwise);
                this.cxt.fill();
            }
        };    
        painter.init();
        
        painter.drawRainbow();
        
    </script>

     错误设置时浏览器显示空白,正确设置时则显示一个刚好能填充页面的红色圆形。

  • 相关阅读:
    .vue 文件中怎么引用全局的sass 样式
    git 本地仓库同时推送到多个远程仓库
    markdown文件生成html页面
    查看IPA安装包文件信息工具
    如何给iOS安装包IPA注入一个动态库文件?
    一年级语文上册读拼音写汉字,聪明的家长已收藏,偷偷给孩子练习
    关于直接下载第三方IPA应用分发平台之蒲公英的研究
    如何给iOS安装包IPA添加时间锁功能?
    关于几种获取iOS设备UDID典型方式的技术探讨
    针对五款IPA文件安装工具的深度评测
  • 原文地址:https://www.cnblogs.com/alala666888/p/2650509.html
Copyright © 2020-2023  润新知