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

Grêmio "acha" nova opção rápido para o ataque após volta de empréstimo

Lucas Uebel/Grêmio FBPA
Imagem: Lucas Uebel/Grêmio FBPA

Do UOL, em Porto Alegre

03/06/2021 04h00

Jhonata Robert voltou do empréstimo ao Famalicão, de Portugal, e na semana seguinte já atuou pelo Grêmio —e bem. Agora, o meia-atacante a a ser opção direta para o time titular. A boa apresentação contra o Brasiliense, pela Copa do Brasil, rendeu preciosos e relevantes elogios na disputa por um lugar dentro do elenco. O roteiro com ele, no entanto, foge ao padrão.

Cedido ao time português para jogar com mais frequência, o meia-atacante manteve iradores dentro do Grêmio. Desde a base até a alta cúpula, o jogador sempre foi elogiado. Com Tiago Nunes veio a chance. Aos 21 anos, Jhonata participou da jogada que terminou com o primeiro gol do Grêmio no jogo de ida da terceira fase da Copa do Brasil.

"O Jhonata chegou há pouco, estamos conhecendo as características dele. Ele gosta de atuar pelo lado, flutuando por dentro. Temos ideia, de acordo com a necessidade, de usar pelos dois lados. É um jogador combinativo, quando joga com pé inverso facilita para triangulação, tabela, jogo de pivô", disse Pedro Sotero, analista de desempenho e treinador interino do Grêmio contra o Brasiliense.

Robert já havia entrado no decorrer do jogo contra o Ceará, domingo (30), mas não foi tão bem. Na estreia da Copa do Brasil, foi titular e ao longo do duelo mudou de lado. A troca catapultou a atuação para outro nível.

"Jhonata (Robert) e Léo (Chú) são jogadores de muita qualidade e potencial. São diferentes. O Léo é mais vertical, com capacidade de transição. O Jhonata é mais combinativo, que busca aproximação, troca de es rápidos. Acredito que são jogadores de muito futuro para o Grêmio. Hoje fizeram uma grande partida, tentamos alternar os lados para causar desconforto ao adversário. As conexões são diferentes com eles", disse Sotero.

Na prática, Jhonata Robert a a ser alternativa para Ferreira. Enquanto o camisa 11 se recupera da covid-19, o reforço caseiro disputa posição com Léo Chu.

A trajetória de Jhonata Robert contraria a prática recente do Grêmio. O clube gaúcho, geralmente, dá chance e sequência às promessas que começam a temporada no grupo principal — promovidas semanas antes ou já no plantel há tempos.

Desta vez, pelas baixas recentes e carência de atributos, o clube olhou para o nome de Jhonata Robert e decidiu pedir o retorno — cláusula presente no contrato de empréstimo ao Famalicão. De volta, foi usado em poucos treinos e já agradou.

O Grêmio volta a campo no domingo (6), contra o Santa Cruz-RS, pela Recopa Gaúcha. O jogo diante do Flamengo, pela segunda rodada do Campeonato Brasileiro, foi adiado a pedido do clube rubro-negro.