;(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

REPORTAGEM

Texto que relata acontecimentos, baseado em fatos e dados observados ou verificados diretamente pelo jornalista ou obtidos pelo o a fontes jornalísticas reconhecidas e confiáveis.

Renata Silveira diz que narrar desmaio de Eriksen foi 'desesperador'

Renata Silveira narrou o jogo com comentários de Paulo Nunes - Reprodução/Instagram
Renata Silveira narrou o jogo com comentários de Paulo Nunes Imagem: Reprodução/Instagram

Colunista do UOL

22/06/2021 09h28

Renata Silveira viveu uma situação inédita em sua carreira como narradora neste mês. Uma das vozes do Grupo Globo na Eurocopa, foi ela a responsável por comandar o jogo entre Dinamarca e Finlândia. Ou seja, foi a voz que, assim como a de todo mundo, embargou após Eriksen sofrer um mal súbito em campo.

A narradora foi extremamente elogiada por seu profissionalismo. Deixou a emoção do momento bater sem parecer fria, mas conseguiu também contar tudo que estava acontecendo sem perder a seriedade, com uma experiência de quem parecia estar há anos fazendo aquilo. Mas como ela mesma disse, foi a primeira vez.

"As cenas foram muito fortes, desesperadoras. Quando os médicos começam a fazer a massagem cardíaca no atleta, realmente me emocionei. Foi até a hora que minha voz deu uma falhada, porque a gente vai ficando sem saber o que pode acontecer. É um sentimento desesperador", falou ao UOL.

"Ao mesmo tempo que as imagens eram muito chocantes, eu tinha a consciência da minha responsabilidade em contar toda aquela história. As pessoas estavam esperando as informações, acompanhando junto com a gente e eu precisava estar firme e forte para conseguir levar a transmissão, por mais difícil que fosse. O apoio do Paulo Nunes, que estava ali do meu lado, e de toda a equipe ajudou. Esse trabalho em equipe me fez seguir firme para levar a transmissão até o fim."

A narradora revelou que quando a câmera desligou e finalmente a transmissão chegou ao fim, a sensação era de muito cansaço, como se tivesse trabalhado o triplo do que realmente encararam.

"Assim que a câmera desligou, a gente se cumprimentou, agradecemos um ao outro e demos graças a Deus que ficou tudo bem com o atleta. Foram horas de muita tensão, mas felizmente terminou bem. O final da transmissão foi um momento de agradecimento para o Paulo Nunes e para todos que contribuíram de alguma forma naquela transmissão."

Mas quem é Renata Silveira?

Bom, para quem ainda não conhece a narradora, ela chegou ao Grupo Globo em 2020 e tem comandado partidas tanto na TV aberta como na fechada. Sua estreia foi no duelo Botafogo x Moto Club, pela Copa do Brasil, em março.

UOL

Leandro Carneiro

Editor de Splash, viciado por qualquer tipo de reality show, inclusive aqueles que os famosos vivem na vida real. Jornalista há mais de 10 anos e palpiteiro desde sempre. Se o assunto for esporte, entro em campo também.