Есть ли способ получить положение прокрутки окна в Facebook API? - PullRequest
5 голосов
/ 30 ноября 2011

В API FB.Canvas есть методы для получения вершины прокрутки, вершины смещения и высоты клиента (через getPageInfo ()), но мне нужен способ найти самую верхнюю позицию прокрутки окна, чтобы я мог определить, является ли область I должны быть видны клиенту в поле зрения. Пользователи будут перелистывать форму, и она будет выше большинства экранов. Мне нужно убедиться, что элемент формы виден.

Ответы [ 2 ]

4 голосов
/ 30 ноября 2011

Похоже, что свойство getPageInfo (). ScrollTop и getPageInfo (). OffsetTop вместе предоставят вам позицию прокрутки верхнего окна.

Вот последний код, который я использовал для прокрутки элементов в поле зрения с учетом абсолютных / глобальных координат x и y.

function scrollElementIntoViewFB(applicationID, elementTop, elementBottom) {
    var pageInfo = FB.Canvas.getPageInfo();

    // fallback if running local
    if (pageInfo.clientHeight==0) {
         scrollElementIntoView(applicationID, elementTop, elementBottom);
         return;
    }

    var scrollPosition = pageInfo.scrollTop;
    var viewportHeight = pageInfo.clientHeight;
    var flashOffsetTop = pageInfo.offsetTop;
    var elementAbsoluteTop = elementTop + flashOffsetTop;
    var elementAbsoluteBottom = elementBottom + flashOffsetTop;
    var visibleBottomPosition = viewportHeight + scrollPosition;

    if (scrollPosition>elementAbsoluteTop) {
        FB.Canvas.scrollTo(0, elementAbsoluteTop);
    }
    else if (visibleBottomPosition<elementAbsoluteBottom) {
        FB.Canvas.scrollTo(0, elementAbsoluteBottom-viewportHeight);
    }


    return true;
}

И если по какой-то причине вы хотите версию только для HTML (которая не будет работать, если в фрейме внутри другого домена, например Facebook, но будет работать на вашем собственном сайте):

function scrollElementIntoView(applicationID, elementTop, elementBottom) {
    var scrollPosition = f_scrollTop();
    var viewportHeight = f_clientHeight();
    var flashElement = swfobject.getObjectById(applicationID);
    var flashOffsetTop = flashElement.offsetTop; // not sure if this is cross browser   
    var elementAbsoluteTop = elementTop + flashOffsetTop;
    var elementAbsoluteBottom = elementBottom + flashOffsetTop;
    var visibleBottomPosition = viewportHeight + scrollPosition;

    if (scrollPosition>elementAbsoluteTop) {
        window.scrollTo(0, elementAbsoluteTop);
    }
    else if (visibleBottomPosition<elementAbsoluteBottom) {
        window.scrollTo(0, elementAbsoluteBottom-viewportHeight);
    }

    return true;
}

Поиск в Интернете других функций по их именам, и вы найдете остальную часть кода.

0 голосов
/ 03 октября 2012

тот же общий подход, что и в отношении ответа, с точки зрения позиционирования, когда у вас есть позиция прокрутки, но я думаю, что SDK немного изменился с тех пор, как это было опубликовано, и теперь для метода getPageInfo () требуется функция обратного вызова, поэтому для получения того же начального значенияданные, которые вы должны начать с чего-то вроде:

FB.Canvas.getPageInfo(function(info){
  console.log(info);

  //... code for positioning based on fb window
});

http://developers.facebook.com/docs/reference/javascript/FB.Canvas.getPageInfo/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...