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

Notícias em primeira mão dos bastidores do futebol, informações exclusivas sobre o seu time, novidades do mercado da bola e o melhor do jornalismo esportivo em um só lugar. Só para s UOL!

Grêmio fez dossiê com manchetes para motivar elenco antes de Gre-Nal

Renato Gaúcho motivou elenco mostrando ataques da imprensa antes do Gre-Nal - Alexandre Schneider/Getty Images
Renato Gaúcho motivou elenco mostrando ataques da imprensa antes do Gre-Nal Imagem: Alexandre Schneider/Getty Images

Do UOL, em Porto Alegre

24/09/2020 04h00

O Grêmio preparou uma espécie de dossiê com manchetes que antecederam o Gre-Nal 427, pela fase de grupos da Copa Libertadores, para incrementar a preparação do elenco antes do jogo com o Internacional. O compilado de títulos jornalísticos e textos de opinião foi distribuído no vestiário e serviu de combustível para Renato Gaúcho atiçar os jogadores. Uma das páginas tinha coluna do jornalista David Coimbra, da Rádio Gaúcha e jornal Zero Hora, onde a chamada dizia que o "Grêmio deve ser amassado no Gre-Nal".

A ideia foi mobilizar o plantel depois de três jogos sem vitória, somando Campeonato Brasileiro e Copa Libertadores. O resultado foi considerado um sucesso. O Grêmio dominou o Inter em pleno estádio Beira-Rio e venceu o quarto dos cinco clássicos disputados em 2020. O expediente ajuda a explicar o tom da entrevista de Renato depois do Gre-Nal. (Por Jeremias Wernek)

Grupo Globo e Ricardinho acertam novo vínculo até fim de 2021

O ex-jogador Ricardinho renovou seu vínculo como comentarista do Grupo Globo. Seu contrato, que venceu em abril deste ano, havia sido estendido automaticamente pela Globo por seis meses por causa da pandemia do novo coronavírus. A intenção da emissora era negociar a renovação quando tudo estivesse mais tranquilo. A De Primeira apurou que a conversa chegou em um bom termo nesta semana. O ídolo do Corinthians acertou um novo vínculo por um ano e meio, até o final de 2021. Ele continuará como um dos principais comentaristas da emissora em São Paulo. Ricardinho chegou na Globo em 2018, juntamente com Petkovic. Ele cobriu a Copa do Mundo da Rússia e vem ganhando espaço. Foi escalado para transmissões em TV aberta neste ano, e participa de programas esportivos no Sportv frequentemente. (Por Gabriel Vaquer)

Santos freta voos na Libertadores por prevenção à covid-19

O Santos viajou para o Equador para enfrentar o Delfín hoje (24) em voo fretado. A ação não é rotineira no clube da Vila Belmiro. O Peixe não costuma fretar voos nem para longas distâncias, ainda mais diante da crise financeira vivida. No entanto, o esforço feito pela diretoria santista é como forma de prevenção à covid-19. O Santos é um dos clubes com menos casos de contaminação por coronavírus no Brasileirão - apenas dois. Outra preocupação é diminuir o cansaço dos jogadores santistas diante da maratona de jogos após a volta do futebol. O Peixe tem um elenco considerado pelo técnico Cuca curto e desequilibrado. Além disso, está proibido de registrar novos jogadores, não podendo reforçar ou repor alguma peça perdida por lesão durante a temporada. (Por Eder Traskini)