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

Esse conteúdo é antigo

Rússia anuncia nova retirada militar da Crimeia após fim de manobras

16.fev.2022 - Trem de carga transportando veículos militares da Rússia, que saem da península da Crimeia em direção ao continente russo ao longo de uma ponte ferroviária sobre o Estreito de Kerch - Ministério da Defesa da Rússia/via REUTERS
16.fev.2022 - Trem de carga transportando veículos militares da Rússia, que saem da península da Crimeia em direção ao continente russo ao longo de uma ponte ferroviária sobre o Estreito de Kerch Imagem: Ministério da Defesa da Rússia/via REUTERS

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

17/02/2022 07h13Atualizada em 17/02/2022 07h26

O governo da Rússia anunciou nesta quinta-feira (17) que prossegue com a retirada militar da Crimeia, península ucraniana anexada, onde a presença de tropas de Moscou alimentava os temores de uma invasão.

"As unidades do distrito federal do Sul que terminaram sua participação em manobras táticas nas bases da península da Crimeia estão voltando para suas bases em trem", afirmou o ministério da Defesa russo às agências de notícias.

Um canal de televisão local exibiu imagens de um trem com caminhões militares atravessando a ponte que liga a Crimeia ao território russo.

Há várias semanas, os países ocidentais expressam inquietação com a possibilidade de uma invasão da Ucrânia pela Rússia, que concentrou mais de 100 mil soldados na fronteira.

Após duas semanas de grande tensão, a Rússia, que sempre negou qualquer intenção de invasão, anunciou na terça-feira a retirada de parte de suas tropas da fronteira com a Ucrânia. Os países ocidentais afirmam que não veem as declarações traduzidas em fatos e denunciam que, inclusive, a Rússia está enviando maias tropas para a região.

Saída da Crimeia

Ontem, a Rússia havia anunciado o fim das manobras militares e a retirada de parte de suas tropas da península ucraniana anexada da Crimeia, onde a presença de soldados alimentou os temores de uma invasão da Ucrânia.

"As unidades do distrito militar do sul finalizaram os exercícios táticos nas bases da península da Crimeia, retornando a suas bases permanentes", afirmou ontem o ministério russo da Defesa em um comunicado, citado pelas agências notícias locais.

O comunicado informou que tanques, veículos de infantaria e artilharia deixariam a Crimeia de trem.

*Com AFP