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

Auxiliar de Tite, Sylvinho deixa seleção brasileira para trabalhar no Lyon

Pedro Lopes e Rodrigo Mattos

Do UOL, no Rio de Janeiro (RJ)

17/05/2019 11h15

Auxiliar-técnico de Tite na seleção brasileira, Sylvinho está de saída da equipe nacional. Edu Gaspar, coordenador de seleções da CBF, anunciou que o ex-jogador deixará a comissão técnica para trabalhar como treinador do Lyon. O destino do ex-lateral esquerdo foi publicado pelo L'Équipe e confirmado pelo UOL Esporte..

"Nós temos um profissional que é o Sylvinho, que não vai fazer parte da Copa América, aceitou o convite de um grande clube europeu. Posso anunciar que é o desligamento a partir de hoje, deixo para você, Sylvio, que somos um amigo de muitos anos, todos atributos que você construiu na sua carreira, tem um que diferencia é o seu nível pessoal. Que seja feliz, vou sentir saudades", disse Edu, em entrevista coletiva durante a convocação da seleção brasileira.

"Estamos orgulhosos de você, é o mesmo sentimento do Rogério. Essa mistura de sentimentos, deixo com você e obrigado por servir a seleção como você serviu. Independente do lugar que esteja, estarei do seu lado", completou.

Sylvinho era considerado uma das peças-chave na comissão técnica da CBF. Além de ser auxiliar de Tite, havia sido escolhido para ser o treinador da seleção brasileira olímpica.

O ex-lateral já havia trabalhado como auxiliar-técnico na Inter de Milão e chegou a ser sondado para trabalhar como treinador no futebol europeu antes da Copa do Mundo de 2018.

Confira a convocação da seleção brasileira para a Copa América:

Goleiros
Alisson (Liverpool)
Ederson (Manchester City)
Cássio (Corinthians)

Laterais
Daniel Alves (PSG)
Fagner (Corinthians)
Alex Sandro (Juventus)
Filipe Luís (Atlético de Madri)

Zagueiros
Thiago Silva (PSG)
Marquinhos (PSG)
Miranda (Inter de Milão)
Éder Militão (Porto)

Meio-campistas
Casemiro (Real Madrid)
Arthur (Barcelona)
Fernandinho (Manchester City)
Allan (Napoli)
Lucas Paquetá (Milan)
Philippe Coutinho (Barcelona)

Atacantes
David Neres (Ajax)
Richarlison (Everton)
Gabriel Jesus (Manchester City)
Roberto Firmino (Liverpool)
Neymar (PSG)
Everton (Grêmio)