【问题标题】:one function for multiple elements一个函数用于多个元素
【发布时间】:2014-11-16 13:29:33
【问题描述】:

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

  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();
  });

【问题讨论】:

    标签: javascript html5-canvas kineticjs


    【解决方案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));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-09
      • 2014-03-25
      • 1970-01-01
      • 2019-10-13
      • 2020-07-09
      • 1970-01-01
      • 1970-01-01
      • 2022-06-30
      相关资源
      最近更新 更多