滚动按钮jQuery不能立即工作

Scrolling button jQuery doesn't work instantly

本文关键字:工作 不能 按钮 jQuery 滚动      更新时间:2023-09-26

我正在研究一些使用按钮滚动到下一个div的网页。我可以让它在每个页面上工作,除了在这个特定的实例(见jsfiddle)。

我的问题是按钮在加载页面时不起作用,在按钮工作之前,用户首先必须手动开始滚动。我假设这是因为我的jQuery编码中的一些错误,我已经一遍又一遍地查看,但我似乎找不到问题。有比我更熟悉jQuery的人可以给我一个解决方案吗?

http://jsfiddle.net/y5wx7nst/3/

 $(document).ready(function () {
var currentElement = $("#bodytext > div:nth-child(1)");
var onScroll = function () {
    var container = $("#bodytext");
    var children = $(".section");
    for (var i = 0; i < children.length; i++) {
        var child = $(children[i]);
        var childLeft = container.offset().left < child.offset().left;
        if (childLeft) {
            currentElement = child;
            console.log(currentElement);
            return;
        }
    }
};
var scrollToElement = function ($element) {
    var container = $("#bodytext");
    var children = $(".section");
    var width = 0;
    for (var i = 0; i < children.length; i++) {
        var child = $(children[i]);
        if (child.get(0) == $element.get(0)) {
            if (i === 0) {
                width = 0;
            }
            container.animate({
                scrollLeft: width
            }, 500);
            onScroll();
        }
        if (child.next().length > 0) {
            width += child.next().offset().left - child.offset().left;
        } else {
            width += child.width();
        }
    }
};
var buttonright = function (e) {
        scrollToElement(currentElement.next());
    };
var buttonleft = function (e) {
    var container = $("#bodytext");
    if (currentElement.prev().length > 0) {
        if (container.offset().left == currentElement.prev().offset().left) {
            currentElement = currentElement.prev().prev().length > 0 ? currentElement.prev().prev() : currentElement.prev();
        } else {
            currentElement = currentElement.prev();
        }
    }
    scrollToElement(currentElement);
};
$("#bodytext").scroll(onScroll);
$("#buttonright").click(buttonright);
$("#buttonleft").click(buttonleft);
});

您只在初始滚动之后调用onScroll()函数:

$("#bodytext").scroll(onScroll);

我在那个声明之前添加了这个,它都工作了:

onScroll();

jsfiddle: http://jsfiddle.net/y5wx7nst/5/

代码运行currentElement值不正确时。所以你应该计算它调用函数onScroll();

...
$("#bodytext").scroll(onScroll);
$("#buttonright").click(buttonright);
$("#buttonleft").click(buttonleft);
onScroll();
});