忍者ブログ

からすまる日誌 JavaScript

応用2(12) ストップウォッチ

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

応用2(12) ストップウォッチ

ストップウォッチをつくる
 

ストップウォッチで測る秒数は変数に入れるが
それは関数の外で宣言しないとまずい
 
setInterval(conunUp, 1000);
セットインターバルの第一引数は「関数の名前」だけで()はつけない
 
ちなみに関数名をcountUpにしたらエラーになったので、たぶんそれだと予約語が入っているね。
 
--->test2.js(自分のコード)
 
$(function(){
//console.log('stopwatch');
var cnt = 0;//グローバル変数として宣言
var start = false;//startボタンが押されたかどうか
//カウントアップする関数
function cntUp(){
 cnt++;
 $('#clock').text(cnt);
}
//タイマー処理の実行
$('#b1').on('click',function(){
 if(start==false){//startボタン押すたびカウントが早くなるのを防ぐ
  start = true;
  setInterval(cntUp, 1000);
 }
});
});

prop プロップ
よくわからんがボタンとかそのほかの要素はdisabledという値をもっていて、
それをtrueにすると「使用不可」のグレーになる。
それを記述するときにこのpropを使うらしい。
 
propは「プロパティの真偽(true/fales)の書き換えに用いる。
attrと同じようなもので、やはりこれも引数が1つなら「値を拾得(つまりtrue/false)」、引数2つで「書き換え」となる。
 
  
$('#b1').prop('disabled',true);//ボタンを利用不可にする
 
 
--->test2.js
 
$(function(){
//console.log('stopwatch');
var cnt = 0;//グローバル変数として宣言
var testTimer;//このタイマーの名前。外側で宣言しておく必要あり
//カウントアップする関数
function cntUp(){
 cnt++;
 $('#clock').text(cnt);
}
//タイマー処理の予約
$('#b1').on('click',function(){
 testTimer = setInterval(cntUp, 1000);
 $('#b1').prop('disabled',true);//ボタンを利用不可にする
});
//タイマーを止める
$('#b2').on('click',function(){
 clearInterval(testTimer);//testTimerを止める
 console.log('foo');
 $('#b1').prop('disabled',false);//ボタンを利用可にする
});
});
 

??
ちなみにこの返り値がfalseにならなかったのはなぜだろう
 
var hoge = $('b1').prop('disabled');
console.log('prop '+hoge);


これたぶん'#b1'が正しい。#抜けだと思う
 
(#をつけたら動いた)
 

とりあえず自分版でボタン1つで切り替える
 
$(function(){
//console.log('stopwatch');
var cnt = 0;//グローバル変数として宣言
var testTimer;//このタイマーの名前。外側で宣言しておく必要あり
var btnStart = true;//ボタンは「スタート」のボタン
//カウントアップする関数
function cntUp(){
 cnt++;
 $('#clock').text(cnt);
}
//タイマー処理
$('#b1').on('click',function(){
 if(btnStart==true){
  testTimer = setInterval(cntUp, 1000);
  $('#b1').text('とめるよ');//stopボタンに変更
  btnStart = false;
  console.log('btn '+btnStart);
  //});
 }else{
  //タイマーを止める
  //$('#b1').on('click',function(){
  clearInterval(testTimer);//testTimerを止める
  console.log('foo');
  $('#b1').text('かうんと');//カウントボタンに変更
  btnStart = true;
 }
});
//}
});
 

変数btnStartで私は制御したが、
「ボタンのテキストがstartならstartの処理をし、
stopならstopの処理をしろ」という形が先生版
 
ボタンの上のテキストを拾得する記述はこのとおり↓
$('#b1').text()
 
textメソッドはテキストを投入するだけでなく、()内が空白の場合、
現在のテキストの「取得」として機能する。
attrと同じ。 
 
ので、これを条件文の条件に入れてやればいい。
すなわち、
if($('#b1').text()=='start'){
}
 
これによって分岐する
 
--->test202.js
 
 $(function(){
//console.log('stopwatch');
var cnt = 0;//グローバル変数として宣言
var testTimer;//このタイマーの名前。外側で宣言しておく必要あり
//カウントアップする関数
function cntUp(){
 cnt++;
 $('#clock').text(cnt);
}
//タイマー処理
$('#b1').on('click',function(){
 if($('#b1').text()=='start'){
  testTimer = setInterval(cntUp, 1000);
  $('#b1').text('stop');//stopボタンに変更
 }else{
  //タイマーを止める
  clearInterval(testTimer);//testTimerを止める
  console.log('foo');
  $('#b1').text('start');//カウントボタンに変更
 }
});
});
 
 
変数をかませなくても、「今現在、html上にある要素の状態を『取得し』『それを条件文に直に投入』する」という手法があるということ。
  
--->一応 test202.html
 
<!DOCTYPE html>
<html lang="ja">
<head>
 <link rel="stylesheet" href="test2.css">
 <title>ストップウォッチ</title>
 <meta charset="UTF-8">
 <script src="../jquery-3.4.1.min.js"></script>
</head>
<body>
 <div id="clock">0</div>
 <button id="b1">start</button>
 <script src="test202.js"></script>
</body>
</html>
--->test2.css(変化なし)
 
body{
 background: #e2ffb8;
}
#clock{
 font-size: 2rem;
 padding: 5px;
 text-align: right;
 background: #000;
 color: #0F0;
 width: 14rem;
 font-weight: bold;
 border: solid 3px #ccc;//ふちを丸く
}
PR

コメント

ただいまコメントを受けつけておりません。

ブログ内検索

P R