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

CR7 bate recordes com 1º gol de falta pela Juve após 42 tentativas falhas

Cristiano Ronaldo fez o primeiro de falta pela Juve depois de tentar 42 vezes - Valerio Pennicino/Getty Images
Cristiano Ronaldo fez o primeiro de falta pela Juve depois de tentar 42 vezes Imagem: Valerio Pennicino/Getty Images

Do UOL, em São Paulo

04/07/2020 14h55

A Juventus goleou o Torino na tarde de hoje (4) por 4 a 1 e se consolidou ainda mais na liderança do Campeonato Italiano. Além de ver o goleiro Gianluigi Buffon estabelecer o recorde de mais jogos disputados na história do torneio (648 partidas), os torcedores da Velha Senhora puderam assistir ao primeiro gol de falta de Cristiano Ronaldo no clube, que também bateu algumas marcas.

Depois de 42 tentativas frustradas, de acordo com o "OptaPaolo", perfil no Twitter que traz dados e estatísticas do futebol italiano, o astro português "desbloqueou" este gol que faltava em grande estilo. No começo da etapa final, aos 15 minutos, CR7 cobrou com perfeição uma infração da intermediária. A bola ou pela barreira e entrou no ângulo do goleiro Sirigu.

Cristiano Ronaldo, que ainda deu assistência para Cuadrado fazer o seu, ampliou os números pela Juve neste sábado. Agora, ele tem 28 gols em 38 jogos na temporada, 25 só na Série A.

Ele balançou as redes ou serviu um companheiro para marcar nas últimas 16 partidas da competição nacional e se tornou o primeiro jogador a marcar mais de 25 gols nas ligas espanhola, italiana e inglesa.

Como se não bastasse, o português é o primeiro jogador do time oito vezes campeão consecutivo a marcar 25 gols no Italiano desde Omar Sivori, que atingiu o número na temporada 1960/61.

A Juventus venceu o Torino por 4 a 1 e abriu sete pontos de vantagem para a vice-líder Lazio, que ainda joga na rodada contra o Milan. Além de CR7 e Cuadrado, os gols do líder do Italiano foram marcados por Dybala e Djidji (contra). Belotti descontou.