質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

1回答

3068閲覧

1度だけ実行されるように制限をかけたいです。

eveplaya

総合スコア9

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

1グッド

0クリップ

投稿2016/04/10 13:58

編集2016/04/10 14:00

※初心者のため、表現が適切でない部分があるかもしれません。恐縮ですがその場合はご指摘頂けますと幸いです。

■前提
MILKCOCOAというツールを使い、ダーツが行えるインタラクティブサイトを作りたいと思っています。
※簡単に言うと、スマートフォンの重力センサ情報をpcに飛ばし、pc画面に変化を加えるものです。
▼(ご参考)説明ページ
http://blog.mlkcca.com/frontend/darts-map/

■質問
スマートフォンの重力センサが一定値を超えると、YAHOO!のページに飛ばすように記載しているのですが、
繰り返しの指令を出していないのにYAHOO!のページが際限なく何ページも出てきます。
これを、新しいタブに1度表示させれば終わる(2つ目以降のタブが開かないようにする)ようにしたいです。

グーグルで調べようとしたところ、setTimeoutを使えば良いのかな?
と思ったのですが、正しく動作してくれず・・

また、今後のためどのように(どのような考え方?で)調べたらよいのかも教えて頂けると嬉しいです。

▼コード一覧(計4つ)

pc側html(index1.html)

<img id="image" src=" http://blog.mlkcca.com/img/post/blg-20150826-darts-map-top.png" alt="スマートフォン">

<script src='https://cdn.mlkcca.com/v2.0.0/milkcocoa.js'></script>

<script>
var milkcocoa = new MilkCocoa("vueilzvx866.mlkcca.com");
var dartsDataStore = milkcocoa.dataStore("darts");
var divObj = document.getElementById("img");
</script> <script src="main-pc.js"></script></body>

PC側JS(main-pc.js)

dartsDataStore.on("send", function(e){
if(e.value.message === "init"){
gameStart(); // ゲーム開始
}
});
dartsDataStore.on("send", function(e) {
if (e.value.message === "start") {
divObj.innerHTML = "<img src='http://resort.travel-way.net/gif/move/new/darts_3.gif' />";
// 矢を投げるアニメーション
window.open("http://www.yahoo.co.jp/");
}
});

SP側html(index.html)

<body> <div id="output"> <label id="text_label">Welcome!</label> </div> <script src='https://cdn.mlkcca.com/v2.0.0/milkcocoa.js'></script> <script> var milkcocoa = new MilkCocoa("vueilzvx866.mlkcca.com"); var dartsDataStore = milkcocoa.dataStore("darts"); </script> <script src="main-sp.js"></script> </body>

SP側JS(main-sp.js)

dartsDataStore.send({
message: "init"
});
var param = ["x", "y", "z"];
var TH = 10;
window.addEventListener("devicemotion", function(e) {
for (var i=0; i<param.length; i++) {
if (Math.abs(e.accelerationIncludingGravity[param[i]]) > TH) {
// 投げた!
document.getElementById('text_label').innerHTML = "send the arrow";

dartsDataStore.send({ message: "start" }); }

}
});

mhashi👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

milkcocoa についてはわからないですが、コード見た感じだと、

x,y,z のそれぞれが TH を超えていればメッセージが送られるので、x,y,z全部がしきい値を超えていれば一度のイベントで3回ページが開かれるのではと思います

devicemotion イベント自体を何度も起こしたくないなら、 devicemotion イベントのリスナ内で removeEventListener をすればよいかと思います

javascript

1window.addEventListener("devicemotion", function fn(e) { 2 window.removeEventListener("devicemotion", fn) 3 // 略 4}

投稿2016/04/10 14:31

ryls-nmm

総合スコア633

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

eveplaya

2016/04/10 15:30

ありがとうございます! 上記を埋め込むと、今度は動かなくなったので removeEventListnerをもっと調べてみます。教えて頂きありがとうございました。
ryls-nmm

2016/04/10 15:39

`removeEventListner` は `addEventListener` で登録したリスナを取り除くものです 1回目の実行時にリスナを取り除いてしまうことで、2回目のイベントが発生してもリスナがないので処理が行われないというものです 動かなくなったというのが一回も実行されなくなったということなら、埋め込みミス(removeEventListener の行だけ追加して fn の名前をつけてない) とかかと思います
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問