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

Ex-técnico do Barcelona é oferecido para dirigir o Flamengo em 2022

Técnico do Barcelona, Ernesto Valverde, durante entrevista coletiva em Milão -
Técnico do Barcelona, Ernesto Valverde, durante entrevista coletiva em Milão

Bruno Andrade e Leo Burlá

Do UOL, em Lisboa (POR) e no Rio de Janeiro

17/12/2021 10h47

Em busca de um novo treinador, nomes chovem na mesa da cúpula de futebol do Flamengo. Dentre as muitas ofertas que chegam pelas mãos de empresários está Ernesto Valverde, ex-técnico do Barcelona.

Com viagem marcada para a Europa, o vice de futebol Marcos Braz e o diretor Bruno Spindel ainda não têm nenhuma agenda marcada com o espanhol, porém a porta está aberta para um deslocamento de Portugal para outro país.

Ontem (16), durante a posse de Rodolfo Landim, Braz deixou claro que o alvo não necessariamente será português, mas despistou sobre o escolhido:

"A gente viaja para Portugal. Isso não quer dizer que o técnico tenha de ser português. Lá, a gente terá algumas reuniões que estão pré-agendadas".

"Não necessariamente o novo treinador vai falar português, ele vai falar uma língua que todos jogadores vão entender. Temos portugueses, sul-americanos, europeus", completou Landim.

Fato é que Jorge Jesus, sonho número 1 da torcida, está entre aqueles que vão se encontrar com a cúpula. A negociação para a volta é tratada como dificílima, mas o tema já foi tratado com mais ceticismo na Gávea.

Em rota de colisão no Benfica, o Mister sabe que tem as portas abertas no Fla e os rubro-negros vão investir no coração do português, que venceu quase tudo que disputou no Brasil.

Paulo Sousa, Paulo Fonseca, Carlos Carvalhal e Rui Vitória são candidatos reais ao cargo e serão ouvidos neste giro pelo continente europeu. Vitor Pereira, que teve seu nome vinculado ao Rubro-negro, é carta totalmente fora do baralho.

Com a ida para Portugal, o Fla pretende liquidar essa situação e virar a página. Os dirigentes estão seguros de que uma nova comissão técnica estará na reapresentação do elenco, em 10 de janeiro.

Flamengo