Firefox上的JQuery .position()和.offset()错误

时间:2011-07-06 17:50:40

标签: jquery firefox position offset

我有一个滚动的DIV,通过JQuery确定中间的元素。我尝试过使用position()和offset()参数,在这两种情况下,Firefox都没有得到正确的答案,而Chrome和Safari也是如此。

position()。top或offset()。top确定容器中间元素的位置。然而,firefox正在从滚动容器中确定它,因此在滚动期间总是将第三个元素放下而不是中间元素。

这里有2个小提琴,一个使用.position(),另一个使用.offset()。

OFFSET() - http://jsfiddle.net/pxfunc/XHPYF/7/ POSITION() - http://jsfiddle.net/U4qyp/133/

任何人都知道为什么会发生这种情况或如何解决它?

1 个答案:

答案 0 :(得分:2)

如果查看实际的js文件,则根据浏览器的不同,处理滚动行为。对于Firefox,它正在操纵滚动元素的-moz-transform而不是其中的内容的位置。

DEMO: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();
    }
});