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

Eurocopa - 2021

Portugal e França empatam com recorde de CR7 e gols de Benzema na Eurocopa

Cristiano Ronaldo e Pogba em ação durante Portugal x França, pela Eurocopa - UEFA via Getty Images
Cristiano Ronaldo e Pogba em ação durante Portugal x França, pela Eurocopa Imagem: UEFA via Getty Images

Do UOL, em São Paulo

23/06/2021 17h58

Portugal e França fizeram um jogo digno da reedição da final da Eurocopa de 2016 na tarde de hoje. As seleções empataram por 2 a 2 em Budapeste, na Hungria, em uma partida cheia de reviravoltas pela terceira rodada do Grupo F da Euro. Com o resultado, ambas avançam às oitavas de final.

Cristiano Ronaldo e Benzema foram os nomes da partida, com dois gols cada. O português marcou duas vezes de pênalti e igualou o iraniano Ali Daei como maior artilheiro da história de seleções, com 109 gols, enquanto o francês voltou a marcar pelos Bléus após quase seis anos — o último gol havia sido em outubro de 2015.

Com o empate, a França ficou com cinco pontos, na liderança do Grupo F, considerado a "chave da morte" desta edição da Euro. Portugal, com quatro pontos, encerrou na terceira posição.

Agora, Portugal vai enfrentar a Bélgica nas oitavas de final da competição. O adversário da França será a Suíça.

O jogo

Quase cinco anos depois da final da Euro em Paris, Portugal e França voltaram a se enfrentar em um jogo decisivo na competição. Desta vez, o confronto valia a classificação para a sequência da atual edição da Eurocopa.

Quem esperava um jogo com clima de decisão viu exatamente isso no Estádio Puskás Ferenc, em Budapeste. E, claro, com uma boa dose de emoção e reviravoltas.

Portugal saiu na frente, aos 30 minutos do primeiro tempo, depois que a arbitragem assinalou penalidade em um lance que Lloris atingiu o volante Danilo acidentalmente com um soco. Cristiano Ronaldo foi para a cobrança e marcou.

O empate da França também veio de pênalti. Em marcação duvidosa depois que Mbappé caiu dentro da área, Benzema igualou aos 46 da primeira etapa. Foi o primeiro gol do atacante depois da sua volta à seleção sa.

Logo na volta do intervalo, a estrela de Benzema brilhou mais uma vez. O centroavante recebeu lindo e de Pogba e bateu cruzado para colocar a França em vantagem.

O resultado, combinado com a até então vitória da Hungria diante da Alemanha, ia eliminado Portugal da competição. Mas Cristiano Ronaldo apareceu e anotou, de pênalti, o segundo dos portugueses. Foi o 109º gol de CR7 pela seleção, igualando o recorde do iraniano Ali Daei.