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

Notícias em primeira mão dos bastidores do futebol, informações exclusivas sobre o seu time, novidades do mercado da bola e o melhor do jornalismo esportivo em um só lugar. Só para s UOL!

Fla faz força por Maracanã com torcida na Libertadores, mas prefeito reluta

Mosaico do Flamengo no Maracanã  - Divulgação/Flamengo
Mosaico do Flamengo no Maracanã Imagem: Divulgação/Flamengo

Leo Burlá

Do UOL, no Rio de Janeiro

27/07/2021 04h00

Após conseguir mandar seu último jogo na Libertadores com parte do Mané Garrincha liberado para a torcida, o Flamengo intensifica seus esforços para atuar com o Maracanã parcialmente aberto, porém esbarra no prefeito Eduardo Paes, que se mostra irredutível com a medida.

O plano do Rubro-negro é que o jogo diante do Olimpia (PAR), pelas quartas da Libertadores, fosse disputado com aproximadamente 30% da capacidade do Maraca, mas Paes reluta e o sinal verde parece complicado. Disposto a repetir a dose e ter a Nação ao lado, a cúpula rubro-negra estuda as alternativas e já tem convites de João Pessoa e Brasília.

Empréstimo casado de Angulo e Pedrão é parte de projeto do Palmeiras

O Portimonense (POR) não estava inicialmente interessado na contratação por empréstimo do atacante colombiano Ivan Angulo. Os portugueses vieram atrás do zagueiro Pedrão, que já conheciam por sua boa agem pelo Nacional (POR). Mas o Palmeiras convenceu o clube português a levar também o atacante, como parte de um projeto de parceria pela formação do jogador. O Palmeiras entende que Angulo é um jogador promissor, mas que precisa de minutos em campo, preferencialmente em uma condição em que possa evoluir. Não foi isso que aconteceu nas agens dele por Cruzeiro e Botafogo, na ordem, clubes onde ele jogou emprestado. (Por Diego Iwata Lima)

Diálogo entre Santos e Benfica faz agentes de Kaio forçarem saída

A forma como a presidência do Santos conduziu a negociação com o Benfica incomodou muito os agentes do atacante Kaio Jorge. Os clubes conversaram entre si, se acertaram, mas não buscaram contato com Giuliano Bertolucci, que tem ótima entrada com os portugueses. Ao saber do acordo encaminhado, Bertolucci avançou na negociação com o Juventus, da Itália — clube que Kaio mais tem interesse em atuar — para firmar um pré-contrato e forçar a saída do centroavante. A falta de comunicação do presidente Andres Rueda foi determinante para apressar a definição do futuro do jovem jogador. (Por Gabriela Brino)