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

Filho se despede de Anne Heche: 'Espero que minha mãe esteja livre da dor'

Anne Heche e os filhos, Homer e Atlas - Reprodução/Instagram
Anne Heche e os filhos, Homer e Atlas Imagem: Reprodução/Instagram

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

12/08/2022 17h16Atualizada em 12/08/2022 20h27

Homer Laffoon, 20 anos, filho mais velho da atriz Anne Heche, se despediu da mãe por meio de um comunicado enviado à revista People. Na mensagem, ele descreveu o período conturbado que vive desde o acidente de carro que causou a morte da atriz aos 53 anos e agradeceu pelo apoio que recebeu nos últimos dias.

"Eu e meu irmão Atlas perdemos nossa mãe", começou, mencionando Atlas Tupper, 13, filho da atriz com o ator James Tupper.

"Depois de seis dias de inacreditáveis oscilações emocionais, sinto agora uma tristeza profunda e sem palavras. Espero que minha mãe esteja livre da dor e começando a explorar o que eu gosto de imaginar como sua liberdade eterna", continuou, na mensagem.

"Nesses últimos seis dias, milhares de amigos, familiares e fãs mostraram seus corações para mim. Estou grato pelo amor dessas pessoas, assim como estou grato pelo apoio do meu pai, Coley, e da minha madrasta, Alexi, que continuam sendo minha fortaleza nesse momento", acrescentou o jovem.

Descanse em paz, mãe. Eu te amo. Homer Laffoon

Homer é fruto do relacionamento da atriz com o operador de câmera Coley Laffoon, com quem foi casada de 2001 a 2009.

Ex-companheiros também fizeram homenagens

Coleman "Coley" Laffoon publicou um vídeo em que, emocionado, se despede da atriz e fala sobre o estado emocional do filho Homer.

"Eu só quero dizer algumas coisas: eu a amava e vou sentir falta dela, sempre vou sentir. Homer está bem. Está de luto, claro, mas está cercado de sua família e é muito forte", disse, agradecendo em seguida às pessoas que entraram em contato com a família nos últimos dias.

"Eu gosto de pensar que Anne está livre da dor e aproveitando qualquer que seja essa nova experiência em sua jornada. Ela era corajosa e destemida. Amava muito as pessoas e nunca tinha medo. Sempre houve muito amor", acrescentou.

Adeus, Anne. Obrigado. Obrigado por todos os bons tempos. Te vejo no lado de lá. Enquanto isso, estou com nosso filho e ele ficará bem. Eu te amo. Coley Laffoon

Laffon ainda compartilhou uma foto antiga em que Anne segura Homer no colo.

"É importante se lembrar do verdadeiro amor nos bons tempos. Obrigado, Anne. Paz em sua jornada", escreveu na legenda.

O ator James Tupper, que ou mais de 10 anos com a atriz antes de se separarem em 2018, também publicou uma homenagem. Atlas, que nasceu em 2009, é fruto do relacionamento entre os artistas.

"Te amo para sempre", escreveu, acrescentando à legenda um coração partido.