2012-02-15 32 views
2

私はmouseenterで一度実行された関数を持っていて、mouseleaveでその要素を元の状態に戻したいと思っています。jQuery無限ループ

私のコードは無限ループを生成します。マウスが入り、要素が無限にフリップして、マウスが離れるまで。

$(document).ready(function() { 
    var flipfunc = function() { 
     var elem = $(this); 
     if (!elem.data('flipped')) { 
      elem.flip({ 
       direction: 'lr', 
       speed: 250, 
       onBefore: function() { 
        elem.html(elem.siblings('.sponsorData').html()); 
       } 
      }); 
      elem.data('flipped', true); 
      elem.addClass('sponsorFlipped'); 
      //elem.unbind('mouseenter', flipfunc); 
     } 
     else { 
      elem.revertFlip(); 
      // Unsetting the flag: 
      elem.data('flipped', false) 
      //elem.unbind('mouseleave', rflipfunc); 
     } 

    } 

    $('.sponsorFlip').bind('mouseenter', flipfunc); 

    //$('.sponsorFlipped').bind('mouseleave', rflipfunc); 

}); 

私は多くの解決策を試してみましたが、問題がどこにあるか、それが反転したとき、私は

+1

hover'代わりに '使用してください。これがそのためのものです。 – mrtsherman

+0

jsfiddleを作成できますか?あなたが経験しているものを再現するのは難しいです。 –

+0

@ mrtsherman私は試みたが、私もループを取得します。私は他人のコードをホバリング({enter}、{leave})に吐き出してみましたが、私は管理しませんでした。 – Samuel

答えて

1

mouseenterイベントがトリガされています...表示されていないので、あなたは、マウスが出て移動したか否かを検出する必要があります。これを行う方法の1つです。

$(window).bind('mousemove', function(e){ 
    if($(e.target).hasClass("sponsorFlip")){ 
     mouseMovedOut = false; 
    }else{ 
     mouseMovedOut = true; 
    } 
}); 

は(唯一のFFでテスト)ここでのデモを参照してください。マウスが入ったときにのみhttp://jsfiddle.net/tgg33/7/

今のdivが反転します。マウスを離したときに戻したい場合は、mouseleaveハンドラを追加する必要があります。

+0

ありがとうございます。それは働いて、私はそれを理解した;) – Samuel

+0

あなたが書いたことはIE8で動作しませんあなたはなぜ知っていますか?互換性のない関数がありますか? – Samuel

+0

Firebugに何らかのエラーがありますか? – Diode

0

私は今問題が何であるかを見ています。なぜ、これが診断するのが難しいのかもわかります。フリップアニメーションは、何らかの形でホバーイベントを妨害し、その結果、無限ループに陥ります。

私はアニメーション要素をコンテナ内に配置しました。外部要素のホバーイベントを監視することで問題が解決されると考えました。私はそれがしなかったことを見つけるために非常に驚いた。内側の要素がアニメートされると、mouseoutイベントが発生し、無限ループが発生します。私はsponserFlip divにCSSプロパティーpointer-events: noneを追加して解決しました。これはIEではサポートされていませんが、回避策があります。これがあなたが行きたいと思う方法ならば教えてください。

http://jsfiddle.net/SF2MD/

$('.container').hover(function() { 
    console.log('hover'); 
    $(this).children('.sponsorFlip').flip({ 
     direction: 'lr', 
     speed: 250 
    }); 
}, function() { 
    $(this).children('.sponsorFlip').flip({ 
     direction: 'lr', 
     speed: 250 
    }); 
});​ 
+0

ありがとうございます。私はあなたを見た前に上のポストでそれを解決しました。 – Samuel