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

Julio Gomes

OPINIÃO

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

Senegal e Marrocos são os africanos que podem incomodar favoritos na Copa

Jogadores do Senegal comemoram gol contra o Egito - Divulgação/CAF
Jogadores do Senegal comemoram gol contra o Egito Imagem: Divulgação/CAF

30/03/2022 04h00

Receba os novos posts desta coluna no seu e-mail

Email inválido

As cinco vagas africanas na Copa do Mundo foram definidas ontem, três delas de forma dramática. São as consequências de uma fórmula de disputa que acaba em mata-mata. Senegal ou nos pênaltis contra o Egito, Camarões e Gana contaram com a falida regra do gol fora de casa para eliminar Argélia e Nigéria. Marrocos foi o único que ou com tranquilidade, a Tunísia entrou também.

O sorteio foi cruel, acabou colocando frente a frente as duas melhores seleções do continente (Senegal e Egito). E deixou para a terceira melhor, a Argélia, uma casca de banana. Camarões pode não viver o melhor momento, mas tem tradição. O final do jogo de ontem, com um gol da Argélia no finalzinho da prorrogação e outro de Camarões já nos acréscimos, foi um dos mais dramáticos que já vi no futebol.

O fato é que estarão no Catar-2022 três das seleções africanas que mais jogaram Mundiais: Camarões (8), Marrocos (6) e Tunísia (6), estes últimos alcançam as participações da Nigéria (6). Seguindo o ranking, Gana (agora com 4) alcança a Argélia. E Senegal (agora com 3) alcança Egito, Costa do Marfim e África do Sul.

Dos eliminados, Egito, Argélia, Nigéria e até mesmo a Costa do Marfim, que caiu na fase anterior, am a impressão de terem mais material humano do que alguns dos eliminados. Mas o futebol africano é nivelado demais e definições em mata-mata dão nisso. Sinceramente, não vejo como Tunísia, Gana e Camarões possam fazer grandes coisas na Copa do Mundo.

Situação diferente de Senegal e Marrocos. Estas são, eu diria, as duas melhores seleções de fora do eixo Europa-América do Sul que estarão no torneio. Superiores às asiáticas e mesmo às da Concacaf, México incluído. Senegal e Marrocos são times com jogadores que atuam nas principais ligas europeias do goleiro ao ponta-esquerda. É claro que nem todos são Mané ou Hakimi, para falar dos melhores de cada uma. E é claro também que não mostram consistência para serem apontados favoritos a nada.

O fato é que Senegal e Marrocos podem chegar na Copa e nem ar da primeira fase. Podem perder de qualquer um. Igualmente, podem ganhar de qualquer um, têm potencial e material humano. Podem chegar no mata-mata e eliminar, sim, alguma potência europeia ou sul-americana. Olho neles.

O time de Senegal que entrou em campo contra o Egito teve: Mendy (Chelsea); Sabaly (Bétis), Cissé (Olympiacos), Koulibaly (Napoli) e Ciss (Nancy); Mendy (Rangers), Gueié (PSG) e Bouna Sarr (Bayern); Mané (Liverpool), Dia (Villarreal) e Ismaila Sarr (Watford). Na final da Copa Africana, haviam jogado outros caras de clubes das principais ligas europeias, como Diallo (PSG) e Kouyaté (Crystal Palace).

Já o time-base de Marrocos, que bateu a República Democrática do Congo por 4 a 1, ontem, é formado por: Bono (Sevilla); El Yamiq (Valladolid), Saiss (Wolverhampton) e Aguerd (Rennes); Hakimi (PSG), Lousa (Watford), Amallah (Standard Liege), Amrabat (Fiorentina), e Masina (Watford); Tissoudali (Gent) e En-Nesyri (Sevilla). O técnico é o experiente bósnio Vahid Halilihodzic, que barra o melhor jogador marroquinho da atualidade, Ziyech, do Chelsea.