javascript - KineticJS:多边形上的 .SetFill 更新填充属性但不填充颜色

标签 javascript kineticjs

我有一个现有的代码库,它创建了一个舞台,然后添加了一些图层,并在其中一个图层中绘制了 KineticJS 多边形。现在我需要在用户单击舞台外的元素时更新多边形的背景。

我已经设法获取了舞台细节,然后是我想要更改的确切多边形,并且还设法使用 .SetFill 方法更改了多边形的fill。当我访问多边形的属性时,我看到填充属性设置正确。但是多边形的背景没有改变。

.SetFill 函数之后我们需要做些什么吗?或者,在创建 KineticJS 形状后更改/更新填充的正确方法是什么?我没有看到任何更新或重绘方法...

代码在 Clojurescript 中,所以我没有确切的 JS 代码,但这些是我的步骤:

  1. polygon.setFill(color hexcode)
  2. layer.add(多边形)
  3. stage.add(层)
  4. stage.draw()

最佳答案

这是一个使用 setAttrs 方法更新多边形背景的 kinetic.js 示例。更改后,使用batchDraw方法更新图层。

let index = 0;
const colors = [
  [0, 'yellow', 1, 'red'],
  [0, 'red', 1, 'yellow']
];
document.querySelector('#container').addEventListener('click', function() {
  if (index++ > 0) index = 0;
  polygon.setAttrs({
    fillLinearGradientColorStops: colors[index]
  });
  // force update of layer
  layer.batchDraw();
});

const stage = new Kinetic.Stage({
  container: 'container',
  width: 615,
  height: 145
});
const layer = new Kinetic.Layer();
const polygon = new Kinetic.RegularPolygon({
  x: stage.width() / 2,
  y: stage.height() / 2,
  sides: 5,
  radius: 70,
  fillLinearGradientStartPoint: {
    x: -50,
    y: -50
  },
  fillLinearGradientEndPoint: {
    x: 50,
    y: 50
  },
  fillLinearGradientColorStops: colors[index],
  stroke: 'black',
  strokeWidth: 4,
  draggable: true
});
layer.add(polygon);
stage.add(layer);
stage.draw();
<script src="https://cdnjs.cloudflare.com/ajax/libs/kineticjs/5.2.0/kinetic.min.js"></script>
<div id='container'></div>
<div>Click or drag polygon</div>

关于javascript - KineticJS:多边形上的 .SetFill 更新填充属性但不填充颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57718124/

相关文章:

javascript - 沿固定 Angular 移动矢量 "straight out"

javascript - 当数据库中没有要显示的视频时隐藏视频容器 HTML PHP

javascript - 如何在Chrome或Firefox的JavaScript控制台中引用最后打印出来的对象?

javascript - 如何在组件 VueJS 中初始化小部件?

java - MVC 或 Rest 或两者

javascript - KineticJS层的Minimap如何实现?

javascript - 在指令范围和 Controller $scope 之间共享数据?

javascript - 如何在 Kinetic.js 中用 Canvas 图像制作动画?

javascript - html5 Canvas 动力学文本框

javascript - 在 KineticJS 中缩放和平移