Tag { javascript } 一覧

[haXe][js] “Flasher だけど js 案件増えてきたなー” みたいな人は haXe かじってみてもいいんじゃね?

Category:{ haXe, javascript }  Tag:{, , , } Comments:{ No Comments }
Posted:{ 2012.01.19 03:26:23 }

最近ちょくちょく haXeで js を試しているのでメモ。
※haXeは、エックス(とかヘックス)とか呼ばれてる。

そもそも haXe って?

haXe ってなに?って人のためにざっくり説明。
haXe は1言語で、Flash (AS2/AS3) 、 js 、PHP、C++、NekoVM、にかきだせる言語。(.hxファイルをコンパイラオブションで出し分ける)
haXe – haXe の紹介

記述は AS3 とか JAVA に似ていて、サーバー側もクライアント側も1言語でかけるってのが、特にメリット(かな?)。
※「1言語」ってのは「ワンソース」と同義ではないです。念のため。

特に、 haXe に興味を持った個人的理由は下記。
・(私自身が) オブジェクト指向 (AS3 or JAVA) に慣れている。
・ js に慣れていない。
・ js を仕事で書くことになった。
・ js でも AS3 みたいに継承とか書きたい。(prototype ふぁっこふ)
・ js は、コンパイルチェック(や型チェック)がないからデバッグがめんどい。
・いつも使ってる FDT が haXe の開発に対応している。(FlashDevelopも対応しているとのこと)

これはやってみるしかない(・∀・)

という感じ。

このご時世で「Flasherだけど js 案件増えてきたなー」みたいな人は、 haXe かじってみるのはあり?かもしれない。
「すべての道はインタラクションデザインに通ず」。

開発環境の準備

とりあえず無料で整う。

Mac なら FDT5 Free
Win でも FDT5 Free or FlashDevelop
※ほかにもあるのかな?

それぞれのIDEのhaXeチュートリアルをみればいいんじゃないかな。

FDT での haXe js プロジェクトチュートリアル動画は下記。
[1] haXe in action, check out a sample haXe project in FDT 5
[2] Complex HaXe example

ということで、以下、 js を書きだすメモ
(とくに js に限ったものではないメモも混じっています)

(続きを読む…)

[haXe][js] haXe で jQuery を使う方法

Category:{ haXe, javascript, jQuery }  Tag:{, , } Comments:{ 1 Comment }
Posted:{ 2012.01.09 10:02:48 }

「js の prototype なじめないんです!」
extendsとかしたいんです!」
静的型付けじゃないと、安心してねれないんです!(´・ω・`)」

って病気の人いませんか?(私です)

「じゃ haXe で js やってみればいいんじゃね?」

でもライブラリ (jQueryとか) どうやって使うんだろ?」

。。ということで、haXe で jQuery を使う手順メモです。

※そもそもhaXeって何?って方はこちら
※haXeの開発環境 は FDT5 を使用
※haXe 自体はインストール済という前提で書いていきます。

jQueryExtern を利用

jQueryExtern という、jQueryラッパーライブラリがあります。
※いわゆる「コンパイルを通すためだけのjQuery型指定のみが記述されたライブラリ」みたいな物。
この利用方法は下記2つです。

[利用方法 1]

jQueryExternForHaxe [GitHub]からダウンロード。

解凍したフォルダ内、下記2ファイルをプロジェクト ソースフォルダにコピー

  • JQuery.hx
  • jQuery フォルダ

これでパスが通りました。

※ソースフォルダじゃなく、任意のフォルダ(例えば”Hoge/以下”)に配置したい!という場合には、.hxml に -cp Hoge を追記するとパスが通ります。

[利用方法 2]

haxelib に jQueryExtern を installします。

ターミナルで

$ haxelib install jQueryExtern

と打つだけでインストールできます。

※ 下記のようなメッセージが出たら haxelib のセットアップがまだ済んでいないので、haxelib setupを参考に、済ませたあと再度インストールしましょう。
This is the first time you are runing haxelib. Please run haxelib setup first

次に、haxelibにインストールしたjQueryExternにパスを通します。
.hxml に -lib jQueryExternを追記。

jQueryを動かしてみる

jQueryExtern (というかhaXeのJSライブラリはすべて?) は、コンパイルを通すためにあくまで型を指定しているだけ、なので、実際のjQueryをダウンロードし、htmlからリンクして実態を用意しておきます。

次に .hx ファイルで

import JQuery;

とインポートすると、例えば下記のようにnew jQuery() を利用できます。

button1 = new JQuery("#button1");

サンプル

動作サンプル

ソース全体としては下記。

index.html

1
2
3
4
5
6
7
8
9
10
<!DOCTYPE html>
<html lang="en">
	<head>
		<title>TestHaxeJQuery</title>
		<script type="text/javascript" src="js/jquery-1.7.1.js"></script>
	</head>
	<body>
		<div id="button1" style="width:150px;height:30px;background-color:#aaa;">button1</div>
		<script type="text/javascript" src="js/App.js"></script>
</html>

Main.hx

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import JQuery;
import js.Lib;
class Main {
 
	var button1:JQuery;
 
	static public function main():Void {
		new Main();
	}
 
	public function new(){
		js.Lib.window.onload = onLoaded;
	}
 
	/**
	 * window onloaded
	 */
	private function onLoaded(e:Dynamic){
		setButton();
	}
 
	/**
	 * button setting
	 */
	private function setButton():Void{
		button1 = new JQuery("#button1");
		button1.cssSet("cursor","pointer");
		button1.click(onButtonClick);
		button1.hover(onButtonRollOver);
		button1.mouseout(onButtonRollOut);
	}
 
	/**
	 * button events
 	 */	
	private function onButtonClick():Void{
		js.Lib.alert("clicked");
	}
 
	private function onButtonRollOver():Void{
		button1.cssSet("background-color","#ccc");
	}
 
	private function onButtonRollOut():Void{
		button1.cssSet("background-color","#aaa");
	}
}

最後に

それ違うよ!などツッコミありましたらぜひよろしくお願いします。

参考

Using jQuery in haXe | Andy Li's Blog
haXe in action, check out a sample haXe project in FDT 5
Complex HaXe example
八角研究所 : Series: クライアント(ブラウザ)もサーバも同一言語で書ける haXe を使ってみる «

[as3][js] FlashでBitmapDataをbase64エンコードしjs経由でhtmlに表示する

Category:{ flash, javascript }  Tag:{, } Comments:{ No Comments }
Posted:{ 2011.11.11 01:32:52 }

flash上の任意のDisplayObjectを
Bitmap化して、ByteArrayにし、base64変換し、
その文字列をExternalInterface経由でjavascriptに受け渡して、
html上に表示するサンプルを作って見ました。

[sample] flashでBitmapDataをbase64エンコードし、js経由でhtmlに表示する

どんな場合に有効な手法?

自分もいまいち使いどころがぴんと来ませんが、
jsでは生成できないようなイメージを動的にflashで作成して、htmlに渡すなど。でしょうか。

例えば、以前 jsdo.it で作成したトランスメタルジェネレータ HTML5版では、
flashでサウンドの波形画像を作成し、html上に表示しています。

Trance Metal Generator HTML5 α ver ( トランスメタルジェネレーター HTML5アルファ版) – jsdo.it – share JavaScript, HTML5 and CSS

as側のサンプル

下記はDisplayObjectを渡すとpng形式のbase64文字列を返してくれるfunctionサンプルです。

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
31
import com.adobe.images.PNGEncoder;
import mx.utils.Base64Encoder;
/**
* DisplayObjectをBase64文字列(png)に変換.
* @param target  画像化したいDisplayObject
* @param w 幅
* @param h 高さ
*/
    private function convertBase64(target : DisplayObject, w : Number = NaN, h : Number = NaN) : String
    {
        w = (isNaN(w)) ? target.width : w;
        h = (isNaN(h)) ? target.height : h;
 
        var bmd : BitmapData = new BitmapData(w, h, true, 0x00ffffff);
        bmd.draw(target);
        var base64 : Base64Encoder = new Base64Encoder();
        base64.encodeBytes(PNGEncoder.encode(bmd));
        var str : String = base64.toString();
        bmd.dispose();
        var str3:String = "";
        var str2:String = str.toString();
        var len:uint = str2.length;
        for (var i:uint = 0; i < len; i++)
        {
            var sub:String = str2.substr(i, 1);
            if (sub == "\n")
                continue;
            str3 += sub;
        }
        return str3;
    }

gistにも同じものをアップしています。
DisplayObjectをBase64文字列(png)に変換 — Gist

js側のサンプル

flash側からExternalInerfaceで下記のjsメソッドにbase64文字列を渡してあげるとhtml上に画像が表示されます。

1
2
3
4
5
6
7
/* ※要jQuery */
<script type="text/javascript">
    function setBase64Image(str,w,h){
        var dragItem = $("<img src='data:image/png;base64," + str + "' width='"+w+"px' height='"+h+"px'  />");
        $(".[任意のDIV名など]").append(dragItem);
    }
</script>

最後に

その他、有効なユースケースがあったらぜひ@itozに教えて頂けると喜びます。


レンタルサーバー豆知識