不幸的是,画布渐变不像 CSS 那样简单。每当渐变命令发生变化时,您都必须重建它。
我构建了一个可以促进这一点的快速演示,尽管它需要最新的 TweenJS 的 NEXT 版本,它有一个很棒的 ColorPlugin 来为颜色停止设置动画。
http://jsfiddle.net/lannymcnie/uhqake7e/
更新:更简单的方法http://jsfiddle.net/uhqake7e/2/
关键部分:
var colors = ["#ff0000", "#0000ff"],
ratios = [0,1],
w = 120, h = 120, // Shape dimensions
x0 = 0, y0 = 0, x1 = 0, y1 = h; // Gradient dimensions
// Create shape
var shape = new createjs.Shape()
.set({color1: colors[0], color2: colors[1]}); // Set initial color values
// Do the fill, and store the command for later
var fillCommand = shape.graphics.beginLinearGradientFill(colors, ratios, x0, y0, x1, y1).command;
有关命令的更多信息,请查看这篇文章。
然后我们可以补间颜色值:
var tween = createjs.Tween.get(shape, {bounce:true, loop:true})
.to({color1:"#00ff00", color2:"#ff00ff"}, 1000);
最后,重建变化的梯度:
[更新:更简单的方法]
tween.on("change", function(event) {
fillCommand.linearGradient([shape.color1, shape.color2], ratios, x0, y0, x1, y1);
}
类似的方法是使用补间颜色,然后重新绘制形状的内容,但这需要您存储所有指令。此示例更新用于渐变的实际命令。
太糟糕了,这有点令人费解,特别是因为 CSS 是如此简单:)
干杯。