Wie setze ich die Stil-Webkit-Transformation dynamisch mit JavaScript?


112

Ich möchte die -webkit-transform: rotate()Eigenschaft mithilfe von JavaScript dynamisch ändern , aber die häufig verwendete Funktion setAttributefunktioniert nicht:

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

Das .stylefunktioniert auch nicht ...

Wie kann ich dies dynamisch in JavaScript einstellen?


Sie werden nicht nur dieses Stilattribut festlegen
— Muhammad Umer

Antworten:


201

Die Namen der JavaScript-Stile sind WebkitTransformOriginundWebkitTransform

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

Überprüfen Sie die DOM - Erweiterung Referenz für WebKit hier .


9
Wenn Sie mehr als eine möchten, trennen Sie diese mit einem Leerzeichen. Zum Beispiel: element.style.webkitTransform = "rotate(-2deg) translateX(100px)";
— Marc

1
Dies funktioniert gut unter Safari und Chrome, aber nicht unter Firefox. Was ist die äquivalente Vorgehensweise für Firefox?
— Ricardo Sanchez-Saez

3
MozTransform sollte dein Freund sein.
— haagmm

@Olafur Der Apple Link ist tot.
— Carcigenicate

Dies ist also die einzige Möglichkeit, dies mit einer Zeichenfolge zu tun. Es scheint ziemlich langsam zu sein, wenn es rekursiv wäre.
— BBaysinger

89

Hier sind die JavaScript-Notationen für die meisten gängigen Anbieter:

webkitProperty
MozProperty
msProperty
OProperty
property

Ich setze Inline-Transformationsstile zurück wie:

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

Und so mit jQuery:

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

Siehe Blog-Beitrag Codieren von Herstellerpräfixen mit JavaScript (2012-03-21).


5
jQuery wählt automatisch das richtige Präfix aus, muss nur schreiben transform.
— Blaise

@Blaise Das ist neu. Ab welcher Version?
— Armel Larcier

1
Dies ist seit jQuery 1.8.0 der Fall. Commit auf Github
— Blaise

1
win.style.transform ="translate(-50%)"funktioniert nicht
— Momin


5

Wenn Sie dies über tun möchten, setAttributewürden Sie das styleAttribut folgendermaßen ändern :

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

Dies ist hilfreich, wenn Sie alle anderen Inline-Stile zurücksetzen und nur die Werte Ihrer benötigten Stileigenschaften erneut festlegen möchten. In den meisten Fällen möchten Sie dies jedoch möglicherweise nicht. Deshalb rieten alle dazu:

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

Das obige ist äquivalent zu

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

2

Verwenden Sie den Code, um Ihr 3D-Objekt zu animieren:

<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>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.