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

Postura irritada de Abel já gera críticas na política do Palmeiras

Técnico Abel Ferreira, do Palmeiras, na final contra o São Paulo - Cesar Greco/ Palmeiras
Técnico Abel Ferreira, do Palmeiras, na final contra o São Paulo Imagem: Cesar Greco/ Palmeiras

Diego Iwata Lima

Do UOL, em São Paulo

25/05/2021 04h00

Grupos de WhatsApp de conselheiros do Palmeiras, tanto da oposição, quanto da situação, entraram em combustão após a derrota alviverde para o São Paulo na final do Paulista, no domingo (24). A coluna teve o a algumas mensagens trocadas entre os cardeais. Para além da parte tática é técnica do time, o técnico Abel Ferreira foi muito criticado pela postura irritada que tem demonstrado à beira do gramado, como no lance em que encarou o meia Liziero, do São Paulo, após lance envolvendo Rony, no primeiro tempo do jogo.

Vale lembrar que, ao contrário de Paulo Nobre, por exemplo, Mauricio Galiotte, tido como um conciliador, tem muita interlocução com conselheiros. A contratação de Vanderlei Luxemburgo, por exemplo, foi fortemente recomendada e acatada por Galiotte no fim de 2019, após as demissões de Mano Menezes e Alexandre Mattos.

CBF quer árbitros atentos para relatar confusão com cartolas em estádios vazios

Apesar dos jogos sem torcida, mas diante de um ambiente quente nas arquibancadas pelo comportamento de dirigentes, a comissão de arbitragem da CBF orientou os árbitros a ficarem de olho e registrarem em súmula episódios com "irregularidades significativas" protagonizadas por quem estiver presente. Essa é uma das diretrizes enviadas ao quadro nacional nesta semana para o Brasileirão 2021. O árbitro poderá acompanhar o relatório do delegado da partida, que tem como uma das atribuições enviar à entidade fatos ocorridos perto do campo de jogo. A equipe de arbitragem deve inserir na súmula a identificação dos envolvidos. Esse é mais um elemento que pode ser usado pelo STJD para casos de ofensa ou confusão que ocorrerem na arquibancada. (Por Igor Siqueira)

Sport x Náutico chega perto dos 60 pontos de Ibope e impressiona Globo

A final do Campeonato Pernambucano 2021 entre Sport x Náutico no último domingo (23) impressionou a Globo em termos de audiência. Segundo dados do Ibope no Recife, o jogo marcou 39 pontos de média, chegando a picos de 57 - perto dos 60 pontos, algo quase inatingível em TV aberta atualmente. A coluna apurou que o fato assustou e foi alvo de debates no Esporte da Globo ontem (24). Na visão de executivos, o jogo mostrou a força que tem os Estaduais no futebol, mas que o calendário atual não favorece a disputa regional. A Globo quer mudanças na fórmula de disputa para seguir exibindo os torneios e já deixou isso claro em outras vezes. (Por Gabriel Vaquer)

Novo diretor de marketing tem missão de alavancar receitas no Flamengo

Novo diretor de marketing do Flamengo, Marcos Senna começou efetivamente a botar a mão na massa no clube nesta segunda-feira. Ele foi o "sobrevivente" de um processo seletivo no qual o Fla recebeu cerca de 500 currículos —até porque divulgou a vaga no Linkedin. Senna, que estava na Tim e já trabalhou na Conmebol e na Rio-2016, tem como metas alavancar as receitas variáveis dos contratos de patrocínio já firmados. O Flamengo recentemente negociou todas as propriedades dos uniformes. Outros projetos estratégicos também estão em pauta. (Por Igor Siqueira)

Conflito de versões sobre ausência de Cuesta causam turbulência no Inter

A ausência de Victor Cuesta contra o Grêmio no jogo decisivo do Campeonato Gaúcho, domingo, foi justificada por Miguel Ángel Ramírez com o risco de lesão. Segundo o treinador, o jogador ou por uma infiltração antes do jogo contra o Olimpia, no Paraguai, e jogar o clássico seria um risco. Mas, fontes consultadas pelo UOL Esporte disseram que o jogador não fez infiltração e apenas tinha um desconforto, estando apto a jogar e fora do time por opção do treinador. Internamente, ainda de acordo com a apuração, a afirmação de Ramírez gerou turbulência. O zagueiro argentino, inclusive, cogita conversar com o técnico sobre o caso. Não é o primeiro indício de descontentamento no Inter. Edenilson e Guerrero, lideranças do grupo, também já tinham se mostrado incomodados em outros momentos. (Por Marinho Saldanha)