3

我正在尝试使用 jQuery 调整 HTML5 画布元素的大小。(注意:不是画布内的对象,而是元素的大小!)

仅使用 jQuery 的代码可以正常工作:http: //jsfiddle.net/dAQBD/

但是当尝试对 KineticJS 框架做同样的事情时,它根本不起作用。我的代码:http: //jsfiddle.net/mLMSE/1/

我怀疑这是因为框架基于<div>- through - ( var stage = new Kinetic.Stage("div", 500, 200);)创建画布本身

有没有办法解决这个问题?现在不想改变框架,因为我在我的真实项目上做了很多(这只是虚拟代码)。谢谢。

(我知道我的小提琴说“扩展”,而实际上它们的尺寸减小了。错字。)

4

2 回答 2

3

jQuery 的动画采用 CSS 属性的映射。换句话说,您正在更改画布的 CSS 宽度,而不是画布的实际width属性。这很可能不是您想要的。您将不得不制作自己的动画函数(或者更聪明地使用 jQuery,因为它只在 CSS 上运行)。

你可以在这里做很多事情。一个想法(可能不是最好的想法)是将 div 动画设置为 300,并有一个计时器来检查 div 的 clientWidth。定时器函数不断设置canvas.width等于div.style.clientWidth。这样,画布会随着您的虚拟 div 向下动画。

于 2012-01-26T14:27:19.830 回答
2

这没有做任何事情的主要原因是您仅使用 jquery 调整容器的大小。动力学用画布元素填充该容器。它绝对定位这些画布元素以实现分层效果,然后允许它在动画期间交换分层顺序。当您设置 new kinetic.Stage() 时,这些绝对定位的画布元素会获得它们的尺寸

您没有为 exampleCanvas 设置 css 规则,请尝试以下操作:

#exampleCanvas{ overflow: hidden; width: 500px; height: 200px; border: 2px solid red; position: relative; }

​ 另外,kineticjs api 有 .setSize() 方法,所以 stage.setSize(width, height) 可能是迈向解决方案的一步。所以,在动画回调中使用 stage.setSize(300, 200);

如果这没有达到预期的结果,您可以像这样定位容器中的画布元素:

$("#exampleCanvas").children("canvas").animate( ... );
于 2012-03-05T01:29:19.093 回答