回答編集履歴

4

使い方間違ってたので修正

2017/12/06 01:49

投稿

masaya_ohashi
masaya_ohashi

スコア9206

test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  var blockrain = $(".x").blockrain();
6
6
 
7
- blockrain.touchControls(true);
7
+ blockrain.blockrain('touchControls', true);
8
8
 
9
9
  ```
10
10
 

3

アドバイス追記

2017/12/06 01:48

投稿

masaya_ohashi
masaya_ohashi

スコア9206

test CHANGED
@@ -37,3 +37,49 @@
37
37
  });
38
38
 
39
39
  ```
40
+
41
+
42
+
43
+
44
+
45
+ ### アドバイス
46
+
47
+ 基礎的なことは出来ているようですので、こういった問題にぶつかったときに「どう調べたら解決できるか」を例示しておこうと思います。今回私がこの回答を書くまでの流れは以下のとおりです。
48
+
49
+
50
+
51
+ 1. blockrain?知らんなぁ。リンクの公式サイト見てみよう。
52
+
53
+ 1. ほう、たったこれだけでテトリスがサイトに埋め込めるのか。デモにはコントローラがついてるけどカーソルキーでしか動かないな。
54
+
55
+ 1. **これだけ優秀なコードだ。さすがにタッチ対応もあるだろう。コードの中を「touch」で検索しよう。**[gitのdistフォルダにjsファイル](https://github.com/Aerolab/blockrain.js/blob/gh-pages/dist/blockrain.jquery.js)があるはず。
56
+
57
+ 1. やっぱり[touchに関するコード](https://github.com/Aerolab/blockrain.js/blob/gh-pages/dist/blockrain.jquery.js#L1558)があるじゃないか。でもこの機能はリファレンスには書かれてないな。このコードがどこで使われるか追ってみよう。
58
+
59
+ 1. [ここ](https://github.com/Aerolab/blockrain.js/blob/gh-pages/dist/blockrain.jquery.js#L248)か。autoplayフラグが立ってたら無効化されて、そうでなければ…**どっちでも無効化だと…?**自分で有効化しないと使われない状態になっているじゃないか。基本はキーで操作する想定でデフォルト設定されているようだな。
60
+
61
+ 1. 自力で有効にするには`touchControls`というメソッドを使うようだな。
62
+
63
+ 1. ついでにキーイベントのときはどうなるか探してみよう。**コードの中を「keydown」で検索しよう。**
64
+
65
+ 1. [ここ](https://github.com/Aerolab/blockrain.js/blob/gh-pages/dist/blockrain.jquery.js#L1436)か。どうやら`handleKeyDown`と`handleKeyUp`が処理のようだから、これがどこにリスナ登録されているか探ろう。
66
+
67
+ 1. [ここ](https://github.com/Aerolab/blockrain.js/blob/gh-pages/dist/blockrain.jquery.js#L1551)だな。`document`にリスナ登録しているようだ。対象イベントがkeydown.blockrainってことは[名前空間つきのリスナ登録](https://qiita.com/yuku_t/items/89044987d45ec58ea7c5)だな。後からblockrain関連のリスナだけを解除できるようにする配慮だな。よく出来ているなぁ。
68
+
69
+
70
+
71
+ とこのような流れで読み解きました。解決に重要だったのは以下の点です。
72
+
73
+
74
+
75
+ - gitのdistフォルダに完成品のソースコードが置いてあるのを知っていた
76
+
77
+ - イベントに関するキーワードで検索すれば処理のキモになるところがすぐ見つかることを知っていた
78
+
79
+ - gitのReadMeにあるリファレンスは、更新漏れがあったり、細かいことまで載ってない機能がよくあるということを知っていた
80
+
81
+ - 1ファイルで動くjqueryプラグインくらいソースを追うことをためらわないこと
82
+
83
+
84
+
85
+ こんな感じです。

2

もうちょっと解析した結果

2017/12/06 00:55

投稿

masaya_ohashi
masaya_ohashi

スコア9206

test CHANGED
@@ -15,3 +15,25 @@
15
15
  [https://github.com/Aerolab/blockrain.js/blob/gh-pages/dist/blockrain.jquery.js#L1558](https://github.com/Aerolab/blockrain.js/blob/gh-pages/dist/blockrain.jquery.js#L1558)
16
16
 
17
17
  ここでボタンを配置したり、ボタン押下時の挙動を設定したりしています。これを真似すれば一応自分で配置したボタンでも操作は可能かと思いますが、元々touchControlsというボタンを配置して操作もやってくれる処理があるのでそちらを使うほうが簡単かと思います。
18
+
19
+
20
+
21
+ もしKeyDown、KeyUpのイベントを使ってやりたいならこのあたりのコードがキー処理を登録しているあたりです。
22
+
23
+ [https://github.com/Aerolab/blockrain.js/blob/gh-pages/dist/blockrain.jquery.js#L1436](https://github.com/Aerolab/blockrain.js/blob/gh-pages/dist/blockrain.jquery.js#L1436)
24
+
25
+ これを見る感じ、blockrainは`document`にリスナ登録しているようですので、こうすれば動くっぽいです。
26
+
27
+ ```JavaScript
28
+
29
+ $("#circle-left").on("click", function(){
30
+
31
+ var left = $.Event("keydown");
32
+
33
+ left.which = 37;
34
+
35
+ $(document).trigger(left);
36
+
37
+ });
38
+
39
+ ```

1

該当コードの提示

2017/12/06 00:32

投稿

masaya_ohashi
masaya_ohashi

スコア9206

test CHANGED
@@ -7,3 +7,11 @@
7
7
  blockrain.touchControls(true);
8
8
 
9
9
  ```
10
+
11
+
12
+
13
+ 具体的なコードの箇所はここです。
14
+
15
+ [https://github.com/Aerolab/blockrain.js/blob/gh-pages/dist/blockrain.jquery.js#L1558](https://github.com/Aerolab/blockrain.js/blob/gh-pages/dist/blockrain.jquery.js#L1558)
16
+
17
+ ここでボタンを配置したり、ボタン押下時の挙動を設定したりしています。これを真似すれば一応自分で配置したボタンでも操作は可能かと思いますが、元々touchControlsというボタンを配置して操作もやってくれる処理があるのでそちらを使うほうが簡単かと思います。