タイマーに関して
当サイトのリニューアル作業に時間をあてるため、掲示板の投稿は当分停止させていただきます。
はじめまして
初心者で、わからないことだらけで
教えてください
現在 ラジオボタンのチェックが入ったら
div要素を表示させ
タブみたいなのを作っていて
スタートボタンを押すと
自動でチェックが入り
スライドショーみたいな感じで
DIVを表示させたのですが
イマイチsetIntervalが理解できず
色々なやり方を見てもできず
お力を・・・
test関数を start_btをクリックしたら
タイマーを動かし呼び出すとやっていますが
test関数で どのように
繰り返して
checked,trueをするのかわからず
もちろん 最後までいったら
また最初にもどらなければならいので
アドバイスをよろしくお願い致します。
初心者で、わからないことだらけで
教えてください
現在 ラジオボタンのチェックが入ったら
div要素を表示させ
タブみたいなのを作っていて
スタートボタンを押すと
自動でチェックが入り
スライドショーみたいな感じで
DIVを表示させたのですが
イマイチsetIntervalが理解できず
色々なやり方を見てもできず
お力を・・・
$(function(){
$("#start_bt").click(function(){
setInterval("test()",1000);
});
function test() {
$("#tes0").prop("checked",true);
$("#tes1").prop("checked",true);
$("#tes2").prop("checked",true);
$("#ltes3").prop("checked",true);
$("#tes4").prop("checked",true);
}
$("#start_bt").click(function(){
setInterval("test()",1000);
});
function test() {
$("#tes0").prop("checked",true);
$("#tes1").prop("checked",true);
$("#tes2").prop("checked",true);
$("#ltes3").prop("checked",true);
$("#tes4").prop("checked",true);
}
test関数を start_btをクリックしたら
タイマーを動かし呼び出すとやっていますが
test関数で どのように
繰り返して
checked,trueをするのかわからず
もちろん 最後までいったら
また最初にもどらなければならいので
アドバイスをよろしくお願い致します。
初診者 さん
10月12日 11時34分
こんにちは。
どのようなものを作りたいのか文章だけではなかなか分らないのですが、
setIntervalだけでしたら、単純に指定した時間ごとに処理(関数)を呼び出すだけですので、難しいことはありません。
上記の場合、1秒ごとにtest()を呼び出しています。
今のままだと、一気にチェックが入ってしまいますね。
タイマーを使うのでしたら、1つずつ順番にチェックを切り替えていく感じでしょうか。
おそらく焦点になるのはsetIntervalというよりは、ロジックの組み立て方になると思います。
単に1つずつ順番にチェックすることのループを繰り返す(加えてその時に対応するdivに適当な処理を加える)だけなら、以下の様な方法で繰り返せます。
ざっくりご説明すると、処理の対象にしている値(target)を保持しておき、順に数値を増やしていく→最大値になったら0に戻すというロジックです。
ラジオボタンをチェックする際、参考としてdivに線を入れる効果を加えています。同時に、直前のdivの線を消す処理も加えています(これをやらないと線が残ってしまうためです)。
なお、ここではdivに線を足す効果にしましたが、CSSでできることならなんでも可能です。例えば位置情報を変えるなどすれば、スライドショーにする等もできると思います。
ただ、ラジオボタンを直接クリックされた時の処理が無いので、このあたりは追加で処理を入れる必要がありそうですね。
どのようなものを望まれているか分らないのでここでは書きませんが、参考にしていただければ幸いです。
※もちろん上記スクリプトよりもさらに良いロジックもあるかもしれません。同じような動作でも、より美しいコードというものが存在します。
あと最後に補足ですが、testなどというものではなく、直感的に分りやすい変数名・関数名を付けるとミスしにくくなりますよ☆
どのようなものを作りたいのか文章だけではなかなか分らないのですが、
setIntervalだけでしたら、単純に指定した時間ごとに処理(関数)を呼び出すだけですので、難しいことはありません。
上記の場合、1秒ごとにtest()を呼び出しています。
今のままだと、一気にチェックが入ってしまいますね。
タイマーを使うのでしたら、1つずつ順番にチェックを切り替えていく感じでしょうか。
> もちろん 最後までいったら
> また最初にもどらなければならいので
おそらく焦点になるのはsetIntervalというよりは、ロジックの組み立て方になると思います。
単に1つずつ順番にチェックすることのループを繰り返す(加えてその時に対応するdivに適当な処理を加える)だけなら、以下の様な方法で繰り返せます。
<script>
$(function(){
$("#start_btn").click(function(){
setInterval("nextItem()",1000);
});
})
// 現在の処理対象を保持する変数
var target;
// ラジオボタン/divの数を指定する(自動で取得するような方法もあります)
var labelTotal = 5;
function nextItem() {
if(isNaN(target)){
// targetの値が存在しないとき=初回のみ
target = 0;
}else{
// 直前のdivに対する効果を削除する
$("#div" + target).css("border", "none");
if(target == labelTotal-1){
// 直前のtargetが最後のdivの場合は0に戻す
target = 0;
}else{
// それ以外は次のtargetにするためtarget+1する
target++;
}
}
// targetのラジオボタンをチェックする
$("#radio" + target).prop("checked",true);
// targetのdivに対する効果を付与する(ここでは線)
$("#div" + target).css("border", "1px solid #ff0000");
}
</script>
<ul>
<li><div id="div0">div0</div></li>
<li><div id="div1">div1</div></li>
<li><div id="div2">div2</div></li>
<li><div id="div3">div3</div></li>
<li><div id="div4">div4</div></li>
</ul>
<ul>
<li><input type="radio" name="btn_group" id="radio0">radio0</li>
<li><input type="radio" name="btn_group" id="radio1">radio1</li>
<li><input type="radio" name="btn_group" id="radio2">radio2</li>
<li><input type="radio" name="btn_group" id="radio3">radio3</li>
<li><input type="radio" name="btn_group" id="radio4">radio4</li>
</ul>
<button id="start_btn">start</button>
$(function(){
$("#start_btn").click(function(){
setInterval("nextItem()",1000);
});
})
// 現在の処理対象を保持する変数
var target;
// ラジオボタン/divの数を指定する(自動で取得するような方法もあります)
var labelTotal = 5;
function nextItem() {
if(isNaN(target)){
// targetの値が存在しないとき=初回のみ
target = 0;
}else{
// 直前のdivに対する効果を削除する
$("#div" + target).css("border", "none");
if(target == labelTotal-1){
// 直前のtargetが最後のdivの場合は0に戻す
target = 0;
}else{
// それ以外は次のtargetにするためtarget+1する
target++;
}
}
// targetのラジオボタンをチェックする
$("#radio" + target).prop("checked",true);
// targetのdivに対する効果を付与する(ここでは線)
$("#div" + target).css("border", "1px solid #ff0000");
}
</script>
<ul>
<li><div id="div0">div0</div></li>
<li><div id="div1">div1</div></li>
<li><div id="div2">div2</div></li>
<li><div id="div3">div3</div></li>
<li><div id="div4">div4</div></li>
</ul>
<ul>
<li><input type="radio" name="btn_group" id="radio0">radio0</li>
<li><input type="radio" name="btn_group" id="radio1">radio1</li>
<li><input type="radio" name="btn_group" id="radio2">radio2</li>
<li><input type="radio" name="btn_group" id="radio3">radio3</li>
<li><input type="radio" name="btn_group" id="radio4">radio4</li>
</ul>
<button id="start_btn">start</button>
ざっくりご説明すると、処理の対象にしている値(target)を保持しておき、順に数値を増やしていく→最大値になったら0に戻すというロジックです。
ラジオボタンをチェックする際、参考としてdivに線を入れる効果を加えています。同時に、直前のdivの線を消す処理も加えています(これをやらないと線が残ってしまうためです)。
なお、ここではdivに線を足す効果にしましたが、CSSでできることならなんでも可能です。例えば位置情報を変えるなどすれば、スライドショーにする等もできると思います。
ただ、ラジオボタンを直接クリックされた時の処理が無いので、このあたりは追加で処理を入れる必要がありそうですね。
どのようなものを望まれているか分らないのでここでは書きませんが、参考にしていただければ幸いです。
※もちろん上記スクリプトよりもさらに良いロジックもあるかもしれません。同じような動作でも、より美しいコードというものが存在します。
あと最後に補足ですが、testなどというものではなく、直感的に分りやすい変数名・関数名を付けるとミスしにくくなりますよ☆
馬場誠 さん
10月12日 19時53分