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

Familiar de vítima de Jeffrey Dahmer critica série da Netflix: 'É cruel'

Evan Peters como Jeffrey Dahmer - Reprodução
Evan Peters como Jeffrey Dahmer Imagem: Reprodução

De Splash, em São Paulo

26/09/2022 12h00Atualizada em 26/09/2022 12h00

As séries do gênero true crime contam com muitos fãs e "Dahmer: Um Canibal Americano", da Netflix, é o mais novo sucesso da plataforma.

A produção é baseada no caso do serial killer Jeffrey Dahmer, que matou 17 homens e adolescentes nos Estados Unidos entre os anos 1978 e 1991. As vítimas tinham entre 14 e 32 anos e eram em sua maioria pessoas à margem da sociedade: LGBTQIA+, homens negros ou indígenas e de baixo poder aquisitivo.

Apesar de a minissérie dirigida por Ryan Murphy procurar humanizar as vítimas — o que nem sempre acontece no true crime —, os familiares dos assassinados, na maioria das vezes, discordam da existência dessas produções.

Eric Perry, primo de Errol Lindsey, uma das vítimas de Dahmer, criticou a série no Twitter.

"Eu não estou dizendo a ninguém o que assistir, eu sei que a mídia de true crime é enorme, mas se você está realmente curioso sobre as vítimas, minha família (os Isbell) está chateada com essa série", escreveu ele. "Recriar minha prima tendo um colapso emocional no tribunal diante do homem que torturou e assassinou seu irmão é SELVAGEM".

Eric disse que, como os assassinatos são de registro público, os produtores não são obrigados a notificar as famílias das vítimas. Segundo o rapaz, ninguém da produção da série ou da Netflix entrou em contato com sua família, e eles descobriram a existência da minissérie ao mesmo tempo que o resto do público.

"Então, enquanto eles dizem que estão fazendo isso 'com respeito às vítimas' ou 'honrando a dignidade das famílias', ninguém contata ninguém. Meus primos acordam de poucos em poucos meses com um monte de ligações e mensagens e já sabem que há outra série sobre o Dahmer. É cruel."

A produção do programa defendeu o projeto, dizendo que o objetivo nunca foi humanizar Dahmer, mas sim mostrar as perspectivas das vítimas e explicar as maneiras pelas quais raça e sexualidade atravessam os assassinatos.

"Tínhamos uma regra criada por Ryan [Murphy], que nunca seria contada do ponto de vista de Dahmer", disse Evan Peters, que interpreta o serial killer em um vídeo promocional.

"Chama-se 'The Jeffrey Dahmer Story' ("a história de Jeffrey Dahmer", em tradução livre), mas não é apenas ele e sua história de fundo: são as repercussões, é como a sociedade e nosso sistema falharam em detê-lo várias vezes por causa do racismo, homofobia. É apenas uma história trágica."

Porém, para Eric, isso não justifica a existência da série. "Está retraumatizando [a família] de novo e de novo, e para quê? De quantos filmes, programas e documentários precisamos?", questionou.