2011-07-17 11 views
5

私のアニメーションがなぜジャンプしているのかを調べるのに苦労しています。何か案は?jQueryの幅のアニメーションでジャンプする

http://jsfiddle.net/9F5DK/5/

jQuery(document).ready(function() { 

// Animate the single page nav 
    jQuery("a#post-nav-next").hover(

      function(){ 

      jQuery("a#post-nav-next span").stop(true, true).animate({width: "toggle", opacity: "toggle"}); 

     } 
    ); 
}); 
+1

フォローアップ。それはスパンが閉じるとテキストがリフローすることによって引き起こされているようです。これを修正するには?おそらくそれを近くに隠すのだろうか? – Niels

+0

うーん...まだうまくいっていない[link](http://jsfiddle.net/9F5DK/6/)overflow:hidden – Niels

+0

周囲のコンテナではなくテキストをアニメートしているので、私は答えにも興味があります。私は誰かが私よりも賢く答えを待つだろう。 – kasdega

答えて

3

これはわかりました。通常、私はオリジナルのhtml javascript/jqueryをこれほど多く変更するのは好きではありません。これがあなたのためにうまくいかなければ、私はお詫びします。ここでは、この程度

http://jsfiddle.net/LqHwk/1/

一つの良いところは、セットアップあなたが追加することができているあなたは、私が考えて欲しいものないJSFiddleが...あるように、多くの

ラッパーの内側に望むよう
<div class="post-nav-next"> 

と彼らはすべて同じに動作します

私は非常にjqueryプラグインhoverIntentを使用することをお勧めします。

+0

すごい!!!!ありがとうkasdega!私はちょうどこれをもう一度見始めると、それは私が得たより良い解決策です:-)私は好き嫌いも好きです – Niels

2

の問題は、私が参照してください。

をインライン<a>たり、CSSやアニメーションで<span>タグに高さや幅を設定します。インラインタグの高さまたは幅の設定に関する問題については、this articleを参照してください。これは、CSSとアニメーションの両方に適用されます。幅をアニメートするには、ブロック要素で行う必要があると思います。

幅と不透明度のトグルによってアニメーションが混乱しているようです。おそらく、開始点と終了点が何であるべきかを把握する必要がないように、ホバーの両方のコールバックを指定し、アニメーションの開始点と停止点をより直接指定する方が良いでしょう。

たとえば、HTMLをブロック要素(これは確実に幅をアニメーション化する必要があると思います)に戻すことなく、ここでは不透明度だけで滑らかなアニメーションが作成されます。私はCSSの開始点を希望の開始不透明度に設定しました。私はアニメーションを設定するためにトグルの使用をやめ、明示的に設定しています。私はこれが必要であるかどうかはわかりませんが、あなたが望むものを推測しようとするトグルからあいまいさを取り除きます:http://jsfiddle.net/jfriend00/r2cdn/(このjsfiddleの不透明アニメーション、下のjsfiddleに含まれる両方のアニメーション)。

jQuery(document).ready(function() { 

// Animate the single page nav 
    jQuery("a#post-nav-next").hover(function(){ 
      jQuery("a#post-nav-next span").stop(true, true).animate({opacity: "1.0"}); 
     }, function() { 
      jQuery("a#post-nav-next span").stop(true, true).animate({opacity: "0"}); 
     } 
    ); 
}); 

幅を切り替えるには、どの2つの状態を切り替えたいと思っていましたか?それは人間としてはわかりませんでしたが、おそらくjQuery.toggle()にも明らかではありませんでした。あなたがしようとしているのは、正しいパディングをアニメーション化することです。それから直接行うだけです。

パディングの直接アニメーションを入れてCSSの開始値を変更すると、アニメーションがスムーズに開始されます。私は100%あなたが探していたアニメーションを知っているわけではありませんが、これはあなたが行くことができる方向でなければなりません:http://jsfiddle.net/jfriend00/PE4qQ/

jQuery(document).ready(function() { 

// Animate the single page nav 
    jQuery("a#post-nav-next").hover(function(){ 
     jQuery("a#post-nav-next span").stop(true, true).animate({"opacity": "1.0", "padding-right": "100px"}); 
     }, function() { 
      jQuery("a#post-nav-next span").stop(true, true).animate({"opacity": "0", "padding-right": "0px"}); 
     } 
    ); 
}); 
+0

幅の状態は0とフルサイズ(つまり、テキストを調整するために展開してください)と思われます。 to display:block)100pxから(例のように)全幅に...しかしどのように??? – Niels

+0

埋め込みアニメーションの追加コメントを参照してください。一部のインライン要素では、幅を強制するのが嫌いです。 divやinline-block要素のようなブロック要素がある場合、幅がautoである固定幅と最終状態の初期状態になります。 "width") - 私はあなたが明示的に2つの州を設定しなければならないと思う。 – jfriend00

+0

ええ、すべての良い点。私は今のところこれを残して、寝る(メルボルンの午前1時30分)。午前中に再検査するつもり.zzzzzzzzzzz – Niels

0

私はこのアニメーションに別の時間を持って帰ってきました。最終的な効果は、ここで見ることができます:

http://jsfiddle.net/Niels/zrru5/1/

注目すべきいくつかの重要な事柄は、以下の通りである:それは、コンテナがアニメーション化されますよう

  1. overflow:hiddenルールは、テキストを非表示にします。
  2. white-space: nowrap;span)は、テキストのリフローを防止します。
  3. divは、ロード時にはデフォルト状態のままで、幅が格納されます。その幅は、ホバーアニメーションで再び適用されます。

誰かが私よりもよく、jsをより簡潔にするでしょうが、そこにはあなたがいます。ポストナビゲーションのための素晴らしい効果。

関連する問題