2017-05-23 7 views
0

クリックごとにdivを45度回転させたいとします。期待どおりに動作します。このページには3つの'expand-btn 'クラス名があります。何が起こるか、クリックするとすべての '.expand-btn'がトリガされます。このdivだけを回転します。他のものはありません

私はこの「拡張-BTN」をでトリガします。他にはない。

JS:

var _rotation = 0; 

$.fn.rotate = function(degrees) { 
    $(this).css({'transform' : 'rotate('+ degrees +'deg)'}); 
}; 

$('.expand-btn').click(function() { 
    _rotation += 45; 
    $(this).rotate(_rotation); 
}); 

HTML:

<div class="expand-btn" id="test1"> 
    <a href="javascript:void(0);" data-toggle="collapse">+</a> 
</div> 
<div class="expand-btn" id="test2"> 
    <a href="javascript:void(0);" data-toggle="collapse">+</a> 
</div> 
<div class="expand-btn" id="test3"> 
    <a href="javascript:void(0);" data-toggle="collapse">+</a> 
</div> 
+0

があるため、このコンテキストで動作するはずです...それは動作しません – guradio

+2

単一 '_rotation'変数であるため、すべての3のために使用されている。.. –

+0

'のhref = "javascriptを:無効(0)が"'(https://stackoverflow.com/a/1293130/778975)非常に古い、非常に[悪いアンチパターン]です。 'javascript:'疑似URLは[ブックマークレットの作成を目的としていました](http://javascriptexample.net/badjs01.php)であり、ページスクリプティングでは使用しないでください。私は[悪いJSチュートリアルの発見](http://www.uselesscode.org/blog/posts/spotting-bad-javascript-tutorials/)について最近書いたブログ記事を読んで恩恵を受けるかもしれません。 –

答えて

2

あなたがオブジェクトのそれぞれの回転値の明確なストレージを持っている必要があります。たとえば、そのためjQuery.data()を使用します。

$.fn.rotate = function(delta) { 
    // get the current stored rotation, or 0 if none was currently stored 
    var degrees = $(this).data().rotation || 0; 

    // add the delta to this value 
    degrees += delta; 

    // store the new value with the object 
    $(this).data().rotation = degrees; 

    // set the transformation 
    $(this).css({'transform' : 'rotate('+ degrees +'deg)'}); 
}; 

$('.expand-btn').click(function() { 
    $(this).rotate(45); 
}); 

のjQueryを使用して、集合の要素を反復処理し、個別のそれぞれのコードを適用する必要があります正しく設定拡張します。 $.fn.rotateの記述方法は、最初の値に基づいてセット内のすべての要素のローテーションを設定します。

か、その実際の値を取得するために、現在のtransformを解析。

0

あなたは、現在の角度を保存することができDIVにデータ - 属性を追加することができます。

HTML:

<div class="expand-btn" id="test1" data-degrees="0"> 
    <a href="javascript:void(0);" data-toggle="collapse">+</a> 
</div> 
<div class="expand-btn" id="test2" data-degrees="0"> 
    <a href="javascript:void(0);" data-toggle="collapse">+</a> 
</div> 
<div class="expand-btn" id="test3" data-degrees="0"> 
    <a href="javascript:void(0);" data-toggle="collapse">+</a> 
</div> 

JS:

$(document).ready(function(){ 
    $('.expand-btn').click(function() { 
     var currentDegrees = $(this).data("degrees"); 
     currentDegrees += 15; 
     $(this).css({'transform' : 'rotate(' + currentDegrees + 'deg)'}); 
     var currentDegrees = $(this).data("degrees", currentDegrees); 
    }); 
}); 

例:https://jsfiddle.net/tejsoft/dwxb1a1b/

関連する問題