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

Seleção olímpica enfrentará Cabo Verde e Sérvia nos dias 5 e 8 de junho

André Jardine, técnico da Seleção Brasileira Olímpica - Lucas Figueiredo/CBF
André Jardine, técnico da Seleção Brasileira Olímpica Imagem: Lucas Figueiredo/CBF

Colaboração para o UOL, em São Paulo

21/05/2021 16h03

Logo após a convocação da seleção feminina de futebol para a última Data Fifa antes dos Jogos Olímpicos de Tóquio, Branco e André Jardine confirmaram os dois amistosos da seleção brasileira masculina olímpica nesta fase de preparação para a competição.

Os jogos acontecerão nos dias 5 e 8 de junho, contra Cabo Verde e Sérvia, respectivamente. Ambos serão às 16h (de Brasília), em Belgrado, na Sérvia.

"Não foi fácil pela questão da pandemia, tivemos muita dificuldade de encontrar adversários, e dentro do possível conseguimos amistosos importantes", disse Branco, que ou a palavra para o treinador André Jardim, que completou:

"São dois amistosos muito importantes, teremos duas seleções com semelhanças das seleções que estão na nossa chave das Olimpíadas."

Os convocados de Jardine vão se reunir entre os dias 31 de maio a 8 de junho.

Veja a lista completa:

  • Goleiros: Cleiton (Red Bull Bragantino), Brenno (Grêmio) e Brazão (Real Oviedo)
  • Laterais: Gabriel Menino (Palmeiras), Emerson (Bétis), Guilherme Arana (Atlético-MG) e Abner (Athletico)
  • Zagueiros: Gabriel (Arsenal), Luiz Felipe (Lazio), Ibañez (Roma) e Nino (Fluminense)
  • Meio-campistas: Bruno Guimarães (Lyon), Matheus Henrique (Grêmio), Reinier (Borussia Dortmund), Liziero (São Paulo), Gerson (Flamengo) e Claudinho (Red Bull Bragantino)
  • Atacantes: Antony (Ajax), Malcom (Zenit), Pedro (Flamengo), Evanilson (Porto), Martinelli (Arsenal) e Rodrygo (Real Madrid)