none
タイマー表示方法について RRS feed

  • 質問

  • タイマー表示方法についてご教授お願いします。

    フォーム画面のサブグリッドから新規作成で簡易作成フォームを起動してデータ作成する際、
    起動から保存終了するまでの間、起動からの時間が分かるように、
    1行テキストフィールドを設けて、1秒毎にフィールド値を更新する処理をして希望通りの動作をしていますが、
    この処理が要因で端末操作が遅くなったり、カウンター秒数が飛んだりすることが時々あります

    以下のソースに問題があるかもしれませんが、
    この方法以外で上記のような動作させる方法があれば教えてください。

    /* *** 外部変数 *** */
    var TIMER_ID;            // タイマーID
    var LOAD_TIME;         // 起動時間
    
    /* *** 簡易作成フォーム起動時処理 *** */
    function loadEasyCreationForm(){
        // 起動時間セット
        LOAD_TIME = new Date();
    
        // タイマーカウンター表示処理(1秒間隔)
        TIMER_ID = setInterval(timerCounter, 1000); 
    }
    
    /* *** 簡易作成フォーム保存時処理 *** */
    function saveEasyCreationForm() {
        clearInterval(TIMER_ID);
    }
    
    /* *** タイマーカウンター表示 *** */
    // 巡回活動新規作成時(簡易作成フォームを開いて)から1秒間隔で
    // タイマーカウンターをカウントアップ表示する
    // 表示形式(HH:MM:SS)
    var timerCounter = function(){
        var strTimer = makeCount();
        
        // strTimerの値をタイマー表示用フィールドに値セット処理(省略)
    }
    
    /* *** カウント処理 *** */
    function makeCount(){
        var startMiriSec = LOAD_TIME.getTime();                    // 開始時間
        var endDate      = new Date();                             // 現在時間取得 
        var endMiriSec  = endDate.getTime();                      // 終了時間
        var diffSec        = Math.floor((endMiriSec - startMiriSec) / 1000);     // ミリ秒 ⇒ 秒に変換
        var strTimeDiff  = makeTime(diffSec);                      // 時間文字列変換
        return strTimeDiff ;
    }
    
    /* *** 時間文字列変換処理 *** */
    // 時間を(HH:MM:SS)形式に変換
    // secValue:時間(秒)
    function makeTime(secValue){
        var hh = ('0' + (Math.floor(secValue / 3600))).slice(-2);
        var mm = ('0' + (Math.floor((secValue - (hh * 3600)) / 60))).slice(-2);
        var ss = ('0' + (secValue % 60)).slice(-2);
        var strTimeDiff = hh + ":" + mm + ":" + ss;
        return strTimeDiff;
    }

    2020年8月18日 4:21