2012-01-20 4 views
1

...何かに0時間でjQueryの.animateを交換し、より効率的な

http://jsfiddle.net/mnRNE/

CSS

body { 
height:2000px; 
} 

#top-box { 
position:fixed; 
width:200px; 
height:200px; 
margin-left:100px; 
margin-top:50px; 
background-color:blue; 
z-index:2; 
} 

#bottom-box { 
position:fixed; 
width:200px; 
height:200px; 
margin-left:110px; 
margin-top:60px; 
background-color:red; 
z-index:1;  

} 

JavaScript

$(document).ready(function() { 
    var away = false; 

$(document).scroll(function() { 
    if ($(document).scrollTop() > 250) { 
     if (!away) { 
      away = true; 
      $('#bottom-box').stop().animate({ 
       'margin-top': '200px' 
      }, 1500); 
     } 
    } else { 
     away = false; 
     $('#bottom-box').stop().animate({ 
      'margin-top': '60px' 
     }, 0); 
    } 
}); 
}); 

HTML

<div id="top-box"></div> 
<div id="bottom-box"></div> 

これは、ページ下にユーザーがスクロール一度250個のピクセルようになり、赤いボックスがアニメーション化し、青色のボックスの下から出てき。この最初のアニメーションは、トランジションが明白になるようにタイミングが取られています(赤い枠が目に見えるように滑り出します)。

ユーザーが250ピクセルを超えてスクロールバックすると、赤色のボックスが青色のボックスの下に戻るように設定されます。これはタイマーなしで行われるので、トランジションは即座に行われます(赤いボックスが元の場所にスナップバックします)。

これはうまく動作し、必要なすべてを行います。しかし、アニメーションを全く使わずに、タイミングやアニメーションを必要とせずに赤い枠を「margin-top:60px」に「リセット」するだけで、この2番目のアニメーションを実現するより良い方法があるかどうか不思議です?私が求めています基本的に

は、JavaScriptを...

 $('#bottom-box').stop().animate({ 
      'margin-top': '60px' 
     }, 0); 

セクションはなく、アニメーションを使用せずに同じ結果を達成するために異なった、より効率的に書かれるだろうか?一種の「bottom-box」から「margin-top」:「60px」のように?

答えて

1

私はjqueryの.cssを使用して

http://jsfiddle.net/mnRNE/1/

 $('#bottom-box').stop().css('marginTop', '60px'); 

ここトリック

+1

完全に動作しますが、それは 'marginTop'の代わりに 'margin-top'を置くとうまくいくようです。なぜ私はもう一方を使うべきなのですか? – Flickdraw

+1

私はこれを説明したCSSのマニュアルで何かを見たと思っていました。ダンウェルマンのコメントを見てください。しかし、それは要素を取り出すためだけであり、CSSを取得することと同じ設定だと思って間違えました。マージントップとマージントップの両方がうまくいきます! – Tim

3
$('#bottom-box').stop().css({ 
     'margin-top': '60px' 
    }); 
+0

同じことが、このコメントを見動作しませんん滑らかな印象だと思いますダンウェルマンズで答え。 – Tim

+2

@Timそれは動作し、あなたの答えはこれの複製です? – Esailija

+0

これは動作しません。しかし、{と}が 'margin-top'の前後に削除されている場合、 '60px'は正常に動作しているようです。 – Flickdraw

1

なぜ

$('#bottom-box').css('margin-top', '60px'); 
+0

JqueryはこれをjQueryのマニュアルから防ぐため、これは機能しません。簡略CSSプロパティ(マージン、背景、枠線など)はサポートされていません。たとえば、レンダリングされたマージンを取得する場合は、$(elem).css( 'marginTop')および$(elem).css( 'marginRight')などを使用します。 – Tim

+0

この半分はFirefoxとChomeで動作しますが、最初のアニメーションが終了している限り動作しますが、ユーザーがアニメーションの途中でスクロールすると、赤いボックスは位置をリセットしません。 IE、Opera、Safariで見ればうまくいくようです。 – Flickdraw

関連する問題