簡易ストップウォッチを作ってみる[Visualforce]
概要
Visualforceで簡易ストップウォッチを作成します。
setTimeoutで1000ミリ秒毎に秒数をカウントアップします。
ソースコード
SimpleStopwatch.vfp
<apex:page docType="html-5.0" LightningStylesheets="true"> <html lang="ja"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>簡易ストップウォッチ</title> <apex:slds /> </head> <body> <div class="slds-align_absolute-center"> <div class="slds-size_2-of-3"> <apex:pageBlock > <div class="slds-grid slds-einstein-header slds-card__header"> <header class="slds-media slds-media_center slds-has-flexi-truncate"> <div class="slds-grid slds-grid_vertical-align-center slds-size_3-of-4 slds-medium-size_2-of-3"> <h1 class="slds-truncate" title="簡易ストップウォッチ"> <span class="slds-text-heading_large">簡易ストップウォッチ</span> </h1> </div> <div class="slds-einstein-header__figure slds-size_1-of-4 slds-medium-size_1-of-3"></div> </header> </div> <div class="slds-align_absolute-center"> <div class="slds-m-top_large"> <header class="slds-col slds-size_1-of-1 slds-align_absolute-center" > <div class="curentTime slds-text-heading_large">00:00</div> </header> <main class="slds-align_absolute-center"> <div class="slds-button-group slds-m-vertical_medium" role="group"> <button id="start" class="slds-button slds-button_neutral slds-text-heading_medium slds-p-around_small">スタート</button> <button id="stop" class="slds-button slds-button_neutral slds-text-heading_medium slds-p-around_small" disabled="true">ストップ</button> <button id="reset" class="slds-button slds-button_text-destructive slds-text-heading_medium slds-p-around_small">リセット</button> </div> </main> </div> </div> </apex:pageBlock> </div> </div> <apex:include pageName="SimpleStopwatchJs"/> </body> </html> </apex:page>
SimpleStopwatchJs.vfp
<apex:page > <script> const stopwatchButton = document.querySelectorAll('.slds-button'), startButton = document.querySelector('#start'), stopButton = document.querySelector('#stop'), curentTimeText = document.querySelector('.curentTime'); let sec = 0, // 秒 min = 0, // 分 timerId; // clearTimeout用のID stopwatchButton.forEach(function (button) { button.addEventListener('click', event => { let clickedButtonId = event.currentTarget.id; if(clickedButtonId === 'start') { // 計測開始 startTimmer(); } else if(clickedButtonId === 'stop') { // 計測終了 stopTimmer(); } else { // 計測リセット resetTimmer(); } }) }) // 計測開始 function startTimmer() { startButton.disabled = true; stopButton.disabled = false; // 1秒毎に計測する countUp(); } // 計測終了 function stopTimmer() { startButton.disabled = false; stopButton.disabled = true; clearTimeout(timerId); } // 計測リセット function resetTimmer() { startButton.disabled = false; stopButton.disabled = true; clearTimeout(timerId); curentTimeText.textContent = "00:00"; min = 0; sec = 0; } // 計測時間を分に変換する function convertTime(){ sec++; if (sec >= 60) { sec = 0; min++; } } // 1秒毎に計測する function countUp(){ timerId = setTimeout(function(){ // 計測時間を分に変換する convertTime(); // 桁数を固定 min = ('0' + min).slice(-2); sec = ('0' + sec).slice(-2); // 計測時間を表示 curentTimeText.textContent = min + ":" + sec; // 1秒毎に計測する countUp(); },1000); } </script> </apex:page>