【问题标题】:remove keyboard control on flash slider component删除 Flash 滑块组件上的键盘控制
【发布时间】:2011-07-31 05:03:45
【问题描述】:

默认情况下,flash 滑块组件可以使用键盘进行操作。有没有办法禁用这种行为,让用户只能用鼠标拖动滑块组件?

【问题讨论】:

    标签: flash actionscript-3 flash-v3-components


    【解决方案1】:

    简单,只需将'Slider'对象的'focusEnabled'公共属性设置为false即可:

    import fl.controls.Slider;
    
    var slider:Slider = new Slider();
    addChild(slider);
    
    slider.focusEnabled = false; 
    

    这表示“Slider”对象在用户点击后无法获得焦点,因此不允许键盘与之交互。

    【讨论】:

      【解决方案2】:

      正如@Taurayi 和@Grant 所说,改变焦点很简单。

      这是一种更脏的方法:

      slider.addEventListener(FocusEvent.FOCUS_IN, onFocus);
      function onFocus(event:FocusEvent):void {
          stage.focus = null;
      }
      

      虽然slider.focusEnabled = false; 要简单得多。

      这里有一个更脏的方法:

      import flash.sampler.getMemberNames;
      
      removeKeyboardListeners(slider);
      
      function removeKeyboardListeners(dispatcher:EventDispatcher):void{
          var members:Object=getMemberNames(dispatcher);
          for each (var name:QName in members) {
              if (name.localName=="listeners") {
                  var numListeners:int = dispatcher[name].length;
                  for(var i:int = 0 ; i < numListeners ; i++){
                      try{
                          try{
                              if(dispatcher[name][i]){
                                  dispatcher.removeEventListener(KeyboardEvent.KEY_DOWN,dispatcher[name][i]);
                                  dispatcher.removeEventListener(KeyboardEvent.KEY_UP,dispatcher[name][i]);
                              }
                          }catch(e:Error){trace(e.message);}
                      }catch(e:ReferenceError){}
                  }
              }
          }
      }
      

      如果您想要一个冗长但不那么脏的方式,只需子类 fl.controls.Slider 并将其设置为库中 Slider 符号的类。在您的子类中,您将添加:

      override protected function keyDownHandler(event:KeyboardEvent):void {}
      

      keyDownHandler 继承自 fl.core.UIComponent 和 Slider.,因为它处理键盘更新。

      HTH

      【讨论】:

        【解决方案3】:

        添加:

         stage.focus = stage;
        

        到 SliderEvent.CHANGE 处理程序

        这会将焦点转移到舞台上,因此会禁用滑块上的键盘活动。

        【讨论】:

          猜你喜欢
          • 2021-04-21
          • 2011-04-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-29
          • 1970-01-01
          • 1970-01-01
          • 2020-06-03
          相关资源
          最近更新 更多