2


0

Flex HSliderをダイアログに追加しただけです。 それは日数で期間を設定することを可能にします、そして、ユーザーがスライダーをドラッグしている間SHIFTキーを押すことによって週にスナップすることができるならば私はそれが素晴らしいだろうと思いました。

残念ながら、イベントハンドラに渡されたイベントにはキー修飾子情報が含まれていません。

これが私のコードです:

プロテクト関数onDurationSliderChange(event:SliderEvent):void {var durationInDays:int = this.sld_durationInDays.value;

//修飾子if(event.triggerEventはMouseEvent){var mouseEvt:MouseEvent = event.triggerEvent as MouseEvent; trace(mouseEvt.ctrlKey "" mouseEvt.ctrlKey "" event.keyCode); trace(mouseEvt);

// SHIFTを使用している場合、次の場合は週にスナップします(mouseEvt.shiftKey

次のような出力が得られます。

false false -1
[MouseEvent type="click" bubbles=true cancelable=false eventPhase=2 localX=NaN localY=NaN stageX=NaN stageY=NaN relatedObject=null ctrlKey=false altKey=false shiftKey=false buttonDown=false delta=0]

ドラッグ中にSHIFT(またはCTRL)が押されたかどうかを知る方法を知っている人はいますか? ありがとうございます。

2 Answer


2


私の命題:

アプリケーションにこの変数を追加します。

private var shiftPressed:Boolena = false;

この行をアプリケーションのcreationCompleteハンドラに追加します。

this.stage.addEventListener(KeyboardEvent.KEY_DOWN、checkKeyHandler); this.stage.addEventListener(KeyboardEvent.KEY_UP、unCheckKeyHandler);

次にこの機能を追加

プライベート関数checkKeyHandler(event:KeyboardEvent):void {if(event.shiftKey)shiftPressed = true; }

プライベート関数unCheckKeyHandler(event:KeyboardEvent):void {shiftPressed = false;}; }

そしてあなたの機能を修正しなさい

protected function onDurationSliderChange(event:SliderEvent):void {if(shiftPressed){//あなたの操作を追加する} else {//あなたの操作を追加する}}


0


私はこの解決策を見つけました:

前述のようにshiftPressed変数を設定します。

private var shiftPressed:Boolean = false;

次に、 `+ s:slider +`コンポーネントで事前定義されたリスナーを使用します。

mouseDown="{shiftPressed = event.shiftKey}"
mouseUp="{shiftPressed = false}"

次に、 `+ s:slider `の ` snapInterval `プロパティを使用するか、ロジックを ` change +`ハンドラに実装します。私の場合、シフトが押された場合は45、それ以外の場合は0.01ずつステップする必要がありました。だから私は使用しました:

snapInterval="{(shiftPressed)?45:0.01}"