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

Botafogo

Botafogo mostra força do elenco em virada heroica e afasta de vez a crise

Do UOL, no Rio Janeiro (RJ) em São Paulo (SP)

20/06/2022 04h00

Jogando com um a menos desde os seis minutos do primeiro tempo, o Botafogo começou perdendo por 2 a 0 para o Internacional, mas conquistou uma virada heroica por 3 a 2 na noite de ontem (19). O triunfo no Beira-Rio, na 13ª rodada do Campeonato Brasileiro, serviu para mostrar o poder do elenco e afastar de vez qualquer resto de crise que ainda existia em General Severiano.

Ao todo, o Alvinegro tinha nove desfalques para este jogo: Kanu, Cuesta, Carlinhos, Diego Gonçalves, Del Piage, Luís Oyama, Lucas Fernandes, Rafael, Sauer e Victor Sá. Mesmo com tantas baixas, o técnico Luis Castro conseguiu montar um time competitivo, que soube jogar em desvantagem numérica para conquistar o triunfo fora de casa.

O gol marcado por Hugo, que é da base e ou a ganhar chance mais recentemente, aos 52' do segundo tempo, ainda contou com a participação de dois atletas que vieram do banco. Matheus Nascimento iniciou a jogada e tentou rolar para Jeffinho, antes de a bola sobrar para o lateral-esquerdo balançar a rede.

Na coletiva após a partida, o técnico Luis Castro destacou a força de seu plantel, dizendo que gosta de todos de seu elenco. "Os vejo treinar todos os dias e posso dizer que todos me impressionam pelo seu caráter, dignidade pela forma como defendem não só o clube, mas a sua profissão", contou.

O espírito de união também foi muito elogiado pelo comandante. Mesmo destacando a necessidade de contratações no Glorioso, Castro pondera que é preciso escolher bem quem irá chegar, para que ele ajude na unidade que foi formada entre os jogadores.

"As contratações têm de ser grande responsabilidade da istração para juntar jogadores a esse grupo. Tem de ser perfil técnico, tático, mas também psicologicamente perfil e caráter de entender o que são as nossas dificuldades. Como sabem, não temos centro de treinamento ideal, é um local que vamos construir. Temos alguma instabilidade gerado por alguma falta de infraestrutura. Mas estamos ultraando essas dificuldades. Por isso, tem que ser esse perfil. Vamos preencher alguns lugares deficitários no elenco. A direção já tem os alvos e acho que terão contratações", declarou.

Crise distante

Há cinco dias, na quarta (15), a torcida do Botafogo invadiu o CT para cobrar o time, que vinha de quatro derrotas consecutivas no Brasileirão. No entanto, o clima desfavorável parece bem mais distante agora. Houve, inclusive, torcedores que foram receber o time no desembarque.

A vitória por 1 a 0 sobre o São Paulo em casa na quinta (16) e o triunfo sobre o Inter, no Beira-Rio, impulsionaram a campanha da equipe. O Alvinegro chegou aos 18 pontos ficando à beira da zona de classificação para a Libertadores, na sétima colocação.

Botafogo