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

Miley Cyrus posta carta à Hannah Montana no aniversário de 15 anos da série

A cantora Miley Cyrus  - Reprodução/Instagram
A cantora Miley Cyrus Imagem: Reprodução/Instagram

Colaboração para Splash, em São Paulo

24/03/2021 16h17

A sessão nostalgia do dia ficou por conta de Miley Cyrus!

A musa parece estar na fase de escrever cartas à mão, como fez recentemente pedindo para que as pessoas se vacinem. Hoje, dia em que a série 'Hannah Montana' fez sua estreia no Disney Channel 15 anos atrás, Miley postou em suas redes sociais uma nova carta que escreveu para sua fiel companheira.

A cantora começou sua extensa carta dizendo: "Oi Hannah. Faz um tempo que não nos falamos. 15 anos, para ser exata. Desde a primeira vez que coloquei aquela franja loira sobre minha testa na minha melhor tentativa de esconder minha identidade. Depois coloquei aquele roupão rosa de tecido felpudo com um 'HM' bordado em brilho em cima do coração. Eu não sbaia na época... que seria ali que você viveria para sempre. Não só no meu, mas no de milhões de pessoas ao redor do mundo".

"Apesar de você ser considerada como um 'alter ego', na realidade, houve um tempo de minha vida em que você segurava mais da minha identidade na sua luvinha do que eu segurava nas minhas mãos", ela continuou, dizendo ainda: "Tivemos uma troca onde você me provia um nível extremo de fama em troca do anonimato que eu podia oferecer a você. Mas MUITO mudou desde então. Você foi um foguete que me levou à lua e nunca me trouxe de volta".

Na carta, Miley falou sobre tudo que viveu enquanto fazia a personagem, e lembrou-se dos amigos de elenco que fez no set de gravação. A atriz também contou um pouco sobre as experiências de trabalhar com seu pai, e sobre todas as 'primeiras vezes' que teve durante o período da série. Ela ainda demonstrou todo seu amor por Hannah: "Você tem todo o meu amor e minha maior gratidão. Dar vida à você durante aqueles 6 anos foi uma honra", e termina a carta dizendo: "Você foi o melhor presente que eu poderia receber. Eu te amo, Hannah Montana".

A conta oficial da personagem foi a público repostar a carta de Miley, comentando: "Bom ouvir de você. Só se ou uma década". Os fãs foram à loucura, deixando 'Hannah Montana' nos Trendind Topics do Twitter. "Teremos uma reunião de Hannah Montana ou algo assim?", indagou um dos seguidores. Outro comentário ainda pedia: "Hannah Montana: O Filme 2 por favor!". Apesar dos pedidos, nenhuma reunião do elenco da série foi confirmada recentemente.