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

LoL: Riot abre inscrições para Concurso de Fanarts; veja como participar

SyLee/DeviantArt
Imagem: SyLee/DeviantArt

Amanda Fleure, do Start

Em São Paulo

13/07/2021 17h02

Estão abertas as inscrições para o Concurso Noxus de Fanarts da Riot Games. Com o tema de Noxus, uma das regiões de Runeterra, todos os participantes deverão criar e enviar uma ilustração de LoL, Wild Rift, Legends of Runeterra ou Teamfight Tactics com a temática do local.

Entre os prêmios estão um iPad Pro 11 polegadas de 512GB, um Apple Pencil, 4.550 RP (Riot Points) e mais.3.850. O prazo para o envio de todas as inscrições vai até dia 06 de agosto, às 17h00 (horário de Brásilia) e os vencedores serão anunciados no mesmo mês.

Como participar?

Gun Goddess Miss Fortune LoL - Divulgação/RiotGames - Divulgação/RiotGames
Imagem: Divulgação/RiotGames

Primeiro confira abaixo em qual dessas categorias será sua arte, você terá que escolher apenas 1 para participar:

  • League of Legends e Wild Rift: Deve conter pelo menos 1 Campeão de Noxus.
  • Legends of Runeterra: Deve conter pelo menos 1 personagem do deck de Noxus.
  • Teamfight Tactics: Deve conter pelo menos 1 Pequena Lenda.

Em seguida, você deve enviar a inscrição através deste formulário. Lembre-se, assine sua obra e inclua sua RIOT#ID (seu nick completo) no canto superior direito da sua arte. As artes podem ser digitais ou tradicionais. Evite colocar marca d'água, conteúdo inapropriado ou basear em fotos ou prints para não ser desclassificado.

E o mais importante, tenha um email verificado com sua conta Riot. Clique aqui para verificar seu e-mail. É por lá que os vencedores serão avisados.

Com sua obra finalizada, vá até o formulário de envio aqui e pronto!

Todas as regras oficiais do concurso podem ser lidas aqui.

Prêmios

Serão concedidos prêmios diferentes para cada categoria.

Categoria League of Legends/Wild Rift:

KDA LoL - Divulgação/RiotGames - Divulgação/RiotGames
Imagem: Divulgação/RiotGames

1 vencedor da premiação principal e 10 vencedores de menções honrosas.

Vencedor da premiação principal:
iPad Pro 11 polegadas 512GB com Wi-Fi na cor cinza-espacial
Apple Pencil
4.550 RP
3.850 WC
10 menções honrosas:
4.550 RP
3.850 WC

Categoria Teamfight Tactics:

Teamfight Tactics: - Riot Games/Divulgação - Riot Games/Divulgação
Imagem: Riot Games/Divulgação

1 vencedor da premiação principal e 10 vencedores de menções honrosas.

Vencedor da premiação principal:
iPad Pro 11 polegadas 512GB com Wi-Fi na cor cinza-espacial
Apple Pencil
4.550 RP
10 menções honrosas:
4.550 RP
3.850 WC

Categoria Legends of Runeterra:

Legends of Runeterra - Divulgação/Riot - Divulgação/Riot
Imagem: Divulgação/Riot

1 vencedor da premiação principal e 10 vencedores de menções honrosas.

Vencedor da premiação principal:
iPad Pro 11 polegadas 512GB com Wi-Fi na cor cinza-espacial
Apple Pencil
3.850 Moedas
10 menções honrosas:
3.850 Moedas
GLHF

Prepare seus pincéis e lápis, mouses e mesas digitalizadoras e boa sorte! Lembrando, confira todo o regulamento no site oficial da Riot seguindo este link.

SIGA O START NAS REDES SOCIAIS

Twitter: https://twitter.com/start_uol
Instagram: https://www.instagram.com/start_uol/
Facebook: https://www.facebook.com/startuol/
TikTok: http://vm.tiktok.com/Rqwe2g/
Twitch: https://www.twitch.tv/startuol