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

Danilo Lavieri

REPORTAGEM

Texto que relata acontecimentos, baseado em fatos e dados observados ou verificados diretamente pelo jornalista ou obtidos pelo o a fontes jornalísticas reconhecidas e confiáveis.

Times brasileiros observam "ucranianos", mas guerra impede acordos rápidos

David Neres é o jogador brasileiro mais caro desta janela de transferências - Divulgação
David Neres é o jogador brasileiro mais caro desta janela de transferências Imagem: Divulgação

Colunista do UOL

04/03/2022 11h06

Receba os novos posts desta coluna no seu e-mail

Email inválido

Os principais times do Brasil estão de olho na situação dos jogadores brasileiros que voltaram da Ucrânia nos últimos dias para fugir da guerra. Apesar de os cerca de 30 nomes causarem alvoroço em algumas torcidas, a situação deles é bem mais complicada do que os próprios gostariam.

Palmeiras, São Paulo, Corinthians, Atlético-MG, Flamengo, Internacional e Athletico são algumas das equipes que já analisaram os nomes e são tratados como as principais opções dos jogadores que retornaram ao país, mas o momento impede qualquer tipo de acordo rápido. A única chance de isso mudar seria a Fifa entrar no caso e divulgar alguma medida imediata.

Na opinião de alguns membros dos departamentos jurídicos dessas equipes e de outros especialistas no assunto, como a guerra acabou de começar e ainda não há previsão nem de quanto tempo vai durar e nem das consequências, é impossível que haja uma liberação imediata sem a intervenção da entidade máxima do futebol.

A tendência é que os clubes ucranianos comecem a pensar em negociar alguns de seus jogadores no meio da semana que vem e sempre no formato de empréstimo. Não está descartada a possibilidade de agremiações continuarem com os treinos em outro país da Europa, o que também inviabilizaria acordos por agora.

A chance de rescisão unilateral, apesar da guerra, ainda é considerada pequena, a não ser que os times envolvidos em a não depositar seus salários por mais de três meses.

Ainda há a chance de essa lista de atletas sem ter onde jogar temporariamente aumente. Alguns brasileiros que atuam na Rússia estão negociando a saída do país também com medo das consequências da guerra.

No momento, o Brasil surge como a grande atração porque ainda tem a sua janela de transferências abertas, assim como outros mercados periféricos. A Europa só volta a contratar no meio do ano, e a Fifa ainda não sinalizou com a chance de mudar essa regra para ajudar os que fogem do conflito.

Siga também as opiniões de Danilo Lavieri no Twitter, no Instagram e no TikTok