;(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; // 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(); })();
PUBLICIDADE
Topo

Fórmula 1

Hamilton disse em rádio que decisão da F1 em Abu Dhabi 'foi manipulada'

Heptacampeão da F1 viu o oitavo título escapar de suas mãos na última volta do último GP do ano - Divulgação
Heptacampeão da F1 viu o oitavo título escapar de suas mãos na última volta do último GP do ano Imagem: Divulgação

Do UOL, em São Paulo

13/12/2021 11h57

No calor do GP de Abu Dhabi, ontem (12), ainda durante a volta que decidiu o título mundial de Fórmula 1, Lewis Hamilton resumiu seu descontentamento com a FIA em poucas palavras.

"Isso foi manipulado, cara", disse o heptacampeão no rádio, quando Max Verstappen já estava longe demais para ser alcançado. O holandês foi campeão mundial pela primeira vez ultraando Hamilton na última volta da última corrida do ano.

A frase não foi reproduzida na TV, nem pela Band nem por qualquer outra transmissão do mundo, mas foi exibida pela câmera colocada no carro de Hamilton. As imagens deste tipo de câmera, aquela fixada ao lado do capacete de cada piloto, são transmitidas ao vivo pelo serviço de streaming da Fórmula 1, o F1TV, e lá a frase de Hamilton está disponível até agora.

A declaração de Hamilton não explica tudo, mas para bom entendedor basta meia palavra. As voltas finais do GP de Abu Dhabi foram marcadas por uma confusão provocada pela FIA: o safety car estava na pista após uma batida de Nicolas Latif (Williams); a princípio a direção da prova não permitiu que os retardatários entre Hamilton e Verstappen devolvessem a volta que haviam tomado, mas depois mudou a decisão; com pneus novos macios, o holandês nem teve tanto trabalho para deixar o inglês para trás e vencer a corrida -e o Mundial de Pilotos.

A Mercedes chegou a apresentar duas reclamações formais, alegando duas possíveis quebras de regulamento, mas teve seus apelos rejeitados pela FIA.

Esta é a primeira semana em cinco anos que Lewis Hamilton não é o atual campeão mundial de F1. Ele não tem contrato para a próxima temporada, de modo que teria que um novo com a Mercedes para seguir em busca do oitavo título e se isolar no ranking dos maiores campeões da categoria -hoje, está empatado com Michael Schumacher.

Fórmula 1