• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:jQuery|:not(:animated))

jQuery|:not(:animated)の問題と対処方法

このQ&Aのポイント
  • jQueryの.hoverを使用して要素にアニメーションを追加する際、:not(:animated)の指定をすると、マウスを素早く移動するとアニメーションが中断する問題が発生します。
  • この問題を解決する方法としては、アニメーションが途中で中断しないように、要素に対してクラスを追加し、アニメーション中かどうかを判定することが挙げられます。
  • また、area要素にはcursorプロパティが効かないため、カーソルを表示させるためのアイディアを求めています。

質問者が選んだベストアンサー

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

jqueryは大してわかりませんが… fadeIn/Outさせる対象要素は決まっているようなので、必ず操作するのですから :not(:animated)で選択する必要はないように思われます。 でも、アニメーション中にそれに反するアニメーションを指定すると変なことになるので、選択する代わりにアニメーションを停止させればよろしいかと。  http://api.jquery.com/stop/ $(function(){  $("#bread01").hover(function(){   $("#over").stop(true,true).fadeIn("fast");  },function(){   $("#over").stop(true,true).fadeOut("fast");  }); }); ただし、(↑)これだと一旦アニメーション終了の状態に飛んでしまうので、もっと速度が遅かったり、変化の度合いが大きいと不連続な感じになるかも。 (ご提示のサンプルの場合は、速度がfastで変化もそれほどではないので、あまり違和感はないと思いますが) 現在の構成だと、常に一番上にイメージマップが表示されているので、(下にある)#overはhide()する必要がなさそうなので、opacityの操作だけにして連続的に変化するようにもできそうですね。 $(function(){  $("#over").css("opacity",0).show(); //透明にして表示状態にする  $("#bread01").hover(function(){   $("#over").stop().animate({opacity:1}, "fast");  },function(){   $("#over").stop().animate({opacity:0}, "fast");  }); }); >また、area要素にはcursorプロパティが効かないようなのですが 効かないことはないみたい。 手近にあるブラウザで試したところ、fx(3.6)はareaで、opera(10)はmapに設定することで変化します。 ただし、cursol → cursor に。 IE(6)はどうもうまくいかないみたい(ちゃんと調べてませんが…)。いっそのこと、hoverの処理で一緒にやってしまうとか?

salt_on_all
質問者

お礼

前回に続き、ご回答ありがとうございました。頂いたコードを試させていただいたところ、望む通りに機能しました。今まで、.stopは使ったことがなかったのですが、こういう風に使えばいいんですね。すごく感謝です。jQueryというかJavaScript自体、初めて一ヶ月なので、今後も質問させていただくことが多いと思いますので、その際はぜひよろしくお願いします。本当にありがとうございました!!

関連するQ&A