4.14.4.4 颜色选择器

优质
小牛编辑
131浏览
2023-12-01

颜色字段存储一个字符串作为其值,并存储一个字符串作为其文本。 它的值是格式为#rrggbb的字符串,而其文本也可以是格式为#rgb的字符串。

颜色字段

打开编辑器的颜色字段

压缩的颜色字段

新建

{
  "type": "example_colour",
  "message0": "colour: %1",
  "args0": [
    {
      "type": "field_colour",
      "name": "FIELDNAME",
      "colour": "#ff0000"
    }
  ]
}

颜色字段构造函数采用一个可选值和一个可选验证器。 该值应该是格式为“ #rrggbb”的字符串。 如果未提供任何值或给定的值无效,则将使用默认颜色数组中的第一项。

可序列化和XML

颜色选自器对应的XML代码如下所示:

<field name="FIELDNAME">#ff0000</field>

字段节点的名称属性包含一个引用颜色字段的字符串,该节点的内部文本是要应用于该字段的值。 内部文本值遵循与构造函数值相同的规则。

请注意,在反序列化和重新序列化之后,所有内部文本值将采用#rrggbb格式。 在区分工作空间时,这有时很重要。

定制化

编辑器选项

setColours函数可用于设置颜色字段的颜色选项。 它采用一个颜色字符串数组(必须以#rrggbb格式定义)和一个可选的工具提示数组。 如果未提供工具提示数组,则将使用默认的工具提示数组。

工具提示和颜色是根据数组索引而不是值来匹配的。 如果colors数组比工具提示数组长,则额外颜色的工具提示将为其#rrggbb值。

setColumns函数设置颜色选择器中的列数。

{
  "type": "example_colour",
  "message0": "colour: %1",
  "args0": [
    {
      "type": "field_colour",
      "name": "COLOUR",
      "colour": "#ff4040"
    }
  ],
  "extensions": ["set_colours_extension"]
  这是使用JSON扩展名完成的。
}

Blockly.Extensions.register('set_colours_extension',
  function() {
    var field = this.getField("COLOUR");
    field.setColours(
      ['#ff4040', '#ff8080', '#ffc0c0',
        '#4040ff', '#8080ff', '#c0c0ff'],
      ['dark pink', 'pink', 'light pink',
        'dark blue', 'blue', 'light blue']);
    field.setColumns(3);
  });

可选地,默认颜色,工具提示和列可以全局覆盖。 这意味着它们将影响所有颜色字段,而不是特定字段。

Blockly.FieldColour.COLOURS = [
    '#ff4040', '#ff8080', '#ffc0c0',
    '#4040ff', '#8080ff', '#c0c0ff'];
Blockly.FieldColour.TITLES = [
    'dark pink', 'pink', 'light pink',
    'dark blue', 'blue', 'light blue'];
Blockly.FieldColour.COLUMNS = 3;

新建一个颜色选择器

颜色字段的值是#rrggbb格式的字符串,因此任何验证器都必须接受#rrggbb格式的字符串,并返回#rrggbb格式的字符串,null或undefined。

这是一个验证器的示例,它更改块的颜色以匹配块的颜色。

function(newValue) {
  this.getSourceBlock().setColour(newValue);
  return newValue;
}

根据色域阻止更改颜色