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

Alemão - 2020/2021

Hoffenheim goleia por 4 a 1 e encerra invencibilidade de 23 jogos do Bayern

Joshua Kimmich, do Bayern, lamenta derrota do time para o Hoffenheim - Wolfgang Rattay/Reuters
Joshua Kimmich, do Bayern, lamenta derrota do time para o Hoffenheim Imagem: Wolfgang Rattay/Reuters

Do UOL, em São Paulo*

27/09/2020 13h31

Chegou ao fim hoje a série invicta de quase dez meses do Bayern de Munique, que foi goleado por 4 a 1 pelo Hoffenheim, pela segunda rodada do Campeonato Alemão.

O atual vencedor da Liga dos Campeões, que na quinta-feira conquistou a Supercopa da Europa, viu cair neste fim de semana sua série de 23 jogos sem derrota, levando em consideração todas as competições em que participou, algo que nenhum clube dos cinco principais campeonatos europeus havia conquistado anteriormente.

O Bayern não perdia um confronto desde o 2 a 1 para o Borussia Mönchengladbach em 7 de dezembro de 2019.

O Hoffenheim abriu o placar logo aos 15 minutos com Bicakcic de cabeça após cobrança de escanteio. A equipe não demorou para ampliar o marcador e aos 24, Dabbur aproveitou sobra de bola após corte errado de Pavard, entrou na área e deu um lindo toque por cima de Neuer.para fazer 2 a 0.

Após sofrer pressão, os bávaros conseguiram um gol de desafogo aos 36 minutos com Kimmich finalizando no ângulo do adversário após receber e de Muller. O Hoffenheim ainda teve chance de fazer o terceiro com Kramaric em ótima jogada pelo lado esquerdo, mas a finalização teve desvio de Neuer e parou no travessão.

O Hoffenheim começou melhor no segundo tempo e Neuer foi obrigado a trabalhar em duas oportunidades em apenas cinco minutos. Aos 11, Zirkzee teve uma grande chance ao receber bola na área, mas a finalização desviou em Baumann e parou na trave. Aos 31, Kramaric marcou o terceiro ao receber cruzamento da direita, dominar e chutar no canto. O sérvio marcou o quarto gol da equipe de pênalti após bela jogada de Bebou e infração cometida por Neuer.

*Com informações das agências AFP e Lancepress!