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

Abel se assusta após desabafo e busca "media training" no Palmeiras

Presidente Maurício Galiotte e técnico Abel Ferreira conversam com o elenco do Palmeiras na Academia de Futebol - Cesar Greco/SE Palmeiras
Presidente Maurício Galiotte e técnico Abel Ferreira conversam com o elenco do Palmeiras na Academia de Futebol Imagem: Cesar Greco/SE Palmeiras

Diego Iwata Lima

Do UOL, em São Paulo

30/06/2021 04h00

Abel Ferreira ficou preocupado com a proporção que seu desabafo após a derrota para o Red Bull Bragantino tomou e procurou o departamento de comunicação do Palmeiras. O português quer desenvolver com os profissionais da área estratégias para ar com mais tranquilidade pelas entrevistas coletivas, sem ficar tanto à mercê de abalos emocionais momentâneos, como foi o caso.

A diretoria do Palmeiras, por outro lado, se abalou menos do que o imaginado com o desabafo do treinador português. A parte diretiva do clube já está habituada com o temperamento e o modo de falar do técnico, mas entendeu que era importante vir a público pontuar o desapontamento com a fala do técnico antes mesmo de se reunir com ele no particular. Os dirigentes entendem que a qualidade do trabalho dele se sobrepõe a algumas imaturidades na maneira de se comunicar com a imprensa.

Debate por liga de clubes abre espaço para Andrés Sanchez

O ex-presidente do Corinthians Andrés Sanchez foi à reunião da liga dos clubes, segunda-feira, na condição de convidado do presidente Duilio Monteiro Alves. Andrés falou pouco, mas na oportunidade que teve de tomar a palavra e, segundo relato de quem estava na sala de reunião, o discurso dele foi ressaltar a relevância da importância da união entre os dirigentes no processo de desenvolvimento da liga. (Por Igor Siqueira)

Memória: ex-presidente corintiano ajudou na ruína do Clube dos 13

Andrés teve participação ativa na implosão do Clube dos 13 —associação dos clubes de maior torcida do país—, em 2011. Segundo ele mesmo contou ao jornalista Rodrigo Capelo, no livro "O futebol como ele é", sua atuação para minar o bloco se deu após uma promessa do então presidente da CBF, Ricardo Teixeira. O dirigente teria dito a Andrés que se Kléber Leite, ex-presidente do Flamengo, asse a comandar o Clube dos 13, a CBF daria o direito aos clubes de organizar a liga na ocasião. (Por Igor Siqueira)

Argentina é a única ausência no quarteto de seleções que Goiânia recebe nas quartas

A seleção da Argentina é a única que não está em solo goiano a dois dias do início da disputa das quartas da Copa América. O time de Lionel Scaloni seguiu seu planejamento de voltar ao CT da AFA, em Ezeiza, na Argentina, logo após cada partida disputada no Brasil. A equipe de Messi só viaja para Goiânia, onde enfrenta o Equador, na véspera da partida, sexta-feira (2). Adversário dos argentinos, o Equador está em Goiânia desde o dia 21 e fará seu terceiro jogo consecutivo no estádio Olímpico. A equipe de Gustavo Alfaro treina no estádio Serra Dourada. Peru e Paraguai também já se encontram na capital de Goiás e realizam suas atividades respectivamente no CT do Dragão e estádio Antônio Accioly, ambos pertencentes ao Atlético-GO. (Por Éder Traskini)