;(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
Logo Pagbenk Seu dinheiro rende mais
Topo

Índice europeu de ações cai, mas fecha janeiro com maior alta mensal em mais de 3 anos

30/01/2015 15h43

Por Blaise Robinson

PARIS (Reuters) - O principal índice europeu de ações fechou em queda nesta sexta-feira, mas encerrou janeiro com o maior ganho mensal em mais de três anos, impulsionado por esperanças de que o estímulo monetário do Banco Central Europeu (BCE) reanime o crescimento econômico e os lucros corporativos da região.

O índice FTSEurofirst 300, que reúne os principais papéis do continente, caiu 0,55 por cento nesta sessão, para 1.465 pontos, mas subiu 7,05 por cento no mês. As bolsas europeias têm tido desempenho bastante superior ao de Wall Street, onde o índice Standard & Poor's 500 acumulou perda de 2,3 por cento desde o início do ano.

Estrategistas do Morgan Stanley atualizaram suas projeções para os lucros de empresas europeias pela primeira vez em três anos, estimando melhora no ímpeto econômico da região neste ano.

"Após quatro anos de persistente decepção com o crescimento, acreditamos que a Europa está à beira de um ciclo de melhora. Esse será um dos fatores dominantes influenciando os retornos sobre o investimento na Europa neste ano", disseram eles em nota.

"As revisões de lucro líquido têm estado em território negativo desde março de 2011. Ao longo do próximo mês ou dos próximos dois meses, acreditamos que a série deve se mover a território positivo à medida que analistas ajustam suas previsões aos movimentos significativos que temos visto no câmbio, nos juros e no preço do petróleo", acrescentou.

Nesta sessão, contudo, o índice fechou em queda, marcando uma pausa após seu recente rali.

"É uma pequena pausa antes do fim de semana, mas não há verdadeira pressão de vendas e, tecnicamente, os gráficos mostram que os índices ainda estão em tendência positiva", disse o operador do Saxo Bank Andrea Tuni.

Em LONDRES, o índice Financial Times recuou 0,90 por cento, a 6.749 pontos.

Em FRANKFURT, o índice DAX caiu 0,41 por cento, a 10.694 pontos.

Em PARIS, o índice CAC-40 perdeu 0,59 por cento, a 4.604 pontos.

Em MILÃO, o índice Ftse/Mib teve baixa de 0,44 por cento, a 20.503 pontos.

Em MADRI, o índice Ibex-35 registrou perda de 0,99 por cento, a 10.403 pontos.

Em LISBOA, o índice PSI20 recuou 1,55 por cento, a 5.144 pontos.