;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL
Topo

RJ: 1º debate na pandemia tem divisor de acrílico e medição de temperatura

1º.out.2020 - Martha Rocha (PDT) e Eduardo Paes (DEM) separados por divisor de acrílico - Reprodução/Band
1º.out.2020 - Martha Rocha (PDT) e Eduardo Paes (DEM) separados por divisor de acrílico Imagem: Reprodução/Band

Maria Luisa de Melo

Colaboração para o UOL, no Rio

02/10/2020 02h13

Com o desafio de realizar o debate com maior número candidatos à Prefeitura do Rio da história da emissora e em meio à pandemia do novo coronavírus, a TV Bandeirantes teve que redobrar os cuidados durante o encontro na noite de ontem (1º).

A presença do público no estúdio da emissora não foi permitida para evitar aglomerações. Os assessores também não puderam ficar no mesmo ambiente que os candidatos. Todos os candidatos foram orientados a chegar de máscara à sede da emissora, em Botafogo, na zona sul carioca, e a trocá-la antes de entrar no prédio. Segundo convidados, os candidatos tiveram temperatura medida na entrada do prédio.

Se antes os acompanhantes dos candidatos ficavam no mesmo ambiente, desta vez cada grupo foi alocado em uma sala para assistir ao debate pela TV. Ao todo, foram disponibilizadas 11 salas, com álcool gel e kits de máscaras em cada sala.

No estúdio reservado aos candidatos, a orientação era de que cada um deles se mantivesse de máscara enquanto não estivesse fazendo perguntas ou respondendo seus adversários. A permissão para retirada da máscara foi dada apenas enquanto os candidatos estivessem em sua vez de falar.

Alguns candidatos chegaram a se enrolar no momento de tirar as máscaras, enquanto outros se esqueciam e eram lembrados pelo mediador.

Mesmo assim, foi instalado um divisor de acrílico para evitar o contato entre os aspirantes ao Palácio da Cidade.

Para evitar contaminação mesmo apelando ao distanciamento social, a emissora contratou o infectologista Edmilson Migowski para auxiliar no reforço à prevenção contra a covid-19 durante o encontro.

Antes de se dirigir à sede da emissora, os candidatos e seus acompanhantes tiveram que responder a um extenso questionário sobre estarem com algum sintoma do novo coronavírus, como febre, sudorese e dor de garganta. O documento foi submetido aos cuidados de Migowski. Nenhum candidato relatou apresentar os sintomas.

"Esse tipo de exposição não requer testagem. Mas na entrada da Band se exige avaliação da temperatura. Só que febre, na covid-19, ocorre em menos de 20% dos pacientes", disse o infectologista. "Todos os candidatos foram orientados a manter a máscara enquanto estivessem sentados", completou.