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

Flamengo

Flamengo aguarda seleção do Uruguai e protege Arrascaeta do fogo cruzado

Arrascaeta comemora gol do Flamengo contra o Palmeiras; Jogador está convocado para amistosos - REUTERS/Pilar Olivares
Arrascaeta comemora gol do Flamengo contra o Palmeiras; Jogador está convocado para amistosos Imagem: REUTERS/Pilar Olivares

Leo Burlá e Rodrigo Mattos

Do UOL, no Rio de Janeiro

30/10/2019 12h00

Convocado para integrar a seleção uruguaia para amistosos contra Hungria e Argentina, nos próximos dia 15 e 19 de novembro, respectivamente, o meia Arrascaeta pode desfalcar o Flamengo no Brasileiro e se reintegrar ao grupo somente em Santiago (CHI), local da final da Libertadores.

Ciente do risco, o Rubro-Negro enviou ofício à direção da Associação Uruguaia de Futebol (AUF) e ainda aguarda um retorno sobre uma eventual desconvocação. Apesar de torcer pela liberação, o clube entende a situação delicada do meia e rechaçou a hipótese de "usá-lo" nesta negociação com os dirigentes de seu país.

Neste caso, o Fla se baseou no parâmetro adotado no caso Reinier. Como o jovem foi chamado para o Mundial Sub-17, o clube alegou não ser obrigado a ceder ninguém quando a competição (ou jogo amistoso) não estiverem inseridos em Datas Fifa. No caso das partidas da Celeste, no entanto, o caso não se aplica, já que são janelas chanceladas pela entidade que dirige o futebol mundial. Se for incorporado ao time de Óscar Tabarez, Arrascaeta deve desfalcar os rubro-negros contra Vasco e Grêmio.

Se espremer no calendário do futebol mundial não é uma novidade para o jogador, que voou de Tóquio até São Paulo a tempo de ser o herói do Cruzeiro na final da Copa do Brasil de 2018. Na ocasião, ele regressou ao Brasil no dia do jogo após 25 horas de voo, atuou pouco mais de 30 minutos e fez o gol do título na vitória azul por 2 a 1 contra o Corinthians.

Se sua participação nos compromissos uruguaios for sacramentada e a programação extraoficial for mantida, ele sairia de Telaviv, em Israel, para o Chile. Ainda que a viagem seja longa, o atleta teria mais dias de recuperação até a decisão contra o River Plate, dia 23. A chegada dos cariocas no palco da decisão está prevista para o dia 20.

Guerrero x Peru

Em agosto deste ano, Paolo Guerrero, ídolo máximo da seleção peruana, pediu dispensa de amistosos contra Equador e Brasil, para não ser baixa no Internacional na semifinal e no primeiro jogo da final da Copa do Brasil. O pedido do atacante foi atendido pelo técnico Ricardo Gareca, que deixou o peruano à disposição do Colorado.

Fla de olho no Goiás

Na ponta da tabela do Campeonato Brasileiro, o Flamengo faz hoje (30) seu último treino antes de encarar amanhã (31) o Goiás, às 20h, no Serra Dourada.

Na atividade no Ninho do Urubu, o técnico Jorge Jesus vai fazer as últimas observações e definir se dá descanso para algum jogador que esteja mais desgastado fisicamente.

Flamengo