`
祈祷幸福
  • 浏览: 37325 次
  • 性别: Icon_minigender_2
  • 来自: 成都
社区版块
存档分类
最新评论

初学canvas,遇到width和height显示问题和用excanvas.js兼容IE问题

阅读更多
/*-----------------------ITEYE 祈祷幸福博客原创,转载请注明。-------------------*/

第一次认真写技术博客文~~~若有不严谨的地方,望指正。



今天是第一天认真开始学canvas,书上网上写的还是蛮简单的,结果一写代码,遇到了一些细节细节问题,分享一下自己总结的吧。


问题一:内部样式表重置canvas的width和height,图形显示不正确
首先,canvas默认的width是150px,height是300px。不要小看这个简单的设置,我就栽了跟头:
我看的初学pdf是canvas tutorial,上面的例子代码是这样的:

<body>
        <canvas id='tutorial' width='150px' height='150px'></canvas>
</body>


canvas{
        border:2px solid #000;
        margin:10px;
        padding:10px;
        color:red;
}


$(document).ready(function(){
        draw();
});
function draw(){
        var canvas = document.getElementById('tutorial');
        if(canvas.getContext){
                var ctx = canvas.getContext('2d');
                ctx.fillRect(25, 25, 100, 100);
        }
}


学前端的都知道,内容和表现是要分离的,所以我就改了一下:

<body>
        <canvas id='tutorial'></canvas>
</body>


canvas{
        width:150px;
        height:150px;
        border:2px solid #000;
        margin:10px;
        padding:10px;
        color:red;
}

Javascript部分没有变。于是悲剧就酿成了:

这是我看到的样子:


而教程上说的是这个样子:


我搜了各种资料都无果,也看了API,fillRect(x, y, w, h)显然应该是个正方形。
最后,我把代码改得和原代码一样,就是说使用行内样式写宽高,现代浏览器除了IE都正常了(至于IE嘛,见下文)。

再次搜索,大概找到了问题:
搜索结果:http://topic.csdn.net/u/20110205/00/04e5481d-2a0b-4c17-b0c0-4e89da146926.html
canvas有自己的width和height属性,和css设置的还不是等同的,而至于行内样式和内部样式表为什么会不同,我水平有限,还不能给出解答,若你知道原因,可以交流下~~

为了稳妥起见,我觉得咱以后还是这样改宽高吧:
<body>
	<canvas id='tutorial'></canvas>
</body>

$(document).ready(function(){
	draw();
});
function draw(){
	var canvas = document.getElementById('tutorial');
	canvas.width = 150;
	canvas.height = 150;
	if(canvas.getContext){
		var ctx = canvas.getContext('2d');
		ctx.fillRect(25, 25, 100, 100);
	}
}


休息一下,再看问题二~:arrow:

问题二: 用excanvas.js兼容IE时,条件注释位置引起的显示问题
都知道IE9以下的版本是不支持html5的,更不要说canvas绘图了,所以,根据书上所说,我去下载了excanvas.js。
大家都知道,js很多时候都是放在body之后的,防止页面未加载完成就执行脚本。我个人习惯也是这样做,于是我理所当然得这样写了(片段代码):
<html>
<!--省略head代码-->
	<body>
		<canvas id='tutorial'></canvas>	
	</body>
		<!--[if lt IE 9]>
			<script src="excanvas.min.js" type="text/javascript"></script>	
		<![endif]-->
		<script src="jquery-1.5.1.min.js" type="text/javascript"></script>
		<script type="text/javascript">
			$(document).ready(function(){
				draw();
			});
			function draw(){
				var canvas = document.getElementById('tutorial');
				if(canvas.getContext){
					var ctx = canvas.getContext('2d');
					ctx.fillRect(25, 25, 100, 100);
				}
			}
		</script>
</html>



然后IE果断杯具了,没有显示出画布。
我以为是excanvas.js还不够强大,于是自作多情加了个html5.js,发现还是不行。然后搜了一篇文章,写的是html5.js要放在head里面,不然之后的html5标签无法辨认。
于是,我也试着把excanvas.js放在head里。显示正确。
注意下:以上的IE显示正确是在宽高用js函数来更改的情况下。

如果你是用问题一所说的行内样式更改的宽高,虽然非IE的现代浏览器显示正常,但是IE下显示结果是这样的:
ps、本人测的是IE8。

IE里面的canvas宽高还是默认的。


所以,综合来看,以后还是不要在样式表里面乱改canvas的宽和高,不然会酿成各种杯具。


PS、期间偶有点忘记条件注释砸写了,搜索的时候发现网上有两种写法,运行时候发现第二种是不可行的,建议写的时候注意一下。
<!--[if lt IE 9]><![endif]-->
<!--[if lt IE9]><![endif]-->


参考手册:
canvas在线手册图片版(HTML5 Canvas Cheat Sheet v1.x):http://www.nihilogic.dk/labs/canvas_sheet/HTML5_Canvas_Cheat_Sheet.png
本人看的pdf在线版:http://www.docin.com/p-136387127.html



/*-----------------------ITEYE 祈祷幸福博客原创,转载请注明。-------------------*/
  • 大小: 3.6 KB
  • 大小: 4.6 KB
  • 大小: 5.8 KB
1
2
分享到:
评论

相关推荐

    excanvas.min.js_0.8.3.zip

    使用Excanvas.js,开发者可以编写与在现代浏览器中一样的Canvas代码,而无需担心在旧版IE中的兼容性问题。例如,你可以创建动态图表、游戏场景、图像滤镜或其他需要动态图形的应用,这些在IE中都能通过Excanvas.js...

    让IE支持HTML5中canvas标签:excanvas.js

    通过excanvas,开发者可以编写与现代浏览器兼容的canvas代码,而无需担心IE的兼容问题。 在使用excanvas.js之前,首先需要在HTML文档的部分引入该库,通常通过CDN或者将文件下载到本地服务器后引用。例如: ```...

    excanvas.js--图形JS

    这时,我们需要在jqPlot前端加载Excanvas.js,这样jqPlot就能利用Excanvas.js提供的VML功能,实现在不支持Canvas的IE浏览器上显示图表。 使用Excanvas.js的过程大致如下: 1. 在HTML文档的`&lt;head&gt;`部分引入jQuery...

    excanvas.min.js html5.js html5shiv.js respond.min.js

    1. excanvas.min.js:Excanvas是一个JavaScript库,用于在不支持Canvas元素的老版IE浏览器中提供Canvas的支持。Canvas是HTML5中的一个核心元素,允许开发者在网页上进行动态图形绘制。通过Excanvas,开发者可以利用...

    excanvas.qrcode.mix.js

    该js由本人混合,将jquery.qrcode.min.js与excanvas.compiled.js完美结合,提供了IE8等低版本浏览器不兼容canvas控件生成二维码的解决方案。解决了jquery.qrcode.min.js使用table模式生成二维码时打印不显示的问题。...

    excanvas.compiled.zip

    6. **使用方法**:在页面中引入`excanvas.compiled.js`后,开发者可以通过`G_v2.0.Excanvas`实例化一个Canvas元素,然后就可以像在其他现代浏览器中一样使用Canvas API进行绘图。 7. **实例化Canvas**:通常,你...

    bluebird.js excanvas.js

    总的来说,bluebird.js和excanvas.js是解决IE浏览器兼容性问题的利器,它们分别解决了Promise和Canvas的支持,使得开发者可以在不牺牲功能的前提下,为更广泛的用户群体提供良好的浏览体验。在项目中合理运用这两个...

    excanvas.min.js

    配合html5.js使用,可以再低版本浏览器使用canvas进行绘图,支持IE6~8浏览器。

    canvas.js html5.js 兼容ie

    这个可能是"canvas.js"和"excanvas.compiled.js"的集成包或者一个特定针对IE的Canvas解决方案,方便开发者一次性引入,解决在IE上运行Canvas代码的问题。 总的来说,这三个文件("canvas.js"、"html5.js"和"excanvas...

    excanvas_canvas.js_

    &lt;canvas id="myCanvas" width="200" height="50"&gt;&lt;/canvas&gt; ``` ```javascript var canvas = document.getElementById('myCanvas'); G_vmlCanvasManager.initElement(canvas); ``` 2. **绘图API**:Excanvas提供了...

    excanvas.js

    Javascript 动态图形库 excanvas库 让IE支持canvas

    excanvas.js jQuery 曲线绘制(图表)插件

    excanvas.js jQuery 曲线绘制(图表)插件.excanvas 使得 IE 能通过 VML 支持 Canvas 标签

    excanvas_r3.zip解决了ie8不支持canvas

    然而,由于IE8并不原生支持Canvas,因此在这些旧版本的IE浏览器上使用Highcharts等依赖Canvas的库时会遇到问题。 Highcharts是一个流行的JavaScript图表库,用于创建交互式的数据可视化图表。它利用了Canvas元素来...

    excanvas-js

    值得注意的是,尽管Excanvas.js 提供了良好的兼容性,但它的性能可能无法与原生支持Canvas的现代浏览器相比,因此在考虑兼容性和性能平衡时,可能需要针对旧版IE浏览器做些优化。 附带的"说明.txt"文件可能包含了...

    excanvas_r3 使IE支持canvas

    Excanvas_r3 是一个...总之,Excanvas_r3是开发人员在面对旧版IE浏览器时解决Canvas兼容问题的重要工具,通过它,你可以在IE上实现动态图形、图表绘制、游戏制作等多种功能,扩展了HTML5在老旧浏览器上的应用范围。

    让IE兼容 HTML5的canvas标签

    通过这种方式,开发者可以使用相同的代码在所有浏览器中创建交互式的canvas图形,而无需担心IE浏览器的兼容性问题。 值得注意的是,尽管excanvas提供了对老版IE的canvas支持,但它无法实现所有HTML5 canvas的特性,...

    ie下的canvas兼容显示

    本文将详细探讨如何解决在IE环境下,尤其是低版本IE中的Canvas兼容显示问题。 Canvas是HTML5中的一个核心元素,它提供了一个二维绘图表面,允许通过JavaScript进行动态图像渲染。然而,IE8及更早版本并不支持原生的...

    excanvas_r3.zip

    Excanvas_r3.zip是一个针对IE8浏览器的Canvas兼容性解决方案。在HTML5中,Canvas元素是一个强大的绘图工具,允许开发者动态地在网页上绘制图形。然而,早期的Internet Explorer浏览器,尤其是IE8及以下版本,不支持...

Global site tag (gtag.js) - Google Analytics