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

Mundial de Clubes - 2019

Al-Hilal estreia de olho no Fla e com filho de "fã nº1" do Brasil no banco

Razvan Lucescu, técnico do Al-Hilal, pode ser o rival do Flamengo na semi - Fayez Nureldine/AFP
Razvan Lucescu, técnico do Al-Hilal, pode ser o rival do Flamengo na semi Imagem: Fayez Nureldine/AFP

Leo Burlá

Do UOL, em Doha (QAT)

14/12/2019 04h00

Quando o Al-Hilal (SAU) entrar hoje (14) em campo para encarar o Espérance (TUN), às 11h (de Brasília), no estádio Jassim Bin Hamad, em Doha, um sobrenome que por muitos anos cultiva o amor pelo futebol brasileiro estará no comando dos sauditas.

Filho de Mircea Lucescu, treinador que se notabilizou por pedir a contratação de jogadores brasileiros no Shakthar Donetsk (UCR), Razvan Lucescu tentará conduzir seu time rumo à semifinal do Mundial de Clubes diante do Flamengo.

Em seu elenco, Razvan conta com o meia Carlos Eduardo, situação muito diferente da vivida pelo pai. Entre 2003 e 2016, o veterano treinador ajudou a dar relevância ao clube ucraniano, mas não sem um tempero verde e amarelo. Por suas mãos aram nada menos que nomes como William, Fred, Elano, Bernard, Luiz Adriano, Alex Teixeira, Taison, Wellington Nem, Alan Patrick, Fernando, entre outros.

Essa verdadeira seleção foi montada ao longo dos tempos, não apenas pelo evidente apreço ao futebol pentacampeão mundial, mas também pela Ucrânia ser considerada uma boa porta de entrada para jovens promessas.

"Sou amante do futebol brasileiro, do Brasil. Me lembro que em 1970, antes da Copa do Mundo, eu era capitão da seleção da Romênia e recebi convite do presidente do Fluminense para jogar no Brasil por três meses. Mas eu era de um país socialista e não podia sair naquele momento. Era um sonho poder jogar aqui. Por isso me aproximei muito do futebol brasileiro", revelou Mircea, que hoje está sem clube.

Mircea Lucescu, ex-treinador do Shakhtar Donetsk: apreciador do futebol brasileiro - Dmitry Korotayev/Epsilon/Getty Images - Dmitry Korotayev/Epsilon/Getty Images
Mircea Lucescu, ex-treinador do Shakhtar Donetsk: apreciador do futebol brasileiro
Imagem: Dmitry Korotayev/Epsilon/Getty Images

Assim como seu grande inspirador, Razvan também gosta do jogo praticado no Brasil, mas revelou um tom um pouquinho menos amistoso na véspera do duelo no Qatar.

Questionado sobre o fato de Jorge Jesus exaltar o Al-Hilal ao dizer que ele foi o grande responsável pelo elenco que venceu a Liga dos Campeões da Ásia, o europeu alfinetou o Mister:

"O Jesus é um dos principais técnicos do mundo nos dias atuais. Se ele diz que montou esse time, só posso dizer muito obrigado. É correto citar que este time foi formado em cinco anos de disputas em momentos importantes de Liga dos Campeões. Não só Jesus, mas Ramon Díaz e muitos outros".

De camarote, o Fla aguarda a definição do jogo de hoje para saber quem enfrenta no Qatar. Com ou sem Lucescu pelo caminho, o clube espera justificar a reverência da família.