Как вы анимируете FB.Canvas.scrollTo?
Я создал приложение с установленным размером (около 2000 пикселей) и имеет меню, которое вызывает FB.Canvas.scrollTo, чтобы помочь пользователю перемещаться по длинной странице.
Есть ли способ добавить плавный эффект прокрутки? Facebook не предлагает никаких решений в своем блоге разработчиков.
Ответы
Ответ 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.