代码之家  ›  专栏  ›  技术社区  ›  Mark Ingram

如何使滑块标签可点击[Flex 3]

  •  1
  • Mark Ingram  · 技术社区  · 17 年前

    我有一个简单的滑块,只有3个选项。强制用户拖动滑块上的小缩略图似乎很奇怪,而单击滑块旁边的3个实际标签中的一个会容易得多。有人知道如何做到这一点吗?

    2 回复  |  直到 17 年前
        1
  •  1
  •   Ross Henderson    17 年前

    这是一个很酷的问题。

    Slider使用的Label对象是Label的一个子类(称为SliderLabel)。因此,最好的方法可能是将Slider子类化,并将事件侦听器添加到标签中。

    我认为您可以在commitProperties方法或updateDisplayList方法中成功地添加事件侦听器。我不确定其中一个是否比另一个更可取,但commitProperties似乎是最好的选择 更多

    override protected function commitProperties():void
    {
        super.commitProperties();
    
        for(var i:int = 0; i < labelObjects.numChildren; i++)
        {
            if(!SliderLabel(labelObjects.getChildAt(i)).hasEventListener(MouseEvent.CLICK))
            {
                SliderLabel(labelObjects.getChildAt(i)).addEventListener(MouseEvent.CLICK,sliderLabelClickListener);
            }
        }
    }
    

    然后可能会有类似的事情发生 sliderLabelClickListener

    private function sliderLabelClickListener(e:MouseEvent):void
    {
        dispatchEvent( new SliderLabelClickEvent(e.target) );
    }
    

    我想你会想要一个定制的活动,而不是派一个固定的 Event ,因此可以包含标签的名称/id/值。

    dispose 并将我所有的手动删除逻辑放在那里(删除事件侦听器、取消匹配/删除ChangeWatcher)。然后我将一个侦听器分配给组件的 REMOVED_FROM_STAGE 事件并调用 处置 方法从该侦听器中删除。

        2
  •  0
  •   Dan    17 年前

    您确定滑块是在这种情况下使用的最佳组件吗?一般来说,当用户有大量连续选项可供选择时,可使用滑块,其中用户选择的精度并不重要(例如,音量滑块-音量为51%而不是50%真的没有多大区别)。

    如果您只有三个选项,并且用户只能选择这三个选项中的一个,我建议使用组合框或单选按钮组。