Подтвердить что ты не робот

Как вы анимируете FB.Canvas.scrollTo?

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

Ответ 3

Я только использовал технику Фрэнсиса и реализовал версию 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 не начинается в верхней части страницы, вы можете настроить его.

Ответ 4

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