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

Ucrânia: militares russos dizem que primeiro dia de invasão foi um sucesso

Do UOL, em São Paulo*

24/02/2022 15h08Atualizada em 24/02/2022 16h28

A Rússia disse hoje que os militares alcançaram seus objetivos no primeiro dia da invasão da Ucrânia, apesar das advertências de duras sanções dos países ocidentais. Os ataques atingiram, além de alvos militares, prédios civis como hospitais, aeroportos e prédios residenciais.

"Todas as operações atribuídas a grupos de tropas das Forças Armadas da Federação Russa para o dia foram concluídas com sucesso", disse o porta-voz do Ministério da Defesa, Igor Konashenkov.

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

As invasões russas acontecem por terra, mar e ar e em diferentes áreas do país, relatam veículos de imprensa internacionais e o governo ucraniano. As explosões começaram após o presidente russo, Vladimir Putin, dar sinal verde para o que chamou de "operação militar especial" contra a Ucrânia.

Autoridades da Ucrânia informaram que os ataques já somam mais de 60 vítimas, entre civis e militares. Um porta-voz do Ministério de Assuntos Internos da Ucrânia informou que o país havia registrado 392 casos de bombardeiros por forças russas, segundo a CNN Internacional.

Segundo guardas de fronteira ucranianos, as forças russas teriam entrado no início dessa quinta-feira na região do norte de Kiev —a capital do país— a partir de Belarus, para executar um ataque com mísseis contra alvos militares.

Ucrânia convoca cidadãos para guerra

As Forças Armadas da Ucrânia convocaram cidadãos para lutarem na guerra contra a Rússia. O chamado foi divulgado pelas redes sociais. No texto, os militares afirmam que têm recebido perguntas sobre como participar da guerra.

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

*(Com AFP)