2011-08-25 4 views
13

私は、ユーザーが長いページをナビゲートするのを助けるために、設定されたサイズ(約2,000 pxの高さ)のアプリケーションを作成し、FB.Canvas.scrollToを呼び出すメニューを持っています。FB.Canvas.scrollToをどのようにアニメーション化しますか?

滑らかなスクロール効果を追加する方法はありますか? Facebookはデベロッパー向けのブログでは解決策を提示していません。

答えて

47

ジョニーの方法@使用して、あなたは

function scrollTo(y){ 
    FB.Canvas.getPageInfo(function(pageInfo){ 
      $({y: pageInfo.scrollTop}).animate(
       {y: y}, 
       {duration: 1000, step: function(offset){ 
        FB.Canvas.scrollTo(0, offset); 
       } 
      }); 
    }); 
} 
+1

これは美しく機能しました。 – codeisforeva

+0

ニース!!どうもありがとう。 –

+0

$はおそらくjQueryです。 $( '#button_id')を使用します。click(function(){FB.Canvas.scrollTo(0,0);}); –

0

これを行う1つの方法は、現在のY位置を取得し、次にY位置に移動することです。ユーザーを最後のY位置に移動させるsetTimeoutを使用してforループを実行します。

2

私はフランシスの技術を使用し、あなたがにスクロールしたいセレクタで.scroll_to_meを交換する必要がjQueryのバージョン

$('html,body').animate(
    {scrollTop: $(".scroll_to_me").offset().top}, 
    {duration: 1000, step: function(top_offset){ 
    FB.Canvas.scrollTo(0, top_offset + 30); 
    } 
}); 

を実施しました。また、+ 30にオフセットを追加しました。これはiframeがページの先頭で始まらないため、これを調整する必要があるかもしれません。

+0

フムでもう少し簡単にこれを行うことができます。実装すると、ページの先頭にジャンプしてスクロールします。私の場合、ユーザーはボタンをクリックしたときに常にページの上部にいるわけではないので、滑らかなスクロールの前にジャンプすることはうまくいかないでしょう。 – Carson

5

今日は同じ問題を抱えていました - jQueryのanimateメソッドを使って少しイージングを提供するjavascriptを思いついた - スクロールはまだまだタッチがぎくしゃりです(私はFBのためだと思います。 Canvas.scrollToプロキシ)。とにかく、ここでの抜粋だ:

function scrollToTop() { 
    // We must call getPageInfo() async otherwise we will get stale data. 
    FB.Canvas.getPageInfo(function (pageInfo) { 

     // The scroll position of your app's iFrame. 
     var iFrameScrollY = pageInfo.scrollTop; 

     // The y position of the div you want to scroll up to. 
     var targetDivY = $('#targetDiv').position().top; 

     // Only scroll if the user has scrolled the window beneath the target y position. 
     if (iFrameScrollY > targetDivY) { 
      var animOptions = { 

       // This function will be invoked each 'tick' of the animation. 
       step: function() { 
        // As we don't have control over the Facebook iFrame we have to ask the Facebook JS API to 
        // perform the scroll for us. 
        FB.Canvas.scrollTo(0, this.y); 
       }, 

       // How long you want the animation to last in ms. 
       duration: 200 
      }; 

      // Here we are going to animate the 'y' property of the object from the 'iFrameScrollY' (the current 
      // scroll position) to the y position of your target div. 
      $({ y: iFrameScrollY }).animate({ y: targetDivY }, animOptions); 
     } 
    }); 
} 
関連する問題