すみません非常に困っております。
setMove()の中のspeedを関数の外に出したいのですが、
どのようにすればよろしいでしょうか。
引数などを使用すればいいのだとおもいますが、
やり方がわからず。申し訳ございませんがご教示のほど
よろしくお願いいたします。
var target = $('ul#mainNavi li').find('.light');
var speed = 1000;
var t = setInterval(setMove() , speed);
function setMove(){
target.animate({left:600} , 1000 , 'swing' , function(){
$(this).css('left' , -118);
speed = 3000;
});
}
No.3ベストアンサー
- 回答日時:
いささか無駄が多いですが、こんなのはどうでしょうか
function setMove() {
var target = $('ul#mainNavi li').find('.light');
target.animate({left: '600'}, 1000, 'swing');
target.animate({left:'-118'}, 1);
target.animate({left: '+=0'}, {duration:3000, complete:setMove});
}
setTimeout(setMove, 1000);
No.2
- 回答日時:
A No1です。
>一度目はspeedが1000で、2度目以降に3000にするために、
>変数の上書きが必要だと思うのですが、
変数を上書きすれば変数の値は変わりますが、setInterval()でのインターバルはその文が実行された時の値で設定されます。
関数を実行する度に変数値が参照されるわけではありませんので、上書きしてもご主旨にそった結果にはならないと思います。
一方で、setIntervalの間隔は最初に関数が実行されるまでのタイムラグにもなりますので、即座に実行してから一定時間ごとに繰り返したいときなどに同様の処理が必要になると思います。
実現する方法はいろいろあると思いますが、
◇1回目をsetTimeoutで呼び出して、2回目以降をsetIntervalで実行する。
(delayを無くすと、上記の「一度実行してから繰返し」になります)
var target = $('#test');
var t;
animate(1000, 3000, setMove);
function animate(delay, interval, func){
setTimeout(function(){
func();
t = setInterval(func, interval);
}, delay);
}
◇jQueryを利用なさっているようですが、コールバックの概念をsetMoveにも付加える
(jQueryのコールバックと別に定義しているので、わかりにくくなりますが)
var target = $('#test');
var t, speed = 1000;
setTimeout(function(){
speed = 3000;
setMove(function(){ t = setInterval(setMove, speed); });
}, speed);
function setMove(func){
target.animate({left:600} , 1000 , 'swing' , function(){
$(this).css('left' , -118);
if(typeof func === "function") func();
});
}
などなど…
上の例は、自分ながら、あまり整理されたものになっていないですね。
もっと良い書き方がありそうな気がしますが、取りあえずで申し訳ありません。
No.1
- 回答日時:
ご質問の主旨がよくわかりかねますが…
ご提示のコードが全体を示していると仮定してよいのなら、変数speedのスコープはすでに関数の外になっています。(当然、関数内でも使用できますが)
>setMove()の中のspeedを関数の外に出したいのですが、
の意味が、 speed=3000; という文を関数の外に出したいという意味であるなら、ほぼ同じ処理としてmain側で
var target = $('ul#mainNavi li').find('.light');
var speed = 1000;
var t = setInterval(setMove() , speed);
speed = 3000;
として、関数内の1行を削除しても、同様の処理となるでしょう。
コードが違うので、ちゃんと比較すれば異なりますが、ご提示のコードが全てだとすれば、実行の順序は保たれていますので(タイミングや再定義の回数等は違いますが処理の流れに影響がないので)同等ということができると思います。
ご質問の意味を取り違えていましたら、無視してください。
この回答への補足
一度目はspeedが1000で、2度目以降に3000にするために、変数の上書きが必要だと思うのですが、どのようにやればいいかわからない状態です。
補足日時:2013/05/29 20:33お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- JavaScript スマフォではボタンを表示させたくない 2 2023/01/20 14:26
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript jQueryでのレスポンシブが綺麗に動かない 3 2022/06/21 11:08
- JavaScript 正規表現について質問です。条件に合う場合はtrueを返したい 3 2022/10/06 23:02
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
jqueryuiのdialog
-
jQuery Easy Display Switch wi...
-
idを使わずにonclickで自身の要...
-
ajax反映後のjqueryが動かない
-
コードをスマートにさせたい。
-
javascript(jQuery)でセル内...
-
クッキーを発行するドメイン名...
-
jQueryを使用して以下のような...
-
jslintのエラーについて質問
-
functionから別のfunctionを実...
-
関数でy=g(x)のgとは何の略です...
-
Boolean型配列中のTrueの有無を...
-
ActiveXobjectが作成できない
-
JavaScript window.openで開く...
-
C#テキストボックスの文字を配...
-
<a>タグのテキストを取得
-
スマフォではボタンを表示させ...
-
同じIDで定義した要素の配列を...
-
翌月を取得するGASが分かりません
-
なぜmatchメソッドがエラーにな...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
functionから別のfunctionを実...
-
idを使わずにonclickで自身の要...
-
関数でy=g(x)のgとは何の略です...
-
jslintのエラーについて質問
-
jQueryの :not() .not() が有効...
-
クリックすると上に開くアコー...
-
jQueryのプラグイン「Skitter」...
-
関数名をテキストから読み込む...
-
小数点以下を5刻みで表示
-
XMLHttpRequestでキャッシュを...
-
jQueryでzipを解凍読み込みする...
-
Matlabで自作関数をオーバーロード
-
javascript(jQuery)でセル内...
-
要素名がスペースを含む場合のj...
-
ページ内に複数表がある場合のT...
-
処理前の「お待ちください」
-
JS 頭文字が大文字について
-
HTML5でファイルドラッグ&ドロ...
-
Javascriptリアルタイムエラー...
-
getElementByIdを使用したグロ...
おすすめ情報