多个元素的一个功能

时间:2014-09-22 14:26:10

标签: javascript html5-canvas kineticjs

我目前正在画布上绘制元素:

  var head = new Kinetic.Ellipse({
    x: stage.width() / 2,
    y: 100,
    radius: {
            x: 50,
            y: 60
        },
    fill: '#DDDDDD',
    stroke: 'black',
    strokeWidth: 2
  });

  var neck = new Kinetic.RegularPolygon({
    x: stage.width() / 2,
    y: 180,
    sides: 4,
    radius: 70,
    fill: '#DDDDDD',
    stroke: 'black',
    strokeWidth: 2
  });

layer.add(neck);
layer.add(head);

并在点击或触摸时更改这些元素的颜色,但我会在屏幕上有很多元素,并且不希望相同数量的功能更改每个元素。

有没有办法让下面两个结合起来作为一个功能,但影响上面两个。

  head.on('touchstart, mousedown', function() {
    var current = this.getFill();
    var fill = "";
    switch (current) {
      case "#DDDDDD":
      fill = "#FFC926";
      break;
      case "#FFC926":
      fill = "#FF0000";
      break;
      case "#FF0000":
      fill = "#000000";
      break;
      default:
      fill= "#DDDDDD";
    }
    this.setFill(fill);
    layer.draw();
  });

  neck.on('touchstart, mousedown', function() {
    var current = this.getFill();
    var fill = "";
    switch (current) {
      case "#DDDDDD":
      fill = "#FFC926";
      break;
      case "#FFC926":
      fill = "#FF0000";
      break;
      case "#FF0000":
      fill = "#000000";
      break;
      default:
      fill= "#DDDDDD";
    }
    this.setFill(fill);
    layer.draw();
  });

1 个答案:

答案 0 :(得分:1)

您可以提取常用功能,并像下面那样使用它

 var evaentListener =  function(obj) {
    return  function() {
        var current = obj.getFill();
        var fill = "";
        switch (current) {
          case "#DDDDDD":
          fill = "#FFC926";
          break;
          case "#FFC926":
          fill = "#FF0000";
          break;
          case "#FF0000":
          fill = "#000000";
          break;
          default:
          fill= "#DDDDDD";
        }
        obj.setFill(fill);
        layer.draw();
    }
}

head.on('touchstart, mousedown',evaentListener(this));

neck.on('touchstart, mousedown',evaentListener(this));
相关问题