ポップアップウィンドウの位置指定方法について

このQ&Aのポイント
  • Falsh MX2004使用の初心者が、地図上の県にカーソルを合わせるとその地区の情報が表示されるポップアップウィンドウの位置指定方法について教えてください。
  • 初心者なだけに、本からサンプルを得てカスタマイズしているのですが、ウィンドウの位置指定ができなくて困っています。
  • サンプルではウィンドウが重ならないように設定されていますが、位置を変えると不具合が起きてしまいます。アドバイスをお願いします。
回答を見る
  • ベストアンサー

ポップアップウィンドウの位置指定

こんにちは。 Falsh MX2004使用の初心者です。 地図上の県にカーソルを合わせるとその地区の情報が表示されるポップアップウィンドウが出るものを作っています。 初心者なだけに、本からサンプルを得てカスタマイズしているのですが、ウィンドウの位置指定ができなくて困っています。 方法としては、ポップアップするムービークリップにリンケージ設定で識別子を入力しています。 ボタンには下記を記述。 on(rollOver){ _root.popup("saitama"); } メインタイムラインの1フレーム目には以下のアクションを記述しています。 this.stop(); _root.ID = 0; function popup(x) { _root.ID++; var name = eval(x); name.removeMovieClip(); syoki = {_x:5*ID+20, _y:5*ID+20}; _root.attachMovie(x, x, ID, syoki); } サンプルでは3つのウィンドウが出るので完全に重ならないような作りになってるようです。 このまま使うとあまりにも左上の高いところにウィンドウが開いてしまうため、 syoki = {_x:5*ID+20, _y:5*ID+20}; の数値を入れ替えて syoki = {_x:400*ID+20, _y:300*ID+20}; などにすると最初の位置は良いのですが、次にマウスオーバーすると とんでもなく位置に開いて、繰り返すと最後にはフレームアウトしていってしまいます!(涙) どなたか、アドバイスをお願いします。 初心者なので質問の仕方もわかってないかもしれません。 補足もいたしますので、どうぞよろしくお願いします!

noname#196636
noname#196636
  • Flash
  • 回答数1
  • ありがとう数1

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

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

本当の初心者の方なら, 1 「地図上の県」をボタンシンボルにして,  そのボタンシンボルの編集で,               | アップ | オーバー | ダウン | ヒット |  □レイヤー1 筆・・□|  ●  |    ●   |  ●  | ●  |  でオーバーの部分に,ポップアップ表示を入れる。 2 さらにアニメーションさせたい場合はオーバーの部分に   アニメーションでポップアップするムービークリップを入れる。 3 もっとカスタマイズしたい場合は,   ムービークリップでボタンを自作する という段階を踏むのが順当で,汎用的に色々できると思います。 しかし,それは抜きなのですよね。 そういう汎用的で簡単なことは抜きで, あえて書かれている場合でしか使えない方法を回答します。 (かなり含みが入ってますね,失礼… (;u_u) 。 ) というか, いまひとつ,どうしたいのか映像が思い浮かびませんが,  syoki = {_x:5*ID+400, _y:5*ID+300}; ではダメなのでしょうか? 要は,オーバーするたびに, ID が1ずつ加算されるのですよ。 そのIDが 1 増えることによって,  syoki = {_x:5*ID+20, _y:5*ID+20}; で5ピクセルずつ右下に移動するわけです。 上に書いた syoki = {_x:5*ID+400, _y:5*ID+300}; でも5ピクセルずつ右下に移動することには変わりありません。 初期座標が (x, y) = (400, 300) に変わるだけです。 そもそもなんで,移動させるのでしょう? 根本的に移動させる意味がよくわかりませんが… もし ID の 変動により,自動移動をさせたくないのでしたら, xy座標の引数を2つ増やされてはいかがでしょうか? ---ボタン------------------------- on (rollOver) { _root.popup("saitama", 400, 300); } -------------------------------- ---フレーム----------------------- this.stop(); _root.ID = 0; function popup(x, a, b) { _root.ID++; var name = eval(x); name.removeMovieClip(); syoki = {_x:a, _y:b}; _root.attachMovie(x, x, ID, syoki); } -------------------------------- とにかく, したい映像がどんな物であるのかがイメージできない状態での回答です。

noname#196636
質問者

お礼

ご回答ありがとうございます! どうにかできそうです。 もともとウィンドウをずらす意味は私には必要なかったのですが(^^; サンプルの方ではウィンドウが3つ用意されていたので、この場合一緒に表示すると重なって下が見えなくなってしまうからのようです。 ウィンドウ本体もドラッグできたり、小さくたたんだりできるようになっていました。 ムービークリップでの作成も試みていまして、ポップアップするのと中に書かれたテキストにリンクを設定して、別ウィンドウを開くところまではできたのですが、ポップアップウィンドウを閉じるボタンが機能せず、たまたま見つけたサンプルが理想に近かったので利用してました。 また質問させていただくかもしれません。 ありがとうございました!

関連するQ&A

  • ポップアップウィンドウの位置

    こんにちは。 JavaScriptでポップアップウィンドウを表示する際に、位置を指定できると思いますが、その位置を「画面の右上端」に指定することは出来るでしょうか。 ピクセル等の数値指定ですと、ユーザーの環境によって違いが出てしまいますので、何か他の指定方法があれば教えていただきたいと思います。 出来ればIE4以上、NN4.Xともに対応していると良いのですが。(NN6.Xもですね) 一応検索してみましたが、ピクセル指定の物以外を発見できませんでした。説明が面倒でしたらURL等の紹介だけでもお願いしたいと思います。 ちなみにDreamweaver4を使用しています。 JavaScriptに関しては、サンプルコードを見ながら記述しています。(DW4のビヘイビアも時折使用しています)

  • onEnterFrameで予定の位置で止まってくれない。

    http://www.icnet.ne.jp/~ang74g5c/ ↑このようなものを作ってみました。 フラッシュのサイズは800×600px。 一つの色のパネルの大きさも800×600pxで、様々な色を合わせて3行3列で合計9個のパネルを並べたものをイラストレータで作成してフラッシュに入れ、インスタンス名はcolorpannel(基準点は左上)としました。 右上の番号を押すと想定の位置で止まるようにしたいと思い、フレームに以下の設定をしてみました。 (右上の番号にはそれぞれnum1~num9までのインスタンスネームをつけています。) ------------------------------------- num1.onRelease = function() { _root.onEnterFrame = function() { if (_root.colorpannel._x>=0) { _root.colorpannel._x -= 30; } if (_root.colorpannel._x<=0) { _root.colorpannel._x += 30; } if (_root.colorpannel._y>=0) { _root.colorpannel._y -= 30; } if (_root.colorpannel._y<=0) { _root.colorpannel._y += 30; } }; }; num2.onRelease = function() { _root.onEnterFrame = function() { if (_root.colorpannel._x>=-800) { _root.colorpannel._x -= 30; } if (_root.colorpannel._x<=-800) { _root.colorpannel._x += 30; } if (_root.colorpannel._y>=0) { _root.colorpannel._y -= 30; } if (_root.colorpannel._y<=0) { _root.colorpannel._y += 30; } }; }; num3.onRelease = function() { _root.onEnterFrame = function() { if (_root.colorpannel._x>=-1600) { _root.colorpannel._x -= 30; } if (_root.colorpannel._x<=-1600) { _root.colorpannel._x += 30; } if (_root.colorpannel._y>=0) { _root.colorpannel._y -= 30; } if (_root.colorpannel._y<=0) { _root.colorpannel._y += 30; } }; }; (以下、num9まで座標位置が変わったものだけを記述していますので省略します。) ------------------------------------- URLを見ていただくとわかるように、各色の止まる位置が微妙にズレて隣の色が見えてしまっているのです。 OnEnterFrameなので、座標位置を指定してdeleteで止めれば良いのかな?とは思っているのですが、その書き方もよくわかりません。 どなたか、おわかりにある方がいらっしゃいましたら教えていただけませんでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • ポップアップを一定時間、またはマウスが乗っている間表示させておく

    スクリプトに詳しくないので、教えていただきたいです。 画面上のあるエリアにマウスをのせるとポップアップウィンドウのようなものが表示され、 その中にあるボタンをクリックすると外部swfを読み込むという仕組みを 作りたいと思っています。 下に書いてあるスクリプトでポップアップが出てくるようにしたのですが、 その次がわからなくて困っています。 (1)マウスがエリアから外れても、一定時間(例えば1秒とか)ポップアップを 表示したままにしたい (2)ポップアップにマウスがのっている間は表示させておきたい (1)はエリア部分とポップアップが離れている場合(といってもほんの少しです)を 考えてのことです。 いい方法がありましたらぜひ教えてください。 どうぞよろしくお願いいたします。 エリア部分に書いたActionScript --------------------------------------------------------------- onClipEvent (load) { _root.popup._visible = false; } onClipEvent (enterFrame) { if (this.hitTest(_root._xmouse,_root._ymouse,1)) { _root.popup._visible = true; } else { _root.popup._visible = false; } } ---------------------------------------------------------------

    • ベストアンサー
    • Flash
  • UWSC:ポップアップウインドウの操作

    非常に手詰まりで困っております。 散々調べまわったのですが、解決方法が見当たらず質問させていただきます。 すみませんが、どなたかお教えください。 IEの操作で、aタグクリックするとポップアップウインドウが表示されます。 ポップアップされたウインドウに対しての操作が出来ない状況です。 ACWを以下のように使用してアクティブにはしているのですが、元々のウインドウに作用してしまいます。 wid = GETID("オプション設定") acw(wid) IE.Document.All["option_name"].value = "オプション名1" ↑上記「option_name」がポップアップウインドウ内のformに入力したいnameです。 この記述だと、元々のウインドウからnameを探してしまい、ポップアップウインドウを認識しません。 ポップアップウインドウはアクティブにはなっているのですが。。。 どうしたもんでしょうか。

  • 親ウィンドウに表示されているものをポップアップウィンドウに表示

    xmlから取得した人物名を親ウィンドウに表示して、その人物名をクリックするとポップアップウィンドウが表示され、ポップアップウィンドウにクリックした人物名が表示されるプログラムをFLEXを用いて作っているんですがうまくいきません。 どのように改善すべきでしょうか?助言のほどよろしくおねがいします。 (かなりのソースを載せてしまってすいません。) 自分としては、子ファイルに記述してある「parentApplication.linkbutton_id.label」があやしいと考えてます。これで親ファイルのデータを取得することができるのですが、親ファイルの方で<mx:repeater>を使って繰り返し処理を行っているので、繰り返したデータを上記のプログラムで取得するところでおかしくなっているんだと思います。 なおこれは「ruby on rails」と連動させています。 ~親ファイル~ <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="load()"> <mx:Script> <![CDATA[ //インポート import mx.controls.*; import mx.managers.*; //データ取得 public function load():void{ var request:URLRequest = new URLRequest("http://localhost:3000/aisatus.xml"); request.method = 'GET'; var loader:URLLoader = new URLLoader(); loader.addEventListener(Event.COMPLETE, function(e:Event):void { var xml:XML = new XML(e.target.data); repeat_id.dataProvider = xml.aisatu; }); loader.load(request); } //小窓表示 public function kobetu():void{ PopUpManager.createPopUp(this, in_out, true); } ]]> </mx:Script> <mx:Panel title="一覧" x="20" y="20" width="300" height="250" layout="absolute"> <mx:Tile x="20" y="20"> <mx:Repeater id="repeat_id"> <mx:LinkButton id="linkbutton_id" label="{repeat_id.currentItem.name}" click="kobetu()"/> </mx:Repeater> </mx:Tile> </mx:Panel> </mx:Application> ~ポップアップウィンドウ(子ファイル)~ <?xml version="1.0" encoding="utf-8"?> <mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml" x="100" y="20" layout="absolute" width="500" height="300" title="出勤・退勤"> <mx:Label text="社員名:" x="20" y="20"/> <mx:Label text="{parentApplication.linkbutton_id.label}" x="60" y="20" id="employee_id"/> </mx:Panel>

    • ベストアンサー
    • Flash
  • 別ウィンドウをそれぞれ違うサイズで位置指定で開きたい

    現在ウェブサイトを作っておりまして、別ウィンドウをそれぞれ違うサイズで位置指定で開きたいと思い、headの中に以下の記述をしました。 <SCRIPT language="JavaScript"> <!-- w = 800; h = 600; function season2009ss() { x = (screen.width - w) / 2; y = (screen.height - h) / 2; subWin = window.open("look/season2009ss.html","season2009ss","screenX="+x+",screenY="+y+",left="+x+",top="+y+",width="+w+",height="+h+",scrollbars=yes"); } //--> </SCRIPT> <SCRIPT language="JavaScript"> <!-- w = 500; h = 660; function contact() { x = (screen.width - w) / 2; y = (screen.height - h) / 2; subWin = window.open("mail/contact.html","contact","screenX="+x+",screenY="+y+",left="+x+",top="+y+",width="+w+",height="+h+",scrollbars=yes"); } //--> </SCRIPT> 開きたい画面は二つあり、位置は両ウィンドウとも画面の真ん中で、サイズのみ違います。 しかし、この形ですとなぜかウィンドウサイズは両方とも同じになってしまい、狙い通りにいきません。 何が原因なのでしょうか。

  • IEのイベントでのウインドウ位置の取得

    以前に、MdNの「リンクにマウスオーバーするとポップアップで説明が表示される」というサンプルの記述がうまく動作しないという質問で、FairefoxやSafariではその回答でうまく動作するようなのですが、IEの動作がまだ駄目なようなのです。 IEのイベントが発生した時のマウス座標の取得は、Javascriptで、 function OnScreenHelp(x,y){ if(document.all) { /* IEでの処理 */ document.getElementById(strID).style.left = event.x + document.body.scrollLeft + 15; document.getElementById(strID).style.top = event.y + document.body.scrollTop + 0; }else{             /* IE以外の処理 */ document.getElementById(strID).style.left = x + 15 + "px"; document.getElementById(strID).style.top = y + 0 + "px"; } } のような記述になっているのですが、関数OnScreenHelp(x,y)のx,yがbodyの本文内で、event.pageX、event.pageYのようにNN系の記述になっているため、IEではこのx,yの値は使えないので上記のような記述になっているようなのです。上記の記述ではうまくポップアップしてくれないので、 event.xやevent.yの所の記述がまずいのかな?と思って、ちょっと調べてみて、window.event.offsetXやwindow.event.offsetYに変更してやってみたのですが、うまくいきません。ここの所の、IEの記述としては、どのように記述したらよいか分かりかねています。ご経験のある方、ご教示願えたらと思います。 よろしくお願い致します。

  • ウィンドウの位置を変えるには・・・

    初歩的な質問ですみません。 ウィンドウの位置を変えたいのですが、 いろいろ調べてもSetWindowPosしか出てきませんでした。 この関数だと手前に表示されたり、奥に表示されたりと、いわゆるZが変わってしまいます。 X,Yと大きさのみを変えることができる関数とかないんでしょうか?

  • actionscript2.0でMCの切り替えなど

    Flash初心者で勉強中の身なのですがどうか質問させてください。 根本的に間違っていたりできないことをやろうとしていたら申し訳ないです。。 その際にはこう改変した方がいいとのご指示をご教示頂きたいです。よろしくお願いいたします。 attachMovieを使ってライブラリ内のMCをステージに呼び出し、そのMCを押す度にそのMCを切り替えたいと考えています。 ライブラリにはa1,a2,,,a5、b1,b2,,,,b5,c1,d1,e1…という識別子をつけたMCを用意しています。 a-eの横幅は80×80です。 20ずつ間を空けて○1のMCを横一列に配置しました。 _root.attachMovie("a1", "a1",1, {_x: 100, _y: 100}); _root.attachMovie("b1", "b1",1, {_x: 200, _y: 100}); _root.attachMovie("c1", "c1",1, {_x: 300, _y: 100}); _root.attachMovie("d1", "d1",1, {_x: 400, _y: 100}); _root.attachMovie("e1", "e1",1, {_x: 500, _y: 100}); このMCを押すと、MCが数字の大きいものに切り替わる(b1を押すとb2のMCに…で5まで)ようにしたいので、 ひとつひとつを下記のscriptで記述しました。 _root.attachMovie("b1", "b1",1, {_x: 200, _y: 100}); b1.onPress=function(){ b1.removeMovieClip(); _root.attachMovie("b2", "b2",1, {_x: 200, _y: 100}); b2.onPress=function(){ b2.removeMovieClip(); _root.attachMovie("b3", "b3",1, {_x: 200, _y: 100}); b3.onPress=function(){ b3.removeMovieClip(); _root.attachMovie("b4", "b4",1, {_x: 200, _y: 100}); b4.onPress=function(){ b4.removeMovieClip(); _root.attachMovie("b5", "b5",1, {_x: 200, _y: 100});}}}} これをa-e同じことを繰り返しています。 ここからが問題なのですが、 ここで例えば a2,b5,c1,d3,e1 という風に適当に押されてMCが切り替わり、整列させるボタンが押された時、 その数字を参照して 縦に20pxずつ空けながら b5 (空行/4があった場合の行) d3 a2 c1(20pxの空白)e1 と並べ替えたいと思っています。 つまり、a-eが現在どの数字(○1,○2..)なのかを調べ、その数字の若い方から順に縦に配置させたいと考えています。 また、上のc1,e1のように1の数字のMCが2つ以上あった場合は、同じ行に20pxずつ空けて横に配置していきたいのです。 その調べた数字の順に縦と横に並べ替える(新たにステージ上に配置し直す)というルール付けをどういうscriptを書けば上手く行くかが自分ではどうにも分からず、ここから進めない状態です。。 誰がどんな回数押したとしてもそれに準じた整列をして欲しいのですが、そのやり方があるようでしたらどうかご教示頂きたいです。 また、上記の私の書き方では難しいようでしたらそこから改変したものをお教え願いたいです。 分からないことばかりで申し訳ないのですが、何卒よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • 外部テキストファイルより座標データを読み込み、ムービークリップを配置し画像を読み込ませる

    たびたびすみません、追記いたします。 外部テキストファイルから座標を読み込み、ムービークリップを作成し、そのムービークリップに座標を割り当て、画像を読み込ませ、さらにそのムービークリップのロールオーバー時に、あらかじめ作成しておいたテキストボックスに店名と簡単な店舗詳細を表示するというスクリプトを組みたいのですが、なかなかうまくいきません。使いどころとしては地図にそれらのムービークリップを配置し、そのランドマーク画像にロールオーバーしたら店舗詳細が現れるといったものを作りたいです。いろいろなサイトや本を参考にしながら下記スクリプトを作成致しましたが、うまくうごきません。たぶんloadMovieの読み込みのタイミングあたりがおかしいのだと思いますが、ムービークリップを新規に作成するときに、フレームアクションで画像の読み込みとその後の処理をどうやって記述したらよいのかがわかりません。まだまだ知識不足なもので、どなたかご教授頂けないでしょうか?よろしく御願い致します。 ↓フレームアクション↓ function makeMC(n) { for (i=1; i<=n; i++) { _root.createEmptyMovieClip("mc"+myLV["name"+i],i); mmLD = new Object(); mmLD.onData = function(LDOK) { if (LDOK) { _root["mc"+myLV["name"+i]].onPress = function() { _root.t_box.text_a.text = this["text_a"+i]; _root.t_box.text_b.text = this["text_b"+i]; }; _root["mc"+myLV["name"+i]].onRelease = _root["mc"+myLV["name"+i]].onReleaseOutside=function () { _root.t_box.text_a.text = ""; _root.t_box.text_b.text = ""; }; } else { trace("イメージファイルのロード失敗"); } mmLD.loadMovie("images/"+i+".jpg"); }; } } myLV = new LoadVars(); myLV.onLoad = function(TEXTOK) { if (TEXTOK) { makeMC(this.mcNum); for (i=1; i<=this.mcNum; i++) { _root["mc"+this["name"+i]]._x = this["x"+i]; _root["mc"+this["name"+i]]._y = this["y"+i]; } } else { trace("テキストファイルのロード失敗"); } }; myLV.load("mcdata.txt"); ↓あらかじめ作成したムービークリップの詳細↓ インスタンス名「t_box」というムービークリップの中に「text_a」「text_b」というダイナミックテキストが入っております。 ↓外部テキストファイル↓ mcNum=10& &name1=1&x1=20&y1=20&text_a1=サンプル店名(1)&text_b1=店の説明(1)& &name2=2&x2=40&y2=40&text_a2=サンプル店名(2)&text_b2=店の説明(2)& &name3=3&x3=60&y3=60&text_a3=サンプル店名(3)&text_b3=店の説明(3)& &name4=4&x4=80&y4=80&text_a4=サンプル店名(4)&text_b4=店の説明(4)& &name5=5&x5=100&y5=100&text_a5=サンプル店名(5)&text_b5=店の説明(5)& &name6=6&x6=120&y6=120&text_a6=サンプル店名(6)&text_b6=店の説明(6)& &name7=7&x7=140&y7=140&text_a7=サンプル店名(7)&text_b7=店の説明(7)& &name8=8&x8=160&y8=160&text_a8=サンプル店名(8)&text_b8=店の説明(8)& &name9=9&x9=180&y9=180&text_a9=サンプル店名(9)&text_b9=店の説明(9)& &name10=10&x10=200&y10=200&text_a10=サンプル店名(10)&text_b10=店の説明(10) どうかよろしく御願い致します。

    • ベストアンサー
    • Flash

専門家に質問してみよう