【发布时间】:2011-07-31 05:03:45
【问题描述】:
默认情况下,flash 滑块组件可以使用键盘进行操作。有没有办法禁用这种行为,让用户只能用鼠标拖动滑块组件?
【问题讨论】:
标签: flash actionscript-3 flash-v3-components
默认情况下,flash 滑块组件可以使用键盘进行操作。有没有办法禁用这种行为,让用户只能用鼠标拖动滑块组件?
【问题讨论】:
标签: flash actionscript-3 flash-v3-components
简单,只需将'Slider'对象的'focusEnabled'公共属性设置为false即可:
import fl.controls.Slider;
var slider:Slider = new Slider();
addChild(slider);
slider.focusEnabled = false;
这表示“Slider”对象在用户点击后无法获得焦点,因此不允许键盘与之交互。
【讨论】:
正如@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
【讨论】:
添加:
stage.focus = stage;
到 SliderEvent.CHANGE 处理程序
这会将焦点转移到舞台上,因此会禁用滑块上的键盘活动。
【讨论】: