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

Grêmio

Lucas Silva vive expectativa por 1º título no Grêmio: "Marcado na história"

Lucas Silva, do Grêmio, vive expectativa de primeiro título pelo clube - RICHARD DUCKER/ESTADÃO CONTEÚDO
Lucas Silva, do Grêmio, vive expectativa de primeiro título pelo clube Imagem: RICHARD DUCKER/ESTADÃO CONTEÚDO

Jeremias Wernek e Marinho Saldanha

Do UOL, em Porto Alegre

30/08/2020 04h00

Lucas Silva tem pouco tempo de Grêmio, mas já pode conquistar seu primeiro título. Titular em 10 dos 16 jogos do Tricolor no Gauchão, participando de outros três, o volante vive a expectativa de erguer a taça ao lado dos companheiros neste domingo.

"Esses momentos são sempre especiais para nós. É o momento mais esperado, de poder coroar o trabalho que foi feito. Para a torcida também é diferente e sabemos a ansiedade que toma conta de todos. Pude conquistar títulos importantes nos últimos anos e, quando cheguei ao Grêmio, disse que gostaria de continuar assim aqui. Espero que no domingo já possa começar e vamos seguir em busca de outros", disse ao UOL Esporte.

Com 27 anos, Lucas foi campeão do Brasileiro e da Copa do Brasil pelo Cruzeiro. Duas vezes cada torneio. Além de ter conquistado três vezes o Campeonato Mineiro.

"Com certeza uma expectativa muito grande. Poder conquistar títulos é o que nos faz ficar marcados na história dos clubes. Foi assim comigo no Cruzeiro e agora, em pouco tempo de Grêmio, já tenho minha primeira oportunidade. Temos uma boa vantagem, mas cada jogo tem sua história e precisamos entrar muito concentrados para não errar e conseguir repetir mais uma boa atuação", explicou.

A concorrência no meio-campo gremista não incomoda o jogador, que deve começar jogando o duelo de volta da final em razão da suspensão de Matheus Henrique.

"Isso é sinal da qualidade do nosso elenco. Temos bons jogadores em todas as posições e a altura no banco para as substituições. Tenho conseguido atuar com regularidade, como titular ou saindo do banco, e era isso que vinha buscando após um tempo parado. Para mim tem sido importante e hoje já me sinto à vontade e totalmente adaptado ao clube e ao estilo de jogo da equipe", disse.

Nesta temporada são 20 jogos pelo Tricolor. E a capacidade de participar da criação além da marcação garante frequência na equipe de Renato Gaúcho.

"O nosso meio-campo é um setor de muita qualidade, com jogadores que conseguem fazer funções diferentes, de defender e atacar a todo momento. Isso hoje em dia é fundamental e permite ao Renato fazer as modificações de acordo com cada adversário. A temporada é muito longa, o calendário apertado, então ele vai precisar de todos bem para brigarmos pelos títulos", finalizou.

O Grêmio bateu o Caxias no jogo de ida por 2 a 0. Por isso, será tricampeão gaúcho com qualquer empate, vitória ou até derrota por um gol de diferença no duelo das 16h (de Brasília), deste domingo, na Arena.

Grêmio