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

188
Visualizações
¿Cómo crear una sombra común para múltiples trazos en un solo lienzo?

Estoy tratando de dibujar varios trazos en un lienzo y me gustaría que tuvieran una sombra común. Actualmente, las sombras se proyectan entre sí, lo que no es lo que quiero.

Resultado ideal

resultado ideal

lo que he probado

  • Crear sombra usando ctx.shadowColor jsfiddle
  • Crear sombra usando ctx.filter jsfiddle
  • Crear sombra usando css box-shadow en el lienzo: dibuja sombra en todo el cuadro
  • Crear sombra usando el filter css en el lienzo: dibuja sombra en todo el cuadro
about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Si necesita que cada trazo sea independiente (es decir, que cada uno tenga su propio estilo de trazo o ancho de línea), deberá usar un segundo lienzo separado:

  • en este lienzo despegado dibujas todos tus trazos sin sombra
  • drawImage ese lienzo separado en el visible con la sombra:

 const canvas = document.querySelector("canvas"); const ctx = canvas.getContext("2d"); const detached = canvas.cloneNode(); const detachedCtx = detached.getContext("2d"); const colors = ["green", "blue", "yellow", "orange", "aqua"]; detachedCtx.lineWidth = 5; for (let color of colors) { // draw on the detached canvas detachedCtx.beginPath(); for (let i = 0; i<5; i++) { detachedCtx.lineTo(Math.random() * canvas.width, Math.random() * canvas.height); } detachedCtx.strokeStyle = color; detachedCtx.lineWidth = Math.random() * 8 + 2; detachedCtx.stroke(); } // now draw all this with shadows on the visible canvas ctx.shadowOffsetX = 3; ctx.shadowOffsetY = 3; ctx.shadowBlur = 3; ctx.shadowColor = "red"; ctx.drawImage(detached, 0, 0);
 <canvas></canvas>

Pero para producir la imagen que tiene, todo lo que necesita es llamar a stroke() solo una vez después de que compuso su ruta completa:

 const canvas = document.querySelector("canvas"); const ctx = canvas.getContext("2d"); ctx.fillStyle = "#0F0"; ctx.fillRect(0, 0, canvas.width, canvas.height); ctx.lineWidth = 5; ctx.shadowOffsetX = -3; ctx.shadowOffsetY = -3; ctx.shadowBlur = 3; ctx.shadowColor = "red"; ctx.moveTo(10, 50); ctx.lineTo(90, 50); ctx.moveTo(50, 10); ctx.lineTo(50, 90); ctx.stroke(); // stroke only once, with the full path being traced
 <canvas width=100 height=100></canvas>

about 4 years ago · Juan Pablo Isaza Relatório

0

Puede usar Path2D y agregar todos sus segmentos a una ruta, luego hacer el trazo a esa ruta.

Aquí está su jsfiddle usando ctx.filter con mi recomendación.

 const segments = [ [{x: 10, y: 50}, {x: 50, y: 50}], [{x: 50, y: 10}, {x: 50, y: 50}], [{x: 90, y: 50}, {x: 50, y: 50}], [{x: 50, y: 90}, {x: 50, y: 50}], ] let path = new Path2D() segments.forEach(segment => { path.moveTo(segment[0].x, segment[0].y) path.lineTo(segment[1].x, segment[1].y) }) const ctx = document.getElementById('my-canvas').getContext('2d') ctx.lineWidth = 5 ctx.filter = 'drop-shadow(-3px -3px 3px #f00)'; ctx.strokeStyle = 'black' ctx.stroke(path)
 <canvas width="100" height="100" id="my-canvas" style="background: #00ff00"/>

Puedes leer más sobre Path2D aquí:
https://developer.mozilla.org/en-US/docs/Web/API/Path2D/Path2D

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