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

'Tive sorte de sair viva', diz Twigs sobre relação abusiva com Shia LaBeouf

FKA Twigs para a revista Elle - Reprodução/Instagram
FKA Twigs para a revista Elle Imagem: Reprodução/Instagram

De Splash, em São Paulo

17/02/2021 14h04

A cantora FKA Twigs entrou em detalhes sobre as acusações feitas contra o ator Shia LaBeouf em duas entrevistas recentes. Twigs, que abriu processo contra LaBeouf por agressão e comportamento abusivo, falou à revista Elle e ao programa de TV CBS This Morning.

É um milagre que eu tenha saído viva. E acho que foi sorte. Honestamente, eu gostaria de poder dizer que encontrei forças, ou vi a luz [para deixar o relacionamento]. Eu gostaria de poder dizer que isso é um testamento ao meu caráter forte, ou à forma como a minha mãe me criou. Não é nada disso. É pura sorte."
FKA Twigs à revista Elle

A cantora já havia descrito incidentes em que LaBeouf teria a acordado no meio da noite, com as mãos em sua garganta, ameaçando sufocá-la; em que ele deixou hematomas em seu braço e pulso pela maneira como a segurava e puxava durante discussões; e em que ele propositalmente a infectou com uma doença sexualmente transmissível. Agora, ela se abriu sobre outros momentos da relação.

"Ele me acordava no meio da noite dizendo que eu estava 'bolando um plano para deixá-lo', mas eu só estava dormindo. Então ele me obrigava a dormir nua, porque senão estaria 'me escondendo dele'", contou ao CBS This Morning.

Hoje, ela sabe que essa é uma tática comum entre abusadores. "Eles querem que você esteja disponível o tempo todo, como se tudo fosse centrado ao redor deles. Eu acho que é por isso que eu quis tornar todos os detalhes públicos, para que mais pessoas possam reconhecer os sinais de abuso desde o princípio", disse.

É uma ferida muito recente para mim, obviamente. Eu sei que a minha jornada não será perfeita, mas espero que, com os pequenos os que estou dando, possa inspirar outras pessoas a assumirem o controle de suas vidas. Contando tudo isso, eu devolvi a disfunção [de LaBeouf] para ele."
FKA Twigs à Elle

Defesa

Em dezembro, quando o processo foi oficializado por Twigs e por outra ex-namorada de LaBeouf, Karolyn Pho, o ator não negou os abusos. "Eu tenho sido uma pessoa abusiva comigo mesmo e com as pessoas ao meu redor por anos. Tenho um histórico de machucar aqueles que são mais próximos de mim. Sinto vergonha deste histórico, e peço desculpas àqueles que machuquei. Não posso dizer nada além disso", comentou.

Meses depois, no entanto, o advogado de LaBeouf o contradisse em documentos oficiais do caso. No texto, Shawn Holley "nega, de forma geral e específica, cada uma e todas as alegações" levantadas por Twigs, e avalia que cantora não sofreu "qualquer perda ou prejuízo" por causa de LaBeouf.

O ator, enquanto isso, está internado em uma clínica de reabilitação.

Shia LaBeouf: advogado contradiz declaração inicial do ator - Albert L. Ortega / Getty Images - Albert L. Ortega / Getty Images
Shia LaBeouf: advogado contradiz declaração inicial do ator
Imagem: Albert L. Ortega / Getty Images