• ベストアンサー

マウスを押している間繰り返す

マウスを押している間繰り返すスクリプトはどう書けばいいのでしょうか? スクロールボタンを作ろうと思っています。 on(press)とwhileやfor、onMouseup、onMousedownを組み合わせればできるかと思い調べてみたのですが、マウスが押されている間という条件が分かりませんでした。 よろしくお願いします。

  • Flash
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
noname#35109
noname#35109
回答No.1

なるほど,そうですね。 言われてみると確かに「マウスが押されている間」というのはありません。 でも「マウスが押されている間」と言うのをもう少し突っ込んで考えたら onMouseup、onMousedownなどを組み合わせればできると思います。 「マウスが押されている間」 =「マウスが押されてマウスが上げられるまで」   or「マウスが押されてドラッグアウトされるまで」 と言い換えることができます。 例として, マウスが押されている間 ムービークリップ(インスタンス名=A)を右にズルズル動かすボタンのスクリプトを書いておきます。 ステージ上に,下のようにムービークリップとボタンを配置してください。 ┌─┐ │A │ ←ムービークリップ(インスタンス名=A) └─┘ ■    ←Aを右に動かすボタン Aを右に動かすボタンには,以下のようなスクリプトを書くと, ムービークリップ(インスタンス名=A)を右にズルズル動かすことができます。 ------------------------------ on (press) { this.onEnterFrame = function() { A._x += 10; }; } on (release, dragOut) { this.onEnterFrame = null; } ------------------------------ ~~~上のスクリプトの説明~~~ //マウスを押したとき on (press) {   //Aをx軸で10ずつプラスする   this.onEnterFrame = function() {     A._x += 10;   }; } //マウスアップかドラッグアウトしたとき on (release, dragOut) {   //上のonEnterFrameは終了    this.onEnterFrame = null; } ~~~~~~~~~~~~~~ onEnterFrameは, フレームレートとして設定されたフレームが1コマ進む時間当たりに1回, function() { };内の計算をする。 ということです。 デフォルトでのフレームレートは12fpsになっていると思います。 この場合,1/12秒に1回, A._x += 10; という計算をするということです。 10はスピードになるので,これでAの動くスピードを調節してください。 あと, もし,Aがある位置に達したら, this.onEnterFrame = null; みたいなのを付け加えて, ある位置以上Aは動かなくすることもできます。 ---例------------------------ on (press) { this.onEnterFrame = function() { if (A._x<=400) { A._x += 10; } else { this.onEnterFrame = null; } }; } on (release, dragOut) { this.onEnterFrame = null; } ---------------------------- 左や上下に動かす場合も,同じような要領で考えればできると思いますよ。

ryotatronica
質問者

お礼

お礼が遅れてしまいすみません。 回答ありがとうございました。 無事に作ることが出来ました。 this.onxxxxx=function() this.onxxxxx=null はいろいろ使いまわせそうです。

その他の回答 (1)

  • kai123
  • ベストアンサー率53% (88/163)
回答No.2

たしかに、「押し続けている間」はないですね。 そこで自分は下記のようにしてます。 対象のボタン(ムービークリップシンボルである事)に次のスクリプトを記述してます。 on (press) { MCclick = "on"; } on (release) { MCclick = "off"; } on(dragOut){ MCclick = "off"; } onClipEvent (enterFrame) { if (MCclick == "on") { ここに、押している間に処理したいことを記述 } } MCclickという変数にマウスが押されているかどうかを代入して、 onClipEvent (enterFrame) {}内のif文でそれを判断して押されていれば("on"ならば)、 「ここに、押している間に処理したいことを記述」の部分を実行しています。 で、マウスが離されればMCclickにoffを代入。それをまた判断しています。 ちなみに、MCclickという変数を_root.をつけてルート変数にして、どこからでも参照できる ようにすれば、onClipEvent (enterFrame) {}部分を他のムービークリップに記述することも できます。 スクロールボタンを作ろうと・・・という事ですので、 http://okweb.jp/kotaeru.php3?qid=1455531 をご覧くださいませ。 多少の参考にはなると思います。

参考URL:
http://okweb.jp/kotaeru.php3?qid=1455531
ryotatronica
質問者

お礼

お礼が遅れてしまいすみません。 無事に作ることが出来ました。 リンク先のスクロールバーも参考になりました。 回答ありがとうございました。

関連するQ&A

  • ボタン上でマウスを押している間に、ウィンドウをスクロールしたい

    フォームボタンを押している間、インラインフレームのウィンドウをスクロールしたいのですが 思うように動作してくれません。 最初、タグのonmousedown属性とonmouseup属性を使用して 簡単に実装できると思っていたのですが mouseupのイベントがうまく拾えないようで、あきらめました。 下記のようなマウスドラッグのサンプルソースがあったので こちらを改造しようと思ったのですが、いろいろいじってみてもだめでした。 「マウスが離された」というイベントはどうすれば拾えるのでしょうか? IE限定の動作を予定しています。 よろしくお願いいたします。 <script type="text/javascript"> //tab→全角スペース //マウスをクリックして動かしている間だけスクロールする  window.document.onmousemove = scrollSubWindow;  window.document.onmouseup = scrollOff;  scrollFlag = false;  function scrollOn()  {   scrollFlag = true;  }    function scrollOff()  {   scrollFlag = false;  }    function scrollSubWindow()  {   if( !scrollFlag ) return;   Dummy.scrollBy( 0, 10 );   return false;  }   </script> <iframe src="dummy.html" name="Dummy" width=200 height=200></iframe> <input type="button" value="下へ" onMousedown="scrollOn()" style="width: 200px; height: 200px;">

  • Delphi6 OnMouseUp

    deiphi6です。 OnMouseDown,OnMouseMoveイベントで返ってくるX,Y座標値と、OnMouseUpで返ってくるX,Y座標値に違いがあります。 例えば、 ScrollBoxの中にPaintBoxを置いて、PaintBoxのWidth(Height)を32768以上にします。 実行させ、スクロールさせてPaintBoxが32768以上のポイントでマウスボタンを押して離すと。 OnMouseUpで返ってくるX(Y)座標はマイナスになります。 また、65536以上にするとまた1から始まるプラスのX座標がかえってきます。 OnMouseDown,OnMouseMoveでは正常なプラス値です。 つまり、Intergerで返ってきてないってことですか? OnMouseMoveでの座標を代用して使ってますが、マウスの早い動きには正確を欠きます。 何かいい回避方法はありませんでしょうか?

  • マウスイベントが発生しません

    マウスイベントに詳しい方教えて下さい。 Windows上のプログラミングで TImageコンポーネント上でマウスを左クリックさせると、 通常はOnMouseDown→OnClick→OnMouseUpの順で イベントが発生します。 ただ、たまにOnMouseUpイベントが発生せず エラーが発生してしまう事が起こってしまいました。 常に起こるわけではなく、何かのタイミングで起こります。 ただ、何が原因かは全然つかめていません・・・。 OnMouseUpイベントをキャンセルしてしまう 処理って存在するのでしょうか? 特にPeekMessageなどは使用していません。 もし、以上のような事が起こる原因をご存知の方、 お教え願えますか? よろしくお願い致します。

  • マウスホイールボタンのイベントをとるには?

    キーが押された時のイベントは、document.onkeydownを、そして、 マウスボタンが押された時は、document.onmousedownイベントで イベントを拾うことができることは知っております。 ところで、マウスホイールの上下スクロールのイベントを拾うには どのようなJavaScript(IE/NN)でコーディングすればよろしいでしょうか?

  • 小さいマウス

    小さいマウスを探しています。 条件は・USB(もしくはBluetooth)でワイヤレス接続できるもの    ・ホイール(スクロール)ボタン付き    ・できれば左右ボタンに加え、WEB閲覧の時に役だつ「戻る」「進む」の2つ    のボタンも欲しいです。 いくつか探しましたが、戻る・進むボタンがある小さいマウスがみつかりませんでした。どなたか知っていらしたら教えてください。(最悪、戻る・進むボタンがなくてもいいです。でも本当は、進む・戻るボタンが重要なんですが・・・)

  • おすすめのマウス

    今現在、マイクロソフトの「IntelliMouse Optical」を使っています。 これが製造中止になってしまったので新しいマウスを探しています。 条件としては ・第4、5ボタンが左右にあること(5以上のボタンでもかまいません) ・スクロールがカチカチと一スクロールで止まること ・できればワイヤレス マイクロソフトの「ワイヤレス マウス 5000」が近いのですが スクロールがヌルヌルで使いづらいです。 何卒よろしくお願いします。

  • マウスが乗っている間実行するには?

    画像にマウスポインタが乗っている間実行されるスクリプトを作りたいと思っています。(例えば、テキストボックスにマウスポインタが乗っている間、テキストボックスで1ずつ足し続ける) onMouseOverではマウスが乗ったときだけになってしまいますし、onMouseMoveでは動かしてる間だけになってしまいます。 どうすれば可能でしょうか・・・。

  • マウスが!!マウスが!!

    マウスを新しくしました。ところがマウスの調子がおかしいのです。センターボタン(スクロール)が効かないのです。いったいどうしたら直るのでしょう? 教えてください。よろしくお願いします。

  • 外でマウスアップした時のイベント

    以下htmlは[up]の上でマウスダウンすると[down]に、[down]の上でマウスアップすると[up]になります。 しかし、[up]の上でマウスダウンして、[down]に変わった後[down]の外でマウスアップすると[down]のままになってしまいます。 このように、外でマウスアップした場合でも[up]の表示としたいのですが、なにかよい方法はないでしょうか? FlashのAcitoscriptでいうところのreleaseOutsideを検知したいです。 <html> <head> <script> window.onload = function(){ var Drag = 0; i = function(id){ return document.getElementById(id) }; i('o').onmousedown = function(){i('o').innerHTML='[down]'; } i('o').onmouseup = function(){ i('o').innerHTML='[up]'; } } </script> <div id="o">[up]</div> </body> </html>

  • AS3.0でマウスボタンの状態を調べたいのですが、良い方法はないでしょうか

    AS3.0になって、releaseOutsideに相当するものがなく、マウスボタンが領域外で離されたことを取得できず困っています。 いろいろ調べてみたんですが、良い方法が見つかりません。 作っているのはドラッグ&ドロップのスクリプトです。 startDrag()した後、領域外で離されたときにもstopDrag()できるように、stageに対してMOUSE_UPをリスナー登録しています。 my_mc.stage.addEventListener(MouseEvent.MOUSE_UP,onMouseUp); function onMouseUp(event:MouseEvent):void { my_mc.stopDrag(); my_mc.stage.removeEventListener(MouseEvent.MOUSE_UP,onMouseUp); } 通常はこれでうまくいくんだと思いますが、今作っているものには、ステージに選択可能テキストフィールドがあります。 ドラッグ中にそのテキストフィールドの上でマウスボタンを離すと、stageにMOUSE_UPイベントが発生しないようで、stopDrag()が働かず、マウスボタンを離していても、my_mcがくっついてきてしまいます。 ソーテック社の「Flash ActionScript3.0入門ノート」を購入してAS3.0の勉強をしているのですが、そのドラッグ&ドロップのパッケージ(SimpleDrag2.as)でも、選択可能テキストフィールドを置くと、同じ不具合が出てしまいます。 AS2.0では、releaseOutsideを使っていてうまくいきました。 マウスボタンの状態を取得する方法があれば、ENTER_FRAMEで状態を見張って、stopDrag()することもできると思うのですが、状態を取得する方法が見つかりません。 AS3.0で確実にstopDrag()できる方法をご存知でしたら、教えてください。 よろしくお願いいたします。

専門家に質問してみよう