Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

102
Visualizações
Cómo desvanecerse suavemente entre gradientes en JavaScript

Este código llena un div con un conjunto predefinido de gradientes y se desvanece a través de ellos en un ciclo usando el método .animate() de jQuery:

 /// Background Gradient Cycler var gradients = [ ['#9eb5d7', '#242424'], ['#efe2ae', '#a8acc9'], ['#6f7554', '#eee1ad'] ] var gradientsRev = gradients.reverse() var gradientCover = document.getElementById('gradientCover'); for (var g = 0; g < gradientsRev.length; g++) { var gradEl = document.createElement('div') gradEl.className = 'gradient' gradEl.style.background = `linear-gradient(${gradientsRev[g][0]}, ${gradientsRev[g][1]})`; gradientCover.appendChild(gradEl) } var gradientEls = document.querySelectorAll('#gradientCover .gradient') function gradientCycler() { function gradeFade(i, opDest) { var fadeDur = 20000 $(gradientEls[i]).animate({ 'opacity': opDest }, { duration: fadeDur, complete: function() { if (parseInt(i) > 1) { if (parseInt(opDest) === 0) gradeFade(i - 1, 0) else gradFadeStart() } else { gradeFade(gradientEls.length - 1, 1) } } }) } var gradFadeStart = function() { $('.gradient').css('opacity', 1); gradeFade(gradientEls.length - 1, 0) } gradFadeStart() } gradientCycler()
 body { margin: 0; overflow: hidden; } #gradientCover, .gradient { position: absolute; top: 0; left: 0; width: 100vw; height: 100vh; }
 <script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script> <div id="page"> <div id="gradientCover"></div> </div>

El problema es que la transición en ciertas partes es visiblemente entrecortada, con artefactos de bandas.

ingrese la descripción de la imagen aquí

¿Qué se puede hacer para reducir este artefacto para que la transición entre los gradientes parezca más suave y menos entrecortada?

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Creo que está relacionado con la profundidad del color . Como ex artista de CG, he visto estos "artefactos" en software como Maya y Photoshop, para resolver el problema fue necesario aumentar la cantidad de bits por canal ( en Photoshop pasando de 8 Bits/ Canal a 16 ).

Normalmente, este problema de bandas aparece cuando los dos colores del degradado están cerca (en términos de valores RGB) porque hay pocos valores de colores disponibles entre estos dos colores.

Si el degradado se procesa O se muestra (debido a la limitación del monitor) con una cantidad baja de bits por canal, pueden aparecer estos efectos de bandas.

Puede comprobar la profundidad de color de su monitor aquí .

También puede aplicar CSS de acuerdo con este valor:

 if (screen.colorDepth <= 8) //simple blue background color for 8 bit screens document.body.style.background = "#0000FF" else //fancy blue background color for modern screens document.body.style.background = "#87CEFA"
about 4 years ago · Juan Pablo Isaza Relatório

0

Incluyendo mis pruebas de codepen aquí como respuesta en caso de que ayude a alguien. Logré obtener un rendimiento mejorado pre-renderizando PNG con el método canvas' .toDataURL() y animando a través de ellos en jQuery (también logré aproximadamente el mismo rendimiento con este método pero usando Three.js):

https://codepen.io/tv/zxBbgK

Aquí hay un ejemplo de trabajo del método JQuery:

 /// Background Gradient Cycler var gradients = [ ['#9eb5d7', '#242424'], ['#efe2ae', '#a8acc9'], ['#6f7554', '#eee1ad'] ] var gradientsRev = gradients.reverse() var gradientCover = document.getElementById('gradientCover'); for (var g = 0; g < gradientsRev.length; g++) { var gradEl = document.createElement('div') gradEl.className = 'gradient' var gradCanv = document.createElement('canvas') gradCanv.className = 'gradient' var ctx = gradCanv.getContext("2d"); var grd = ctx.createLinearGradient(0, 0, 0, gradCanv.height); grd.addColorStop(0, gradients[g][0]); grd.addColorStop(1, gradients[g][1]); ctx.fillStyle = grd; ctx.fillRect(0, 0, gradCanv.width, gradCanv.height); var gradIm = gradCanv.toDataURL("img/png") gradEl.style.backgroundImage = `url(${gradIm})` gradientCover.appendChild(gradEl) } var gradientEls = document.querySelectorAll('#gradientCover .gradient') function gradientCycler() { function gradeFade(i, opDest) { var fadeDur = 20000 $(gradientEls[i]).animate({ 'opacity': opDest }, { duration: fadeDur, complete: function() { if (parseInt(i) > 1) { if (parseInt(opDest) === 0) gradeFade(i - 1, 0) else gradFadeStart() } else { gradeFade(gradientEls.length - 1, 1) } } }) } var gradFadeStart = function() { $('.gradient').css('opacity', 1); gradeFade(gradientEls.length - 1, 0) } gradFadeStart() } gradientCycler()
 body { margin: 0; overflow: hidden; } #gradientCover, .gradient { position: absolute; top: 0; left: 0; width: 100vw; height: 100vh; background-size: 100%; }
 <script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script> <div id="page"> <div id="gradientCover"></div> </div>

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda