2012-05-08 30 views
0

イメージでマウスカーソルを置き換えようとしています。Jquery replace mouse cursor

私は、次のHTMLを持っている:

<div id="content-bg"> 
    <img src="path"/> 
</div> 
<div id="mouse"></div> 

CSS:

#content-bg{ 
    background:url(../img/frontend/content-bg.png) top left no-repeat; 
    width: 968px; 
    height: 552px; 
    position:relative; 
} 

#mouse { 
    cursor: none; 
    width: 75px; 
    height: 76px; 
    background: url("../img/frontend/cross.png") no-repeat center; 
    position: absolute; 
    display:none; 
    top: 0; 
    left: 0; 
    z-index: 10000; 
} 

のjavascript:

$(document).ready(function(){ 
    $('#content-bg').mouseout(function(){ 
      $('#mouse').hide(); 
      $(this).css("cursor","none"); 
      return false; 
    }); 
    $('#content-bg').mouseenter(function(){ 
      $('#mouse').show(); 
      return false; 
    }); 
    $('#content-bg').mousemove(function(e){ 
      var x = e.clientX - $(document).scrollLeft() - 37.5; 
      var y = e.clientY + $(document).scrollTop() - 38; 
      $('#mouse').css('left', x).css('top',y); 
    }); 
}); 

マウスの画像は、適切な場所にありますが、思わ点滅すると派手な。トランジションは、私が望むほど滑らかではありません。何とか、mouse-mouseイベントとmouseenterイベントは、私がcontent-bg div内でマウスを動かすたびにトリガーされるようです。

どうすればこの問題を解決できますか?

おかげ

+0

は 'コンテンツbg'を隠しているので、マウスはその後入力し、再び、それを「左」。あなたは他の方法で物事をする必要がある、またはそれを残す... – gdoron

+0

イメージが表示されているオフセットを変更しようとしましたか?半幅/高さを削除する代わりに、それを追加しようとします。それがなければ、移動したdiv自体のためにも、マウスアウトを引き起こさないかどうかはわかりません –

+0

@gdoronしかし、半分のディメンションを取り出すと、うまくいきます。いくつかのドキュメントはどうですか? – jribeiro

答えて

2

コメントで指摘されているとして、それが表示されたとして、あなたのマウスが突然、#mouseを置いたときに、あなたのmouseoutが発生します。

手動でこれらのイベントをキャンセルする必要があります:あなたのマウスのdiv becaueだ

$('#content-bg').mouseout(function(e){ 
     if($(e.relatedTarget).is('#mouse')) { return false; } 
     $('#mouse').hide(); 
     $(this).css("cursor","none"); 
     return false; 
}); 

$('#content-bg').mouseenter(function(e){ 
     if($(e.fromElement).is('#mouse')) { return false; } 
     $('#mouse').show(); 
     return false; 
}); 
+0

あなたのコードで 'e'を定義しましたそれは何ですか? jQueryのイベントは 'fromElement'という性質を持っていますか? – gdoron

+0

+1エレガントな方法! –

+0

@gdoron:おっと、ごめんなさい、あなたのコードをコピーするときにそれを修正するのを忘れました。 'e'はリスナーに渡されるイベントです。 –