[解決済み】ボール(オブジェクト)が縮んだり消えたりしないのはなぜですか?
質問
http://jsfiddle.net/goldrunt/jGL84/42/ これは、このJSフィドルの84行目からです。141-146行目のコメントを解除することで、ボールに3種類の効果を適用することができます。バウンス'エフェクトはその通りに動作しますが、'asplode'エフェクトは何もしません。asplode関数の中に'shrink'関数を含めるべきでしょうか?
// balls shrink and disappear if they touch
var shrink = function(p) {
for (var i = 0; i < 100; i++) {
p.radius -= 1;
}
function asplode(p) {
setInterval(shrink(p),100);
balls.splice(p, 1);
}
}
解決方法は?
あなたのコードにはいくつかの問題があります。
まず、定義にあります。
var shrink = function(p) {
for (var i = 0; i < 100; i++) {
p.radius -= 1;
}
function asplode(p) {
setInterval(shrink(p),100);
balls.splice(p, 1);
}
}
asplode
の中のスコープにローカルです。
shrink
のコードからはアクセスできません。
update
を呼び出そうとしているところです。JavaScriptのスコープは関数ベースなので
update
を見ることはできません。
asplode
の中に入っていないため
shrink
. (
コンソールで
のように、エラーが表示されます。
Uncaught ReferenceError: asplode is not defined
.)
まず最初に
asplode
の外側
shrink
:
var shrink = function(p) {
for (var i = 0; i < 100; i++) {
p.radius -= 1;
}
}
function asplode(p) {
setInterval(shrink(p),100);
balls.splice(p, 1);
}
しかし、あなたのコードには、この質問の範囲外ですが、さらにいくつかの問題があります。
-
setInterval
は関数を想定しています。setInterval(shrink(p), 100)
原因setInterval
を取得する。 戻り値 の 即時起動型shrink(p)
. あなたはおそらくsetInterval(function() { shrink(p) }, 100)
-
あなたのコード
for (var i = 0; i < 100; i++) { p.radius -= 1; }
おそらく、あなたが考えているようなことはしていないでしょう。これはすぐにデクリメント演算を100回実行し その後 を視覚的に表示します。新しいサイズになるたびにボールを再描画したい場合は、個別のタイミングでコールバック内で個々のデクリメントを実行する必要があります(たとえばsetInterval
の操作)。 -
.splice
はオブジェクトではなく、数値インデックスを期待します。オブジェクトの数値インデックスを得るにはindexOf
:balls.splice(balls.indexOf(p), 1);
-
インターバルが初めて実行されるころには
balls.splice
文はすでに起こっています(正確には約100ms前に起こっています)。これは、あなたが望んでいることではないのでしょう。その代わり、デクリメント関数を用意しsetInterval
を実行し、最終的にballs.splice(p,1)
の後にp.radius == 0
.
関連
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] 2つのJavaScriptオブジェクトのプロパティを動的にマージするにはどうすればよいですか?
-
[解決済み] HTML5のlocalStorageにオブジェクトを格納する方法は?
-
[解決済み] JSONPとは何か、なぜ作られたのか?
-
[解決済み] JavaScriptのオブジェクトの配列からidでオブジェクトを検索する
-
[解決済み] なぜ ++[[]][+[] +[+[]] は "10" という文字列を返すのでしょうか?
-
[解決済み] セルフクローズスクリプトエレメントが機能しないのはなぜですか?
-
[解決済み】なぜHTMLは "chucknorris "を色と見なすのか?
-
[解決済み】オブジェクトの配列を文字列のプロパティ値でソートする
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】document.getElementByIDは関数ではありません。
-
[解決済み】JavaScriptのinnerHTMLで要素が更新されない
-
[解決済み] React with ES7: Uncaught TypeError: Cannot read property 'state' of undefined [duplicate] (未定義のプロパティ'state'を読み込むことはできません。
-
[解決済み】WebpackとBabelで「このファイルタイプを扱うには適切なローダーが必要な場合があります。
-
[解決済み】Javascript - ERR_CONTENT_LENGTH_MISMATCH
-
[解決済み】 Uncaught Reference Error: stLight is not defined (in Chrome only)
-
[解決済み】Uncaught TypeError: 未定義のプロパティ 'msie' を読み取れない - jQuery tools
-
[解決済み】HTMLの最初の行に予期しないトークン<がある。
-
[解決済み】module.exports "モジュールが定義されていません"
-
[解決済み】なぜ私のボールは消えてしまうのですか?[終了しました]