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

ANÁLISE

Texto baseado no relato de acontecimentos, mas contextualizado a partir do conhecimento do jornalista sobre o tema; pode incluir interpretações do jornalista sobre os fatos.

Fortaleza despacha mais um grande e G-6 é meta real. São Paulo não cria

Robson, do Fortaleza, comemora gol contra o São Paulo, em jogo pelo Brasileiro - LUCIANO CLAUDINO/CÓDIGO19/ESTADÃO CONTEÚDO
Robson, do Fortaleza, comemora gol contra o São Paulo, em jogo pelo Brasileiro Imagem: LUCIANO CLAUDINO/CÓDIGO19/ESTADÃO CONTEÚDO

Colunista do UOL Esporte

17/07/2021 19h31

O jogo no Morumbi ficará marcado pelo pênalti mal marcado pela arbitragem e corretamente anulado com a ajuda do VAR, mas, principalmente, pelo drama da convulsão de Marcelinho, massagista do São Paulo, à beira do campo. Sempre um evento traumático.

Mas foi mais uma atuação consistente do Fortaleza de Vojvoda no Brasileiro. Novamente organizado para atacar e defender. Com Tinga como zagueiro dando e ao ala Pikachu, que ataca o corredor direito. Do lado oposto, Lucas Crispim é o ala organizador que aciona David na velocidade. Robson circula por todo ataque e Ronaldo e Ederson são meio-campistas de área a área.

Um 3-4-3 com muito conteúdo e também ciência das dificuldades e dos diferentes contextos. Controlando o primeiro tempo com 37% de posse e segurando a intensidade são-paulina nos encaixes, perseguições e rápidas transições da equipe de Hernán Crespo. Muito volume enquanto há fôlego.

Mas carência de criatividade sem Daniel Alves, Rigoni e Luciano, com Benítez no banco e entrando no segundo tempo como uma espécie de "falso nove" porque não a fisicamente o desgaste do trabalho sem bola. Com força apenas pela esquerda, com Reinaldo dando trabalho a Pikachu e Tinga. Ainda a tentativa de acelerar com Rojas circulando pelos flancos.

No segundo tempo, o time cearense foi encontrando espaços com mobilidade, inteligência e vitórias nos duelos pelo campo. Com David ganhando na velocidade de Arboleda, Robson circulando entre Leo e Bruno Alves e Ederson e Ronald sobrando contra Luan e Nestor entre as intermediárias.

Na bola parada, que também é ensaiada dentro de um trabalho cada vez mais completo, Crispim colocou na cabeça de Robson para marcar o gol único.

Placar que poderia ter sido ampliado em contragolpe de manual que Igor Torres, substituto de Robson, finalizou no travessão de Tiago Volpi. Foram nove conclusões, quatro de dentro da área, Mesmo número no alvo, uma a mais que o São Paulo, que teve um falso domínio. Crespo precisa encontrar soluções ofensivas para superar ausências importantes. A equipe paulista volta a se aproximar do Z-4.

O time de Vojvoda sempre pareceu mais seguro e perto da vitória. Terceira consecutiva que coloca o Fortaleza no G-4. Já superando Atlético Mineiro, Corinthians e Internacional. A direção acerta ao traçar como meta inicial a permanência por mais um ano na Série A. Mas na verdade do campo, o objetivo de terminar no G-6 é, ou deve ser, muito real.

(Estatísticas: SofaScore)

** Este texto não reflete, necessariamente, a opinião do UOL