[ カテゴリー » Programぽいの » flash ]

Flashで余所のページに飛んで戻ったときに最初っから表示しないようにする

例えば商品紹介Flashで、
1.Flash内でカテゴリーを選択
2.カテゴリーごとの商品が一覧表示される
3.商品を選ぶと商品購入ページに飛ぶ
4.ブラウザの戻るボタンでもどる
5.Flashが最初から再生される
6.再度カテゴリーを選択
...
これがまあ普通だった訳だが。
deep linking なる手法で解決する方法が発明されていたようで。

初めて見たのは、…って、紹介しようとしたら、かわっとるがや。
やめちゃったのか…なにか問題ありなの?やめてよ。。

やめないで~。やめないで~。やめて~。…やめるのをやめて~。っていうやりとりを思い出した。。
(O橋K泉議員辞職会見より)

基、上記フローの、「4」で「2」に戻りたい、という話。
こういうのLink を使うのが通例みたいだけど、
今回はもっと軽く実現したい。
というわけで、コレ。
Flashから任意のJavaScriptを走らせる+結果を受け取る!Link

受け取り
var locationHash:String = String(ExternalInterface.call("function(){return location.hash}"));
var categoryId:int = int(locationHash.substr(1));
言うまでもないが、文字列として使うならint()は不要。

カテゴリー切り替え時
ExternalInterface.call("function(h){location.hash=h}",categoryId);
こうしておくと、URLの最後に"#123"とかついて、他のページから戻ってきたとき受け取れる。


ここで、IEユーザーに朗報。
"swfobject.js"を使ってswfを配置すると、
var locationHash:String = String(ExternalInterface.call("function(){return location.hash}"));
trace(locationHash);

null
になって誤作動してくれるぞorz...

ありがとうIE、Microsoftバンザ~イ┐(’Д`)┌

"AC_RunActiveContent.js"だとダイジョぶみたいだけど。

— posted by たか at 07:29 pm   pingTrackBack [0]

 

Flashから任意のJavaScriptを走らせる+結果を受け取る!

Flashから任意のJavaScriptを走らせるLink
で書いたのはAS2のお話。
AS3では、ExternalInterfaceクラスを用いて外部スクリプトとやりとりする。
なんと、この方法だと、JavaScriptから結果を受け取ることもできるのだ!
なので、気軽に「swfを配置しているhtmlのURLを取得」とかできてしまう。

var locationHref:String = String(ExternalInterface.call("function(){return location.href}"));
ああ、ネタ元どっか行っちゃった。ゴメンナサイませ、ネタ元様。。

JavaScript as

— posted by たか at 07:20 pm   pingTrackBack [0]

ステージ上に配置していないムービークリップのフレームアクション内文字列の置換

「編集」メニューの「検索して置換」を利用すれば、ステージ上に配置してあるムービークリップのフレームアクション内の文字列を一括置換できる。

、、、っが。ライブラリに置いておいて、リンケージを使ってステージ上に読み込むような場合、ライブラリ内のムービークリップは対象にならない…orz

Flash拡張機能(jsfl?)でなんとかならないかと探したが、どうやら、フレームを指定してアクションスクリプトの文字列を取得して…と、全フレーム対象とするのはムズそう。

…っていうか、これって需要無いのかな?まったく検索ヒットしなかったよ・・・。



という訳で、妥協案にて解決したので、紹介しておく。

ステージ上に配置済みのムービークリップしか対象にならないのなら、配置してしまえばよいのだ。
というわけで、ムービークリップ配置用のダミーなシーンを追加した。
そこに、ライブラリからひとつひとつ、コツコツと、ドラグドロップを繰り返し…、
すべての配置が終わったら、「編集」メニューの「検索して置換」で一括置換!
あとは、シーンごと削除するもよし、シーン内に
gotoAndStop(1,"シーン 1");
とでもして表示されないようにしておいて、将来の再利用に備えるもよし、かと思われ。

もっと良い方法があるんだろうけどなー。

— posted by たか at 09:13 pm   pingTrackBack [0]

actionscript小技集(多分AS3) vol.1

◎任意の箇所でRoot取得
var _rt = MovieClip(root);
ただし、クラスのコンストラクタでは使用不可みたい。
なので、仕方なくinit()メソッドでも作って、呼び出してもらうか。

◎オンマウスとかで、最前面にもっていく処理。
private function onMouseOver(e:MouseEvent) {
  e.target.parent.setChildIndex(e.target, e.target.parent.numChildren - 1);
}

◎クラス名を文字列で指定(ライブラリ画像のリンケージ設定後、連番取得用)
num = 1; //for文とか
var MyClass:Class = Class(getDefinitionByName("Photo" + num));
var myBmd = new MyClass(0, 0); // ※1
※1:ライブラリ画像だとBitmapDataクラスの子クラスになるので、引数が2つ必要(ダミーで0を入れとけば良い?)

◎「原点から任意の座標までの線分」のX軸からの傾き角度を求める Math.atan2
var rad = Math.atan2(y, x);
って、↓の省略形、ってことか…?
var rad = Math.atan(y / x);

◎Tweenerで「着色」テュイーン!…いや、トィーン…違う、トゥイーン。
import caurina.transitions.properties.ColorShortcuts;
ColorShortcuts.init();

Tweener.addTween(target_mc, {_color: 0xffcc00});
//ついでに「明度」トゥイーン
Tweener.addTween(target_mc, {_brightness: 0.5}); // 多分 0.0 <= _brightness <= 1.0
importとinit()が必要なり。

as

— posted by たか at 12:02 pm   pingTrackBack [0]

_parentの用法

有名なのかもシレンが。。

例えば、あるムービークリップ(my_mc)で
this.fnc1 = function() {
  trace("fnc1 is called.");
};
my_btn.onRelease = function() {
  _parent.fnc1();
  trace("this:"+this);
  trace("parent:"+_parent);
};
としてボタンをクリックすると、
this:_level0.my_mc.my_btn
parent:_level0

という訳で、修正版。
this.fnc1 = function() {
  trace("fnc1");
};
my_btn.onRelease = function() {
  this._parent.fnc1();
  trace("this:"+this);
  trace("parent:"+this._parent);
};
これで
fnc1 is called.
this:_level0.my_mc.my_btn
parent:_level0.my_mc
こうなる。愛でたし。

as

— posted by たか at 02:19 pm   pingTrackBack [0]

T: Y: ALL: Online:
ThemeSwitch
Created in 0.1210 sec.
prev
2017.9
next
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
 
blogBar
Firefox3 Meter