-->

2015年05月

IE11では、iOSやAndroidとは違う方法でマルチタッチに対応している。マウス、タッチ、デジタイザペンをまとめたポインタイベントが用意されている。
マウスイベントのmoousedown、mouseup、mousemove、mouseleaveに対応するpointerdown、pointerup、pointermove、pointerleaveが用意されている。
これらのイベントはPointerEventオブジェクトを受け取る。
PointerEventオブジェクトはMouseEventオブジェクトを継承している。
pointerTypeプロパティでマウス、タッチ、デジタイザペンを区別して、pointerIdプロパティでマルチタッチの複数タッチを区別することができる。
詳しくは、ここでw

まず、ポインターイベントに対応しているかどうかは、

if (!window.PointerEvent) {
	alert("ポインターイベントに対応してない");
	return;
}

で判定する。

IEのタッチ操作での規定の操作を無効にするためにCSSに

	touch-action:none;

を追加する。

あと、コンテキストメニューや長押しで出るマークを出なくする。

// コンテキストメニューを無効にする
$("#canvas").on("contextmenu",(e) => {
	e.preventDefault();
});
// 指長押しで出るマークを無効にする
$("#canvas").on("MSHoldVisual",(e) => {
	e.preventDefault();
});

あとは、マウスイベントと同じようにハンドラを登録して、PointerEventオブジェクトで入力デバイス判定して処理すればOK。

押してるところに○を表示するプログラムソースをアップしておく。

iOSやAndorid、IE10に対応したのもアップしておく。


このエントリーをはてなブックマークに追加

ScalaをWindowsにインストールしてみただけだ。
インストーラもあるので難しいものでもないはずなんだが、
デフォルトのインストール先にインストールすると動作しない。
"c:\scala"とかにインストールしないとダメだ。

ちゃんと調べたわけではないが、"Program Files"のスペースが問題なんじゃないかと思う。


このエントリーをはてなブックマークに追加

LINQの拡張メソッド一覧と、ほぼ全部のサンプルを作ってみました。 - 地平線に行く


ありがたや〜w
わかりやすく、まとまってます。Microsoftのヘルプだとほしいメソッドが探しにくかったんだよな。


このエントリーをはてなブックマークに追加

[C#] Linqと再帰でファイルの一覧表示(2)のLinqのクエリ式をメソッド構文で書き直してみた。

Func<DirectoryInfo, IEnumerable<string>> FileListUp = null;	// (1)こうしておかないとエラーになる
FileListUp = dirInfo =>
{
    return dirInfo.GetDirectories().Select(d => FileListUp(d))
        .SelectMany(f => f)			// (2)ここ、なんか他の書き方ないのかな?
        .Concat(dirInfo.GetFiles().Select(f => f.FullName));
};

var di = new DirectoryInfo(".");

var list = FileListUp(di);

// 表示する
list.ToList().ForEach(s => Console.WriteLine(s));

(2)の部分のなんか微妙なんだけど、他の書き方ないのかな?


このエントリーをはてなブックマークに追加

[C#] Linqと再帰でファイルの一覧表示でやった一覧の出し方、
こっちの方がよさそう

Func<DirectoryInfo, IEnumerable<string>> FileListUp = null;    // (1)こうしておかないとエラーになる
FileListUp = dirInfo =>
{
    return (from d in dirInfo.GetDirectories()
             from f in FileListUp(d)
             select f)
              .Concat(from f in dirInfo.GetFiles()
                      select f.FullName);
};

var di = new DirectoryInfo(".");

var list = FileListUp(di);		// ← (2)

// 表示する
list.ToList().ForEach(s => Console.WriteLine(s));	// ← (3)

なんでいいかというと、
感覚的に(2)で一覧が作成されそうだけど、遅延評価されて実際は(3)のToList()のタイミングで作成される。(2)のあとにlistに対してLinqを行ったりしたら、ToList()したあとに同じことをするよりも速く処理(高速に)されたする。

たとえば、(3)のところを

list.Take(10).ToList().ForEach(s => Console.WriteLine(s));	// ← (3')

に変えると、一覧の最初から10個が表示されるのだが前の[C#] Linqと再帰でファイルの一覧表示のFileListUpで同じことをやるよりも速く終わる。


このエントリーをはてなブックマークに追加

↑このページのトップヘ