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

Croácia vence a Escócia e confirma vaga nas oitavas de final da Eurocopa

Modric comemora gol da Croácia contra a Escócia na Eurocopa - Pool via REUTERS
Modric comemora gol da Croácia contra a Escócia na Eurocopa Imagem: Pool via REUTERS

Colaboração para o UOL, em São Paulo

22/06/2021 17h52

A Croácia venceu a Escócia por 3 a 1 hoje, no Hampden Park, em Glasgow. A vitória garantiu a classificação dos croatas para as oitavas de final da Eurocopa. Os gols foram marcados por Vlasic, Modric e Perisic pelos comandados de Zlatko Dalic, enquanto McGregor diminuiu para os escoceses.

Com o resultado, os croatas conquistaram quatro pontos, tiraram a Escócia da briga e aram a República Tcheca no saldo de gols. Logo, Inglaterra, Croácia e República Tcheca foram os classificados do grupo D.

Mesmo com um começo complicado após a derrota para a Inglaterra e o empate contra a República Tcheca, a equipe croata contou não só com sua vitória, mas também com as combinações de resultados para seguir viva no torneio do Velho Continente.

A Inglaterra, líder do grupo volta aos gramados na terça-feira (29), contra o segundo colocado do grupo F. Já a Croácia jogará na segunda-feira (28) contra o segundo colocado do grupo E. A República Tcheca aguarda os resultados finais da fase de grupos para saber seu adversário.

O jogo:

Começo pressão da Escócia

Nos dez primeiros minutos de jogo, os escoceses colocaram pressão no setor defensivo da Croácia. Em dois lances com Adams, o goleiro Livakovic precisou trabalhar para evitar que o placar fosse aberto.

Croácia saí na frente

A Croácia inaugurou o placar do Hampden Park. Em uma boa jogada com troca de es, Juranovic cruzou na área e Perisic escorou de cabeça para Vlasic marcar o primeiro do jogo.

Jogo truncado

Mesmo com maior posse de bola dos croatas, a Escócia teve algumas oportunidades após o gol da Croácia. Após uma chance clara de Modric, aos 21 minutos, os adversários responderam nos minutos seguintes com dois ataques perigosos. Depois disso, os comandados de Zlatko Dalic colocaram velocidade no jogo e assustaram o goleiro Marshall três vezes.

Depois da "tempestade"

Diante de um aproveitamento melhor da Croácia, a Escócia deixou tudo igual. Aos 41 minutos, após duas rebatidas da defesa croata, McGregor chegou batendo na entrada da área e fez o primeiro gol escocês na Eurocopa 2020.

Croácia 'on fire'

Nos 10 primeiros minutos do segundo tempo, a Croácia chegou duas vezes, ambas foram com Perisic, que obrigaram o goleiro Marshall trabalhar para evitar uma possível mudança no placar. Porém, aos 16 minutos, Modric marcou um golaço com a parte de fora do pé após a troca de es entre Petkovic e Kovacic.

Fechou a tampa

Com 31 minutos de jogo, o meio-campista Perisic aproveitou uma cobrança de escanteio de Modric e ampliou o placar para a Croácia. Logo após fazer o terceiro dos croatas, o camisa 4 deixou a partida.