Ошибка JQuery .position () и .offset () в Firefox - PullRequest
2 голосов
/ 06 июля 2011

У меня есть прокручиваемый DIV, который через JQuery определяет элемент в середине. Я попытался использовать параметры position () и offset (), и в обоих случаях Firefox не получает правильного ответа, в то время как Chrome и Safari -.

Position (). Top или offset (). Top определяют положение среднего элемента из контейнера. Тем не менее, Firefox определяет его из прокручиваемого контейнера и, таким образом, всегда выделяет третий элемент, а не средний элемент во время прокрутки.

Вот 2 скрипты, одна из которых использует .position (), а другая .offset ().

OFFSET () - http://jsfiddle.net/pxfunc/XHPYF/7/ ПОЛОЖЕНИЕ () - http://jsfiddle.net/U4qyp/133/

Кто-нибудь знает, почему это происходит или как это исправить?

1 Ответ

2 голосов
/ 13 июля 2011

Если вы посмотрите на сам файл js, поведение прокрутки обрабатывается по-разному в зависимости от браузера. Для Firefox он манипулирует -moz-transform элемента прокрутки, а не позицией того, что внутри него.

ДЕМО: http://jsfiddle.net/vQXqq/

JQuery

function test() {

    var $ul = $('#leftwheel');

    $('#bkodate').val('');

    $ul.find('li').each(function(n) {

        var $this = $(this);

        var $mozTransform = $(".slotinner").css("-moz-transform");
        var mozfix = !($mozTransform === null) ? parseInt($mozTransform.substring($mozTransform.lastIndexOf(',') + 1, $mozTransform.length - 3)) : 0;

        if ($this.position().top + $this.height() + mozfix > 100 && $this.position().top + mozfix < $ul.height()) {

            var result = $('#leftwheel li:eq(' + parseInt(n - 2) + ')').html();
            $('#bkodate').val(result);
        }
    });
}
var leftwheel = new iScroll('leftwheel', {
    snap: 'li',
    momentum: true,
    hScrollbar: false,
    vScrollbar: false,
    onScrollEnd: function() {
        test();
    }
});
...