Como definir o estilo -webkit-transform dinamicamente usando JavaScript?


112

Desejo alterar a -webkit-transform: rotate()propriedade usando JavaScript dinamicamente, mas o comumente usado setAttributenão está funcionando:

img.setAttribute('-webkit-transform', 'rotate(60deg)');

O .styletambém não está funcionando ...

Como posso definir isso dinamicamente em JavaScript?


você não vai definir o atributo de estilo em vez de apenas este
Muhammad Umer

Respostas:


201

Os nomes de estilo JavaScript são WebkitTransformOrigineWebkitTransform

element.style.webkitTransform = "rotate(-2deg)";

Verifique a referência de extensão DOM para WebKit aqui .


9
Se você quiser mais de um, separe com um espaço. Por exemplo: element.style.webkitTransform = "rotate(-2deg) translateX(100px)";
Marc

1
Isso funciona bem no Safari e no Chrome, mas não funciona no Firefox. Qual é a forma equivalente de fazer isso no Firefox?
Ricardo Sanchez-Saez

3
MozTransform deve ser seu amigo.
haagmm

@Olafur O link da Apple está morto.
Carcigenicar

Portanto, é a única maneira de fazer isso com uma corda. Parece que seria muito lento se fosse recursivo.
BBaysinger

89

Aqui estão as notações de JavaScript para os fornecedores mais comuns:

webkitProperty
MozProperty
msProperty
OProperty
property

Eu redefino estilos de transformação inline como:

element.style.webkitTransform = "";
element.style.MozTransform = "";
element.style.msTransform = "";
element.style.OTransform = "";
element.style.transform = "";

E assim usando jQuery:

$(element).css({
    "webkitTransform":"",
    "MozTransform":"",
    "msTransform":"",
    "OTransform":"",
    "transform":""
});

Consulte a postagem no blog Coding Vendor Prefixes with JavaScript (2012-03-21).


5
jQuery escolhe automaticamente o prefixo certo, apenas tem que escrever transform.
Blaise

@Blaise Isso é novo. Partindo de qual versão?
Armel Larcier

1
Desde jQuery 1.8.0. Commit on Github
Blaise

1
win.style.transform ="translate(-50%)"não funciona
Momin


5

Se você quiser fazer isso por meio setAttribute, altere o styleatributo da seguinte forma:

element.setAttribute('style','transform:rotate(90deg); -webkit-transform: rotate(90deg)') //etc

Isso seria útil se você deseja redefinir todos os outros estilos embutidos e apenas definir os valores das propriedades de estilo necessárias novamente, MAS na maioria dos casos você pode não querer isso. É por isso que todo mundo aconselhou a usar isso:

element.style.transform = 'rotate(90deg)';
element.style.webkitTransform = 'rotate(90deg)';

O acima é equivalente a

element.style['transform'] = 'rotate(90deg)';
element.style['-webkit-transform'] = 'rotate(90deg)';

2

Para animar seu objeto 3D, use o código:

<script>

$(document).ready(function(){

    var x = 100;
    var y = 0;
setInterval(function(){
    x += 1;
    y += 1;
    var element = document.getElementById('cube');
    element.style.webkitTransform = "translateZ(-100px) rotateY("+x+"deg) rotateX("+y+"deg)"; //for safari and chrome
    element.style.MozTransform = "translateZ(-100px) rotateY("+x+"deg) rotateX("+y+"deg)"; //for firefox
},50);
//for other browsers use:   "msTransform",    "OTransform",    "transform"

});

</script>
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.