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

Guerra da Rússia-Ucrânia

Notícias do conflito entre Rússia e Ucrânia


Esse conteúdo é antigo

Rússia x Ucrânia: homem se protege atrás de tanque; veja vídeos da guerra

Do UOL, em São Paulo

25/02/2022 14h24Atualizada em 25/02/2022 15h35

Explosões em Kiev marcaram o início do segundo dia de invasão russa na Ucrânia. Na madrugada, um foguete disparado pela Rússia atingiu um prédio na capital, deixando três feridos. Repórteres da CNN também relataram ter escutado duas explosões no centro de Kiev. O clima de tensão não diminuiu com o amanhecer.

Durante a tarde, por volta das 13h50 (horário local), militares da Rússia entraram em Kiev e fecharam o o oeste para a cidade. O governo russo também diz ter bloqueado as entradas da cidade de Chernihiv, localizada no norte da Ucrânia.

Um aeródromo estratégico de Gostomel, nos arredores da capital Kiev, e a usina nuclear de Chernobyl também estão sob controle da Rússia. Mais de uma centena de pessoas morreram desde o início do conflito, inclusive crianças.

Vídeos que circulam nas redes sociais mostram que as tropas da Rússia intensificaram os ataques. Veja:

Ucrânia distribui 18 mil armas entre civis

Para ampliar a defesa contra as tropas russas, a Ucrânia incentivou civis a apoiarem o Exército. Nas redes sociais, as Forças Armadas divulgaram uma convocação para lutarem na guerra contra a Rússia.

Quem estiver pronto para manter as armas, junte-se às fileiras das Forças Armadas da Ucrânia. Tudo o que precisa é de um aporte. Apenas um aporte. Damos as armas a todos os patriotas que estão prontos para usá-las contra o inimigo sem hesitação! Mantendo a calma!
Ministro da Defesa, Oleksii Reznikov

Em Kiev, foram distribuídas 18 mil submetralhadoras e munições entre ontem e hoje, informou o governo.

A Ucrânia também proibiu a saída de homens de 18 a 60 anos do país, devido à imposição da lei marcial, que altera as regras de funcionamento de um país, deixando de lado as leis civis e colocando em vigor leis militares.

Destruição em Kiev após ataques; moradores buscam abrigo em metrô

Vídeos mostram a destruição em Kiev após ataques russos. A Ucrânia acusa a Rússia de atacar infraestruturas civis, mas o Kremlin nega.

Um brasileiro narrou os momentos de pânico que viveu na madrugada de hoje em Kiev após um bombardeio perto de seu prédio. Ele e os moradores do edifício se esconderam em um bunker.

Desde ontem, uma parte da população busca refúgio em estações do metrô para se proteger de possíveis ataques aéreos —a Ucrânia tem a estação de metrô mais profunda do mundo, construída a 105,5 metros abaixo da superfície em novembro de 1960.

O prefeito de Kiev, Vitali Klitschko, anunciou ontem que quatro estações de metrô seriam desativadas para serem usadas como abrigos.

Milhares de ucranianos decidiram fugir do país após o início da invasão russa. A ACNUR (agência de refugiados da ONU - Organizações Nações Unidas) estima que mais de 100 mil pessoas se deslocaram ontem dentro da Ucrânia, "fugindo da violência por segurança".

Segundo cálculos da União Europeia, mais de um milhão de pessoas podem chegar a outras nações nos próximos dias. Polônia, Romênia e Hungria já anunciaram planos para receber os ucranianos de maneira emergencial.