使用 KineticJS 4.6.0在这个问题上回答了这个问题,提供了这个小提琴
但是...知道如何在最新版本的 kineticjs 上执行此操作吗?
我用 kineticjs 4.7.2 尝试了同样的小提琴:http: //jsfiddle.net/qNtSg/ 我只是用新的 API 改变了 drawFunc
drawFunc: function (context) {
...
context.fillStrokeShape(this);
}
合成不起作用
使用 KineticJS 4.6.0在这个问题上回答了这个问题,提供了这个小提琴
但是...知道如何在最新版本的 kineticjs 上执行此操作吗?
我用 kineticjs 4.7.2 尝试了同样的小提琴:http: //jsfiddle.net/qNtSg/ 我只是用新的 API 改变了 drawFunc
drawFunc: function (context) {
...
context.fillStrokeShape(this);
}
合成不起作用
Kinetic.Shape 在最近的版本中发生了变化。
现在 Shape drawFunc 接收上下文的包装而不是画布。
但是,包装的上下文仍然不支持globalCompositeOperation
.
因此,您仍然需要通过获取实际的 html 上下文(而不是包装的上下文)来“作弊”。
以下是获取实际 html 上下文的方法:
drawFunc: function(context) {
var ctx=this.getContext()._context;
....
所以这里是修改后的代码和小提琴:http: //jsfiddle.net/m1erickson/h3DGB/
var reveal = new Kinetic.Shape({
drawFunc: function(context) {
var ctx=this.getContext()._context;
ctx.save();
ctx.beginPath();
ctx.globalCompositeOperation="destination-out";
ctx.arc(120,120,75,0,Math.PI*2,false);
ctx.closePath();
ctx.fill();
ctx.restore();
},
dragBoundFunc: function(pos) { return(pos); },
fill: '#00D2FF',
stroke: 'black',
strokeWidth:4,
draggable:true
});
非常鼓舞人心的答案。我的要求略有不同,但我可以通过阅读来做到这一点。留下评论的小提琴以便做出贡献)。我在这里是因为声誉低于 50 岁,所以我还不能发表评论 :)
再次感谢 MarkE 的启发,愚蠢的东西不能在没有代码的情况下发布小提琴
马克西
<html>
<head>
<style>
body {
margin: 20px;
padding: 20px;
}
</style>
</head>
<body>
</body>
</html>
愚蠢的东西不能在没有代码的情况下发布小提琴