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

Futebol Feminino: Suécia domina os EUA e vence com autoridade por 3 a 0

Stina Blackstenius fez dois gols pela Suécia e foi o grande nome na vitória contra os EUA - Dan Mullan/Getty Images
Stina Blackstenius fez dois gols pela Suécia e foi o grande nome na vitória contra os EUA Imagem: Dan Mullan/Getty Images

Do UOL, em São Paulo

21/07/2021 07h23

Medalhista de prata no Rio-2016 (com a técnica Pia Sundhage, hoje na seleção feminina do Brasil), a Suécia ou por cima dos Estados Unidos e venceu por 3 a 0 na abertura do grupo G do futebol feminino. Jogando no Tokyo Stadium, as tetracampeãs olímpicas foram dominadas praticamente durante todo o jogo pelas atuais vice-campeãs, que mostraram porque são fortes candidatas ao ouro. O triunfo foi construído com dois gols de Blackstenius e um de Hurtig.

Para se ter uma ideia do tamanho da vitória sueca, o resultado quebrou uma invencibilidade de 44 jogos das norte-americanas. Além disso, a Suécia voltou a bater os Estados Unidos após sete anos. Completando a rodada do grupo, a Austrália venceu a Nova Zelândia por 2 a 1 e está na segunda colocação.

Suécia domina com autoridade

Os primeiros 45 minutos foram quase todos dominados pela Suécia. Com Rapinoe no banco de reservas, mas contando com Alex Morgan no comando do ataque, os Estados Unidos tiveram muitas dificuldades para parar a intensidade das adversárias. A goleira Alyssa Naeher fez pelo menos três grandes defesas até ser superada por Blackstenius, que se antecipou no cruzamento pela direita e abriu o placar com uma cabeçada aos 24 minutos. No restante da etapa inicial, os EUA ainda carimbaram a trave com Lavelle, mas estiveram mais perto de levarem o segundo gol do que do empate.

Blackstenius marca de novo, e substituta fecha a conta

Com a entrada de Carli Lloyd, os Estados Unidos voltaram do intervalo esboçando uma postura mais ousada no ataque. Por outro lado, as dificuldades para marcar o time sueco permaneceram, e não demorou muito para sair o segundo gol, novamente com Blackstenius. Na cobrança de escanteio, Ilestedt subiu sozinha e testou no pé da trave. No rebote, a camisa 11 só completou para aumentar a vantagem sueca.

Faltando pouco menos de meia hora para o fim do jogo, a atacante Megan Rapinoe entrou em campo. Em pouco tempo, fez uma boa jogada e participou de outra que terminou na trave. Mas a Suécia estava demais no jogo. Voando pelo lado direito, Glas colocou a bola na cabeça de Hurtig, justamente a substituta da artilheira Blackstenius. A reserva mostrou o mesmo oportunismo da companheira e subiu livre para dar números finais ao jogo. 3 a 0 placar final.

Grã-Bretanha confirma favoritismo contra Chile

Mais cedo, pelo grupo E, a forte seleção da Grã-Bretanha bateu a estreante Chile por 2 a 0 na cidade de Sapporo. No primeiro tempo, a centroavante Ellen White foi a responsável por marcar o primeiro gol do futebol feminino nas Olimpíadas de Tóquio. Na etapa final, a camisa 9 voltou a balançar as redes, dessa vez em um golaço de voleio após assistência de Lucy Bronze, eleita melhor jogadora do mundo.