Вот пример, который использует Динамические Действия, хотя большая часть логики будет в модуле JavaScript, загруженном через атрибуты страницы.
С учетом этого HTML (обратите внимание, что кнопок нет):
<div style="line-height: 1.5; font-size: 3.2rem; font-weight: 500">
<span id="hour">00</span> :
<span id="min">00</span> :
<span id="sec">00</span> :
<span id="milisec">00</span>
</div>
Добавьте следующее к Выполнить при загрузке страницы атрибута страницы. Это создаст модуль JavaScript (раскрывающий шаблон модуля), который предоставляет только две функции, которые позже добавляются в качестве глобальных методов для объекта окна:
var timerModule = (function() {
var startElmtId = 'START';
var miliSecElmtId = 'milisec';
var secElmtId = 'sec';
var minElmtId = 'min';
var hourElmtId = 'hour';
var $startBtn = $('#' + startElmtId);
var timerRef;
var milisec = 0;
var sec = 0;
var min = 0;
var hour = 0;
var miliSecOut = 0;
var miliSecElmt = document.getElementById(miliSecElmtId);
var secOut = 0;
var secElmt = document.getElementById(secElmtId);
var minOut = 0;
var minElmt = document.getElementById(minElmtId);
var hourOut = 0;
var hourElmt = document.getElementById(hourElmtId);
function startStop() {
if (timerRef === undefined) {
$startBtn.children('span').text("Stop");
start();
} else {
$startBtn.children('span').text("Start");
stop();
}
}
function start() {
timerRef = setInterval(timer, 10);
}
function stop() {
clearInterval(timerRef);
timerRef = undefined;
}
function timer() {
miliSecOut = checkTime(milisec);
secOut = checkTime(sec);
minOut = checkTime(min);
hourOut = checkTime(hour);
milisec = ++milisec;
if (milisec === 100) {
milisec = 0;
sec = ++sec;
}
if (sec == 60) {
min = ++min;
sec = 0;
}
if (min == 60) {
min = 0;
hour = ++hour;
}
miliSecElmt.innerHTML = miliSecOut;
secElmt.innerHTML = secOut;
minElmt.innerHTML = minOut;
hourElmt.innerHTML = hourOut;
}
/* Adds 0 when value is <10 */
function checkTime(i) {
if (i < 10) {
i = "0" + i;
}
return i;
}
function reset() {
milisec = 0;
sec = 0;
min = 0
hour = 0;
miliSecElmt.innerHTML = "00";
secElmt.innerHTML = "00";
minElmt.innerHTML = "00";
hourElmt.innerHTML = "00";
}
return {
startStop: startStop,
reset: reset
};
})();
window.startStop = timerModule.startStop;
window.reset = timerModule.reset;
Затем создайте две кнопки, одну с именем START и другую с именем RESET. ,Для кнопки запуска убедитесь, что для статического идентификатора установлено значение START.
Затем создайте динамическое действие для кнопки START события щелчка. Установите действие Выполнить код JavaScript и установите код startStop();
Наконец, добавьте динамическое действие для кнопки сброса события щелчка. Задайте для действия «Выполнить код JavaScript» значение reset();
Несколько замечаний:
- В HTML больше нет кнопок, в примере используются обычные кнопки APEX. Код, который обновляет
- Я кэшировал элементы HTML, поскольку к ним так часто обращались.
- Поскольку в коде используется шаблон раскрывающегося модуля, глобально должны быть доступны только две функции.