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

发布于 2024-11-18 18:57:09 字数 536 浏览 6 评论 0原文

我有一个滚动 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/

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

I have a scrolling DIV that via JQuery determines the element in the middle. I have tried using both the position() and offset() parameters and in both cases Firefox does not get the right answer whilst Chrome and Safari do.

The position().top or offset().top determine the position of the middle element from the container. Yet firefox is determining it from the scrolling container and thus giving the third element down always rather than the middle element during scroll.

Here are 2 fiddles, one using .position() and the other .offset().

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

Anyone have any idea why this is happening or how to fix it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

呆° 2024-11-25 18:57:09

如果您查看实际的 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();
    }
});

If you look at the actual js file, the scroll behaviour is handled differently depending on the browser. For Firefox, it is manipulating -moz-transform of the scroll element instead of the position of what's inside it.

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();
    }
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文