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

Ataque a hospital deixa quatro mortos, diz comando militar da Ucrânia

Do UOL, em São Paulo

24/02/2022 11h46Atualizada em 24/02/2022 14h05

Um ataque a um hospital na região de Donetsk deixou quatro mortos após um projétil da Rússia atingir o local, informou hoje o comando militar da Ucrânia. Segundo as autoridades ucranianas, outras 10 pessoas ficaram feridas, entre elas seis médicos.

Donestk foi uma das regiões tomadas por rebeldes pró-Rússia reconhecidas pelo presidente russo, Vladimir Putin, como território independente na segunda-feira (21).

Ainda de acordo com a Ucrânia, a Rússia realizou 203 ataques desde o início do dia, com combates acontecendo em quase todo o território.

Mapa Ucrania - Arte/ UOL - Arte/ UOL
Imagem: Arte/ UOL

Em uma atualização separada do Ministério das Relações Exteriores da Ucrânia, emitida às 14h, horário local, autoridades disseram que um helicóptero russo K-52 e três helicópteros perto de Gostomel foram abatidos na região de Kiev, perto de Mezhyhirya. Os combates estão acontecendo também na região de Lugansk, perto da cidade de Schastye e "o inimigo continua sofrendo perdas", disse o comunicado.

O ministério acrescentou que "os guardas de fronteira juntamente com as Forças Armadas mantêm a defesa e repelem os ataques". Na região de Odesa, dez militares teriam recebido ferimentos de estilhaços durante um ataque.

Ataque a complexo residencial deixa idosas feridas

Um complexo de apartamentos em Chuhuiv, cerca de 530 km de Kiev, capital da Ucrânia, foi alvo de um ataque aéreo hoje durante a ofensiva russa ao país vizinho e deixou idosas feridas. Uma das imagens, com uma mulher ensanguentada, se tornou uma das mais marcantes registradas neste início de invasão. A Rússia havia prometido não atacar civis, antes da invasão ao país vizinho, iniciada nesta madrugada.

Os ataques da Rússia começaram após Putin ter dado sinal verde àquilo que definiu como "operação militar especial" da Rússia no leste da Ucrânia e mandar recado para aqueles que tentarem intervir. O anúncio foi feito por Putin, na noite de ontem, durante um pronunciamento transmitido em cadeia nacional.

"Tomei a decisão de conduzir uma operação militar especial. Nossa análise concluiu que nosso confronto com essas forças [ucranianas] é inevitável (...) Algumas palavras para aqueles que seriam tentados a intervir: a Rússia responderá imediatamente e você terá consequências que nunca teve antes em sua história", afirmou o presidente russo.