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

André Rocha

OPINIÃO

Texto em que o autor apresenta e defende suas ideias e opiniões, a partir da interpretação de fatos e dados.

Não falta vontade ao Flamengo, mas o que VP quer realmente não é simples

Gabigol comemorando gol marcado na partida entre Flamengo e Volta Redonda, pelo Campeonato Carioca de 2023 - Divulgação/Flamengo
Gabigol comemorando gol marcado na partida entre Flamengo e Volta Redonda, pelo Campeonato Carioca de 2023 Imagem: Divulgação/Flamengo

Colunista do UOL Esporte

16/02/2023 08h46

Vitor Pereira não barrou Everton Ribeiro. O treinador só fez uma experiência dentro da continuação de pré-temporada que são os estaduais.

Curioso que os mesmos que exigem a manutenção de alguns titulares em todos os jogos são os mesmos que reclamam de queda de produção lá em outubro ou novembro, quando os atletas chegam com quase 60 partidas nas pernas.

O teste não deu certo porque Thiago Maia e Gerson estão mal fisicamente e a ideia de Vidal como volante mais fixo pode até qualificar a saída de bola, porém torna o time ainda mais frágil na transição defensiva.

Por isso o Volta Redonda de Naninho, Pedrinho, Luizinho e Lelê teve tanta facilidade para trabalhar por dentro, às costas de Vidal e de frente para a dupla de zaga rubro-negra. Assim saiu o ataque bem engendrado que Luizinho finalizou na saída de Santos.

Outro desafio do treinador português é fazer o Flamengo chegar ao fundo pelos dois lados do campo. Como o quarteto ofensivo trabalha muito por dentro e antes era Bruno Henrique quem buscava as infiltrações pela esquerda, agora Ayrton Lucas precisa fazer essa compensação, assim como Varela ou Matheuzinho do lado oposto.

Não é fácil equilibrar um time que ataca com quatro por dentro, dois por fora e mais um no apoio. Só para citar um exemplo, o Liverpool de Jürgen Klopp, nos bons tempos, entrava no campo adversário com os laterais Arnold e Robertson por fora, o trio de ataque por dentro (Salah, Firmino ou Jota e Mané), mas tinha três meio-campistas prontos para ajudar os zagueiros. Sem contar a eficiente pressão no campo de ataque, logo após a perda da bola.

Com mais gente na frente, a retomada da bola precisaria ser ainda mais rápida para não pegar os três que ficaram atrás, dois zagueiros e um volante, desprotegidos. Só que esses jogadores tiveram 42 dias de férias, quase 60 de total desmobilização depois da conquista da Libertadores e treinaram pouco, já encarando uma sequência de jogos. O planejamento foi ruim.

Não é simples. Este que escreve não teria demitido Dorival Júnior e muito menos contratado Vitor Pereira, mais por questões extra-campo.. Mas agora o trabalho precisa ter sequência.

Os jogadores demonstraram que querem, pela fibra demonstrada para construir a virada para 3 a 1 no segundo tempo, com Varela improvisado na lateral esquerda, setor em que Everton Cebolinha tentou dar profundidade, e Everton Ribeiro entrando para dar criatividade ao meio com Arrascaeta. Pulgar sofreu um pouco atrás com Fabrício Bruno e David Luiz, mas Gabi e Pedro resolveram na frente com gols e fina sintonia..

O camisa dez compensando um pênalti perdido, o primeiro com defesa do goleiro adversário. Comemorando um dos gols abraçando Vitor Pereira efusivamente. O técnico vai precisar mesmo de apoio, pois a missão é bem mais complexa do que ele imaginava.

Há qualidade no elenco, a questão é combinar bem as características e construir um jogo coletivo que alie beleza e eficiência.