2011-07-28 9 views
1

私は、次のjQueryの拡張機能があります。jQuery回転機能が起動しません。

(function ($) { //jQuery plugin extension 

    jQuery.fn.rotate = function(degree, maxDegree) { 
     this.css({ WebkitTransform: 'rotate(' + degree + 'deg)'}); 
     this.css({ '-moz-transform': 'rotate(' + degree + 'deg)'}); 

      // Animate rotation with a recursive call 
     rotation = setInterval(function() { 
      if (degree < (maxDegree/2)) { 
       $(this).rotate(++degree); 
      } else { 
       clearInterval(rotation); 
      } 
     },5); 
    }; 
}(jQuery)); 

をそして、私はこのようにそれを呼んでいる:ここでは、

$('#test').live('mouseover',function() { 
       $(this).rotate(0, 360); 
      }); 

しかし、それは発生しませんがJSFiddleです: http://jsfiddle.net/neuroflux/8vZqr/

あなたがCAではありません

答えて

2

(フィドルが原因live()で実行されません、注意してください)

(function ($) { 
    $.fn.rotate = function(degree, maxDegree) { 
     //... 
    }; 
}(jQuery)); // <-- call 

さらに、setInterval方法は、選択した要素を参照していないthis内側もはや、しかしwindowへ:あなたはあなたのプラグインを持っている機能をlling。あなたはthisへの参照を保持する必要があります。

var $self = this; 
var rotation = setInterval(function() { 
    if (degree < (maxDegree/2)) { 
     $self.rotate(++degree); 
    //... 
}; 

私はいくつかの要素の機能火災あればそうでない場合は、あなたがトラブルに巻き込まれるだろうrotationvar付き)ローカル変数作るALSでしょう。

あなたのフィドルについては、ライブラリとして使用するjQueryを選択しませんでした。

これがすべて固定されている場合は、it works →

+0

おっとは、私が持っている - 私はSOにそれを置くことを忘れてしまいました。まだ起動しない:( –

+0

@Neurofluxation:私の最新のアップデートを参照...それは今働く。 –

+0

パーフェクト!乾杯フェリックス。 –

関連する問題