Saltar al contenido

¿Cómo puedo rotar este elemento SVG correctamente?

Indagamos por distintos sitios y así brindarte la respuesta a tu problema, en caso de alguna inquietud déjanos la pregunta y responderemos porque estamos para ayudarte.

Solución:

Considerar transform-box:fill-box; entonces haz el origen bottom center y aumente un poco el viewbox para evitar el corte. También moví la rotación al polígono y mantuve la traducción en el g elemento.

$('#percent').on('change', function() 
  $('#triangle').css('transform', 'rotate(' + percentToDegrees($(this).val()) + 'deg)')
)

function percentToDegrees(percent) 
  var degrees = -90;
  var inc = 1.8;
  return degrees += (percent * inc);
#triangle 
  transform-origin:center bottom;
  transform-box:fill-box;


input 
  display: block;
  margin: 50px auto;


    
        
            
                
                    
                    
                    
                    
                        100%
                    
                    
                        50%
                    
                    
                        0%
                    
                
                
                    
                
            
        
    


Lo más fácil es probablemente hacerlo todo con SVG, simplemente configurando el transform attribute en lugar de su css style.

Todo lo que necesita es establecer el segundo y tercer valor del rotate(angle, origin_x, origin_y) Método de transformación SVG.

$('#percent').on('input', function() 
  $('#needle').attr('transform', 'translate(175, 19) ' +
    'rotate(' + percentToDegrees($(this).val()) + ', 10, 162)')
)

function percentToDegrees(percent) 
  var degrees = -90;
  var inc = 1.8;
  return degrees += (percent * inc);
input 
  display: block;
  margin: 50px auto;


  
    
      
        
          
          
          
          
            100%
          
          
            50%
          
          
            0%
          
        
        
            
        
      
    
  


Incluso ganarás en la compatibilidad del navegador 😉

Y tenga en cuenta que todo esto podría simplificarse a:

$('#percent').on('input', function() 
  $('#Triangle')
    .attr('transform', 'rotate(' + percentToDegrees($(this).val()) + ', 10, 162)')
)

function percentToDegrees(percent) 
  var degrees = -90;
  var inc = 1.8;
  return degrees += (percent * inc);
input 
  display: block;
  margin: 50px auto;

#Page-1 text 
  font-family: Omnes-Regular, Omnes;
  font-size: 15px;
  font-weight: normal;
  fill: #000;


  
    
      
      
      
      
        100%
      
      
        50%
      
      
        0%
      
    
    
      
    
  


Si haces scroll puedes encontrar las observaciones de otros sys admins, tú además tienes el poder dejar el tuyo si te gusta.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 4)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *