Tabela treści
Podobnie jak wszystkie typy treści w Portalu, aplikacje są wstępnie ładowane podczas odtwarzania. Oznacza to, że może upłynąć kilka sekund (lub nawet minut) pomiędzy załadowaniem instancji Widgetu na Web Viewer Odtwarzacza, a faktycznym wyświetleniem Widgetu na ekranie.
To ma dwa skutki:
- Jeśli Twój Widget nie jest statyczny (np. wyświetlasz listę odtwarzania obrazów), musisz wiedzieć, kiedy Widget zostanie wyświetlony, aby móc rozpocząć swoją sekwencję.
- Jeśli Twój Widget jest zasobożerny, tracisz zasoby Odtwarzacza, co może skutkować złym doświadczeniem odtwarzania.
W przypadku „Simple Clock” żadna z powyższych sytuacji nie występuje, ale załóżmy, że chciałbyś rozpocząć zegar, gdy Widget zostanie wyświetlony, i zatrzymać zegar, gdy Widget zostanie ukryty.
Zmodyfikuj kod Widgetu w następujący sposób:
index.html
<!DOCTYPE html>
<html>
<head>
<script>
var use_seconds = true;
function startTime() {
var today = new Date();
var h = today.getHours();
var m = today.getMinutes();
var s = 0
m = checkTime(m);
txtEl = document.getElementById('txt')
if (use_seconds)
{
s = today.getSeconds();
s = checkTime(s);
txtEl.innerHTML = h + ":" + m + ":" + s;
}
else
{
txtEl.innerHTML = h + ":" + m;
}
window.t = setTimeout(startTime, 500);
}
function checkTime(i) {
if (i < 10) {i = "0" + i}; // add zero in front of numbers < 10
return i;
}
function init_widget(config) {
if (!config) {
return;
}
if("clock_font_size" in config){
var pixels = config.clock_font_size + "px"
document.getElementById('txt').style.fontSize = pixels;
}
if("use_seconds" in config){
use_seconds = config.use_seconds;
}
}
function start_widget(){
startTime()
}
function stop_widget(){
if(window.t){
clearTimeout(window.t);
}
}
</script>
</head>
<body>
<div id="txt" style="font-size: 48px"></div>
</body>
</html>
Zmiany wyjaśnione
Jak widać, nie rozpoczynamy teraz zegara przy ładowaniu strony, i dodaliśmy dwie funkcje:
- Funkcja start_widget jest wywoływana tuż przed wyświetleniem Widgetu na ekranie. Wtedy zaczynamy nasz zegar.
- Funkcja stop_widget jest wywoływana tuż po usunięciu Widgetu z ekranu. Wtedy zatrzymujemy nasz zegar.
Drugi wywołanie w naszym przypadku nie jest naprawdę konieczne, ponieważ Web Viewer zakończy pracę, a wszystkie zasoby zostaną zwolnione, ale warto to wiedzieć. Niektóre Widgety wymagają wywołań finalizacyjnych do usług backendowych, aby zapisać swój stan.