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 相关文章推荐
细说CSS3中的选择符
Oct 17 HTML / CSS
详解CSS3的图层阴影和文字阴影效果使用
Jun 09 HTML / CSS
巧用 CSS3的webkit-box-reflect 倒影实现各类动效
Mar 05 HTML / CSS
详解HTML5中垂直上下居中的解决方案
Dec 20 HTML / CSS
HTML5移动端开发遇见的东西
Oct 11 HTML / CSS
HTML5 WebGL 实现民航客机飞行监控系统
Jul 25 HTML / CSS
html5 桌面提醒:Notifycations应用介绍
Nov 27 HTML / CSS
通过Canvas及File API缩放并上传图片完整示例
Aug 08 HTML / CSS
HTML5 Canvas中使用路径描画二阶、三阶贝塞尔曲线
Jan 01 HTML / CSS
HTML5中indexedDB 数据库的使用实例
May 11 HTML / CSS
解决HTML5中的audio在手机端和微信端的不能自动播放问题
Nov 04 HTML / CSS
HTTP中的Content-type详解
Jan 18 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实现斐波那契数列的简单写法
2014/07/19 PHP
laravel5.6 框架邮件队列database驱动简单demo示例
2020/01/26 PHP
ExtJS 简介 让你知道extjs是什么
2008/12/29 Javascript
JavaScript 学习小结(适合新手参考)
2009/07/30 Javascript
JSuggest自动匹配下拉框使用方法(示例代码)
2013/12/27 Javascript
jQuery实现简单的间隔向上滚动效果
2015/03/09 Javascript
使用JavaScript 实现的人脸检测
2015/03/24 Javascript
关于动态生成dom绑定事件失效的原因及解决方法
2016/08/06 Javascript
jquery.Callbacks的实现详解
2016/11/30 Javascript
jQuery Masonry瀑布流插件使用方法详解
2017/01/18 Javascript
Bootstrap页面标题Page Header的实现方法
2017/03/22 Javascript
Angular 4依赖注入学习教程之ClassProvider的使用(三)
2017/06/04 Javascript
原JS实现banner图的常用功能
2017/06/12 Javascript
移动端触摸滑动插件swiper使用方法详解
2017/08/11 Javascript
浅谈Vuex@2.3.0 中的 state 支持函数申明
2017/11/22 Javascript
Vue 实现树形视图数据功能
2018/05/07 Javascript
浅谈Vue数据响应
2018/11/05 Javascript
深入浅出vue图片路径的实现
2019/09/04 Javascript
python实现颜色空间转换程序(Tkinter)
2015/12/31 Python
Python虚拟环境virtualenv的安装与使用详解
2017/05/28 Python
python下实现二叉堆以及堆排序的示例
2017/09/29 Python
Python实现修改IE注册表功能示例
2018/05/10 Python
在PyCharm中三步完成PyPy解释器的配置的方法
2018/10/29 Python
Python使用指定字符长度切分数据示例
2019/12/05 Python
pymysql模块的操作实例
2019/12/17 Python
Python hashlib模块实例使用详解
2019/12/24 Python
Python GUI自动化实现绕过验证码登录
2020/01/10 Python
python pip如何手动安装二进制包
2020/09/30 Python
优衣库台湾官网:UNIQLO台湾
2019/02/01 全球购物
乌克兰品牌化妆品和香水在线商店:Bomond
2020/01/14 全球购物
Hobbs官方网站:英国奢华女性时尚服装
2020/02/22 全球购物
澳大利亚厨房和家用电器购物网站:Bing Lee
2021/01/11 全球购物
2015届大学生就业推荐表自我评价
2014/09/27 职场文书
英语导游词
2015/02/13 职场文书
MySQL sql_mode的使用详解
2021/05/08 MySQL
解决xampp安装后Apache无法启动
2022/03/21 Servers