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

Fluminense

Odair Hellmann rejeita rótulos e exalta 'campeonato diferente' do Flu

Odair Hellmann dá instruções ao time do Fluminense - Lucas Merçon / Fluminense
Odair Hellmann dá instruções ao time do Fluminense Imagem: Lucas Merçon / Fluminense

Colaboração para o UOL, em São Paulo

02/11/2020 19h23

Vivendo bom momento à frente do Fluminense, o treinador Odair Hellmann declarou que é muito difícil se estabelecer no mercado brasileiro e que, por outro lado, é fácil ser rotulado. Com menos de três anos de carreira e agens por Internacional e Fluminense, apenas, o técnico destacou que vem trabalhando duro para se afirmar, mesmo comandando equipes em reconstrução - caso do time colorado em 2018 e do clube carioca na atual temporada.

"Eu tenho dois anos e dez meses de carreira e as pessoas já querem me rotular. Não se rotula ninguém, nem com trinta anos de carreira, imagina com menos de três anos. Estou iniciando minha carreira, mas muito bem. Estou trabalhando duro, em times com dificuldades financeiras, em processo de reconstrução. E não é fácil se estabelecer em um mercado tão competitivo vindo da base. (...) Tem situações que estou em boa excelência, mas muitas situações para evoluir, situações que ainda vão surgir na minha carreira e eu vou aprender a lidar. Estou feliz porque é o terceiro Brasileiro da minha carreira e estou conseguindo sempre brigar na parte de cima da tabela", disse Odair em entrevista ao Seleção SporTV.

Anunciado no Fluminense em dezembro de 2019, Odair Hellmann vive, hoje, um de seus melhores momentos à frente do time tricolor. Em outubro, o time não foi derrotado no Campeonato Brasileiro e alcançou o G-4 da competição, posição mantida na última rodada com o triunfo fora de casa sobre o Fortaleza. Odair ressaltou que o Flu tem alcançado o objetivo de fazer um 'campeonato diferente' em relação aos últimos anos, quando o clube brigou contra o rebaixamento.

"A ideia quando eu cheguei era fazer um campeonato diferente dos últimos, em que o time tem ado dificuldade. Isso chama atenção e traz desconfiança interna e externa, dificulta processos. O Fluminense precisava de uma retomada para fazer um Brasileiro mais regular, consistente, gerando confiança para buscar espaços, posições na tabela, melhor colocação e, no final, comemorar coisas boas. Esse é o objetivo traçado. Temos conseguido até agora", continuou.

Eliminações da Sul-Americana e da Copa do Brasil

Se o momento atual é bom, Odair Hellmann já viveu momentos de pressão no Fluminense, nas eliminações na Copa Sul-Americana, diante do Unión La Calera (CHI), e na Copa do Brasil, diante do Atlético-GO. O treinador valorizou a continuidade do trabalho e ponderou que oscilações eram esperadas durante a temporada.

"Muito se discute o trabalho a longo prazo. Esse tipo de trabalho permite ao treinador um conhecimento mais amplo do que acontece e dos jogadores e suas características. Esse ano nós já oscilamos, na Sul-Americana, por exemplo. Era um momento de reconstrução do grupo. Na Copa do Brasil, tivemos que mudar a equipe dentro de uma semana decisiva, o que gerou oscilação também", completou.

Fluminense