Как вы анимируете FB.Canvas.scrollTo? - PullRequest
13 голосов
/ 25 августа 2011

Я создал приложение с заданным размером (около 2000 пикселей в высоту) и меню, которое вызывает FB.Canvas.scrollTo, чтобы помочь пользователю перемещаться по длинной странице.

Есть ли способ добавить эффект плавной прокрутки? Facebook не предлагает никаких решений в своем блоге для разработчиков.

Ответы [ 4 ]

47 голосов
/ 15 ноября 2011

Используя метод @ Джонни, вы можете сделать это немного проще с помощью

function scrollTo(y){
    FB.Canvas.getPageInfo(function(pageInfo){
            $({y: pageInfo.scrollTop}).animate(
                {y: y},
                {duration: 1000, step: function(offset){
                    FB.Canvas.scrollTo(0, offset);
                }
            });
    });
}
5 голосов
/ 31 октября 2011

Просто сегодня возникла та же проблема - я придумал немного javascript, который использует метод animate jQuery, который обеспечивает некоторое замедление - прокрутка все еще слегка дергается (полагаю, это из-за прокси 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);
        }
    });
}
2 голосов
/ 25 октября 2011

Я просто использовал технику Фрэнсиса и реализовал версию jQuery

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

Вам необходимо заменить .scroll_to_me на селектор, к которому вы хотите перейти. Также я добавил + 30 к смещению, так как iframe не начинается в верхней части страницы, вы можете настроить это.

0 голосов
/ 25 августа 2011

Один из способов сделать это - получить текущую позицию Y, а затем перейти в позицию Y.Запустите цикл for с setTimeout, который приведет пользователя к конечной позиции Y.

...