Canvas中设置width与height的问题浅析


Posted in HTML / CSS onNovember 01, 2018

最近因为工作需要,所以就学了一下Html中的Canvas标签。

Canvas是HTML5新增的组件,它就像一块幕布,可以用JavaScript在上面绘制各种图表、动画等。

没有Canvas的年代,绘图只能借助Flash插件实现,页面不得不用JavaScript和Flash进行交互。有了Canvas,我们就再也不需要Flash了,直接使用JavaScript完成绘制。

当我看了一下教程后,自己写了一个hello world的时候,麻烦事就出现了。看下面代码:

<!DOCTYPE html>
<html lang="en">
<body>
<canvas id="canvas1" style="width: 200px;height: 200px; border:1px solid black;">
</canvas>
<script>
    var oC = document.getElementById('canvas1');
    var ctx = oC.getContext("2d");
    ctx.moveTo(0, 0);
    ctx.lineTo(200, 200);
    ctx.stroke();
</script>
</body>
</html>

上面代码的意思,是要在一个width和height各为200px的canvas上画一条直线,该直线的起点为(0,0),终点为(200,200);

然而浏览器画出来的图像却是:

Canvas中设置width与height的问题浅析

一看这图~怎么是这样的斜度?不应该啊~本应该是一个对角线才对啊~~

后来差了一下资料才知道,canvas标签设置width和height的时候,有以下几种方式和产生的后果:

Canvas元素默认宽 300px, 高 150px, 设置其宽高可以使用如下方法:
方法一:
1 <canvas width="500" height="500"$amp;>amp;$lt;/canvas>
方法二:使用HTML5 Canvas API操作
1 var canvas = document.getElementById('欲操作canvas的id');
2 canvas.width = 500;
3 canvas.width = 500;

若通过如下方法设置宽高,那么Canvas元素将由原来大小被拉伸到所设置的宽高:
方法一:使用CSS 会被拉伸
1 #欲操作canvas的id{
2     width:1000px;
3     height:1000px;
4 }

也包含了行间样式中的 style="" 。也就是上面的例子,也会产生拉伸的情况。
方法二:使用HTML5 Canvas API操作 会被拉伸
1 var canvas = document.getElementById('欲操作canvas的id');
2 canvas.style.width = "1000px";
3 canvas.style.height = "1000px";
方法三 :用jquery的$("#id").width(500);会被拉伸

其它:canvas的width和height也不能用百分比表示。canvas会将百分值当成数值显示

 所以,通过上面的资料便可知道其原因就是我上面例子中代码会让canvas的宽高被拉伸了,从而使得图像跟预想的不一致的。

现在我重写了一份正确设置canvas宽高大小的代码例子:

<!DOCTYPE HTML>
<html>
<body>
<canvas id="myCanvas" width="200" height="200" style="border:1px solid black;">
    Your browser does not support the canvas element.
</canvas>
<script type="text/javascript">
    var c = document.getElementById("myCanvas");
    var cxt = c.getContext("2d");
    cxt.moveTo(0, 0);
    cxt.lineTo(200, 200);
    cxt.stroke();
</script>
</body>
</html>

结果:

Canvas中设置width与height的问题浅析

结束。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

HTML / CSS 相关文章推荐
CSS心形加载的动画源码的实现
Mar 09 HTML / CSS
巧用CSS3 border实现图片遮罩效果代码
Apr 09 HTML / CSS
CSS3中几个新增加的盒模型属性使用教程
Mar 01 HTML / CSS
详解如何在css3打包后自动追加前缀插件:autoprefixer
Dec 18 HTML / CSS
Html5画布_动力节点Java学院整理
Jul 13 HTML / CSS
HTML5之SVG 2D入门5—颜色的表示及定义方式
Jan 30 HTML / CSS
处理HTML5新标签的浏览器兼容版问题
Mar 13 HTML / CSS
HTML5 客户端数据库简易使用:IndexedDB
Dec 19 HTML / CSS
HTML实现代码雨源码及效果示例
Feb 25 HTML / CSS
Canvas在超级玛丽游戏中的应用详解
Feb 06 HTML / CSS
html5实现点击弹出图片功能
Jul 16 HTML / CSS
CSS子盒子水平和垂直居中的五种方法
Jul 23 HTML / CSS
html5 postMessage前端跨域并前端监听的方法示例
Nov 01 #HTML / CSS
HTML5之消息通知的使用(Web Notification)
Oct 30 #HTML / CSS
详解Html5页面实现下载文件(apk、txt等)的三种方式
Oct 22 #HTML / CSS
html5 http的轮询和Websocket原理
Oct 19 #HTML / CSS
canvas实现扭蛋机动画效果的示例代码
Oct 17 #HTML / CSS
浅谈HTML5中dialog元素尝鲜
Oct 15 #HTML / CSS
canvas进阶之如何画出平滑的曲线
Oct 15 #HTML / CSS
You might like
php时间不正确的解决方法
2008/04/09 PHP
FleaPHP的安全设置方法
2008/09/15 PHP
php学习笔记(三)操作符与控制结构
2011/08/06 PHP
php+mysql实现的二级联动菜单效果详解
2016/05/10 PHP
PHP中register_shutdown_function函数的基础介绍与用法详解
2017/11/28 PHP
php 可变函数使用小结
2018/06/12 PHP
Yii2语言国际化自动配置详解
2018/08/22 PHP
Laravel学习笔记之Artisan命令生成自定义模板的方法
2018/11/22 PHP
yii2.0框架使用 beforeAction 防非法登陆的方法分析
2019/09/11 PHP
PHP高并发和大流量解决方案整理
2021/03/09 PHP
jquery 多级下拉菜单核心代码
2010/05/21 Javascript
getElementByIdx_x js自定义getElementById函数
2012/01/24 Javascript
jquery.qrcode在线生成二维码使用示例
2013/08/21 Javascript
判断iframe里的页面是否加载完成
2014/06/06 Javascript
浅谈javascript中new操作符的原理
2016/06/07 Javascript
node.js版本管理工具n无效的原理和解决方法
2016/11/24 Javascript
jQuery插件HighCharts绘制2D金字塔图效果示例【附demo源码下载】
2017/03/09 Javascript
浅谈JS 数字和字符串之间相互转化的纠纷
2017/10/20 Javascript
JS模拟实现哈希表及应用详解
2018/05/04 Javascript
JS尾递归的实现方法及代码优化技巧
2019/01/19 Javascript
ES6 Symbol数据类型的应用实例分析
2019/06/26 Javascript
jQuery - AJAX load() 实例用法详解
2019/08/27 jQuery
python实现发送和获取手机短信验证码
2016/01/15 Python
全面了解Python环境配置及项目建立
2016/06/30 Python
Python实现统计文本文件字数的方法
2017/05/05 Python
Python win32com 操作Exce的l简单方法(必看)
2017/05/25 Python
python使用tensorflow深度学习识别验证码
2018/04/03 Python
Django项目中包含多个应用时对url的配置方法
2018/05/30 Python
pytorch实现线性拟合方式
2020/01/15 Python
Python使用Socket实现简单聊天程序
2020/02/28 Python
关于tf.matmul() 和tf.multiply() 的区别说明
2020/06/18 Python
WoolOvers爱尔兰:羊绒、羊毛和棉针织品
2017/01/04 全球购物
Eclipse面试题
2014/03/22 面试题
C语言中break与continue的区别
2012/07/12 面试题
实习生自荐信范文分享
2013/11/27 职场文书
2014年创先争优工作总结
2014/12/11 职场文书