web-dev-qa-db-ja.com

JavaScriptを使用してdivを回転させる

1つのdivをクリックして別のdivを回転させ、最初のdivが再度クリックされると、もう1つのdivが元の位置に戻ります。

必要に応じてこのライブラリを参照できます http://ricostacruz.com/jquery.transit

29
user2078845

DIVを回転するには、CSS変換rotateを使用してDIVを回転させるCSSを追加できます。

回転を切り替えるために、フラグを保持することができます。フラグは、回転する方法を示すブール値を持つ単純な変数です。

var rotated = false;

document.getElementById('button').onclick = function() {
    var div = document.getElementById('div'),
        deg = rotated ? 0 : 66;

    div.style.webkitTransform = 'rotate('+deg+'deg)'; 
    div.style.mozTransform    = 'rotate('+deg+'deg)'; 
    div.style.msTransform     = 'rotate('+deg+'deg)'; 
    div.style.oTransform      = 'rotate('+deg+'deg)'; 
    div.style.transform       = 'rotate('+deg+'deg)'; 

    rotated = !rotated;
}
var rotated = false;

document.getElementById('button').onclick = function() {
    var div = document.getElementById('div'),
        deg = rotated ? 0 : 66;

    div.style.webkitTransform = 'rotate('+deg+'deg)'; 
    div.style.mozTransform    = 'rotate('+deg+'deg)'; 
    div.style.msTransform     = 'rotate('+deg+'deg)'; 
    div.style.oTransform      = 'rotate('+deg+'deg)'; 
    div.style.transform       = 'rotate('+deg+'deg)'; 
    
    rotated = !rotated;
}
#div {
    position:relative; 
    height: 200px; 
    width: 200px; 
    margin: 30px;
    background: red;
}
<button id="button">rotate</button>
<br /><br />
<div id="div"></div>

回転にアニメーションを追加するには、CSSトランジションを追加するだけです。

div {
    -webkit-transition: all 0.5s ease-in-out;
    -moz-transition: all 0.5s ease-in-out;
    -o-transition: all 0.5s ease-in-out;
    transition: all 0.5s ease-in-out;
}
var rotated = false;

document.getElementById('button').onclick = function() {
    var div = document.getElementById('div'),
        deg = rotated ? 0 : 66;

    div.style.webkitTransform = 'rotate('+deg+'deg)'; 
    div.style.mozTransform    = 'rotate('+deg+'deg)'; 
    div.style.msTransform     = 'rotate('+deg+'deg)'; 
    div.style.oTransform      = 'rotate('+deg+'deg)'; 
    div.style.transform       = 'rotate('+deg+'deg)'; 
    
    rotated = !rotated;
}
#div {
    position:relative; 
    height: 200px; 
    width: 200px; 
    margin: 30px;
    background: red;
    -webkit-transition: all 0.5s ease-in-out;
    -moz-transition: all 0.5s ease-in-out;
    -o-transition: all 0.5s ease-in-out;
    transition: all 0.5s ease-in-out;
}
<button id="button">rotate</button>
<br /><br />
<div id="div"></div>

それを行う別の方法は、クラスを使用し、スタイルシート内のすべてのスタイルを設定することです

document.getElementById('button').onclick = function() {
    document.getElementById('div').classList.toggle('rotated');
}
document.getElementById('button').onclick = function() {
    document.getElementById('div').classList.toggle('rotated');
}
#div {
    position:relative; 
    height: 200px; 
    width: 200px; 
    margin: 30px;
    background: red;
    -webkit-transition: all 0.5s ease-in-out;
    -moz-transition: all 0.5s ease-in-out;
    -o-transition: all 0.5s ease-in-out;
    transition: all 0.5s ease-in-out;
}

#div.rotated {
    -webkit-transform : rotate(66deg); 
    -moz-transform : rotate(66deg); 
    -ms-transform : rotate(66deg); 
    -o-transform : rotate(66deg); 
    transform : rotate(66deg); 
}
<button id="button">rotate</button>
<br /><br />
<div id="div"></div>
48
adeneo

JQueryとcss3を使用している場合、簡単に実行できます。

http://jsfiddle.net/S7JDU/8/

HTML:

<div id="clicker">Click Here</div>
<div id="rotating"></div>

CSS:

#clicker { 
    width: 100px; 
    height: 100px; 
    background-color: Green; 
}

#rotating { 
    width: 100px; 
    height: 100px; 
    background-color: Red; 
    margin-top: 50px; 
    -webkit-transition: all 0.3s ease-in-out;
    -moz-transition: all 0.3s ease-in-out;
    -o-transition: all 0.3s ease-in-out;
    transition: all 0.3s ease-in-out;
}

.rotated { 
    transform:rotate(25deg); 
    -webkit-transform:rotate(25deg); 
    -moz-transform:rotate(25deg); 
    -o-transform:rotate(25deg); 
}

JS:

$(document).ready(function() {
    $('#clicker').click(function() {
        $('#rotating').toggleClass('rotated');
    });
});
5
karol.barkowski

最近、似たようなものを構築する必要がありました。以下のスニペットで確認できます。

私が構築しなければならなかったバージョンでは、同じボタンを使用してスピナーを開始および停止しますが、スピンを開始するボタンとスピンを停止する別のボタンがある場合は、コードを操作できます

基本的に、私のコードは次のようになります...

コードスニペットの実行

var rocket = document.querySelector('.rocket');
var btn = document.querySelector('.toggle');
var rotate = false;
var runner;
var degrees = 0;

function start(){
    runner = setInterval(function(){
        degrees++;
        rocket.style.webkitTransform = 'rotate(' + degrees + 'deg)';
    },50)
}

function stop(){
    clearInterval(runner);
}

btn.addEventListener('click', function(){
    if (!rotate){
        rotate = true;
        start();
    } else {
        rotate = false;
        stop();
    }
})
body {
  background: #1e1e1e;
}    

.rocket {
    width: 150px;
    height: 150px;
    margin: 1em;
    border: 3px dashed teal;
    border-radius: 50%;
    background-color: rgba(128,128,128,0.5);
    display: flex;
    justify-content: center;
    align-items: center;
  }
  
  .rocket h1 {
    margin: 0;
    padding: 0;
    font-size: .8em;
    color: skyblue;
    letter-spacing: 1em;
    text-shadow: 0 0 10px black;
  }
  
  .toggle {
    margin: 10px;
    background: #000;
    color: white;
    font-size: 1em;
    padding: .3em;
    border: 2px solid red;
    outline: none;
    letter-spacing: 3px;
  }
<div class="rocket"><h1>SPIN ME</h1></div>
<button class="toggle">I/0</button>
3
RealMJDev