单击按钮时从一个Div滚动到另一个Div

Scroll from Div to Div when clicking a button

本文关键字:Div 一个 滚动 另一个 按钮 单击      更新时间:2023-09-26

我有4个部分,和一个nextButton,用于滚动。我希望每次点击该按钮时,页面都会滚动,最靠近顶部的部分也会滚动到顶部,这样每次点击时,我都能以合理的方式获得从第一部分到最后一部分的滚动序列。

首先,我用"下一个"概念制作了它,从第1节到第n节,但它很糟糕。事实上,如果你用鼠标或手指滚动到底部,然后第一次点击nextButton按钮,页面就会回到第一部分。

不!我不想那样。

所以我尝试了这种新的逻辑方法,它需要不止一个If—Else If循环。但是它不工作:

var $output = $('.output');
$(window).on('scroll', function () {
    var scrollTop = $(window).scrollTop(),
        sec1Offset = $('#sec1').offset().top,
        sec2Offset = $('#sec2').offset().top,
        sec3Offset = $('#sec3').offset().top,
        sec4Offset = $('#sec4').offset().top,
        d1 = (sec1Offset - scrollTop),
        d2 = (sec2Offset - scrollTop),
        d3 = (sec3Offset - scrollTop),
        d4 = (sec4Offset - scrollTop);
    $output.html(d1 + " " + d2 + " " + d3 + " " + d4);
});
var scrollTop = $(window).scrollTop(),
    sec1Offset = $('#sec1').offset().top,
    sec2Offset = $('#sec2').offset().top,
    sec3Offset = $('#sec3').offset().top,
    sec4Offset = $('#sec4').offset().top,
    d1 = (sec1Offset - scrollTop),
    d2 = (sec2Offset - scrollTop),
    d3 = (sec3Offset - scrollTop),
    d4 = (sec4Offset - scrollTop),
    aa = (('d1' > 0)),
    bb = (('d1' <= 0) && ('d2' > 0)),
    cc = (('d1' < 0) && ('d2' <= 0) && ('d3' > 0)),
    dd = (('d1' < 0) && ('d2' < 0) && ('d3' <= 0) && ('d4' > 0));
$('#next-btn').click(function () {
    if ('aa') {
        $('html, body').animate({
            scrollTop: $('#sec1').offset().top
        }, 1300);
        return false;
    } else if ('bb') {
        $('html, body').animate({
            scrollTop: $('#sec2').offset().top
        }, 1300);
        return false;
    } else if ('cc') {
        $('html, body').animate({
            scrollTop: $('#sec3').offset().top
        }, 1300);
        return false;
    } else if ('dd') {
        $('html, body').animate({
            scrollTop: $('#sec4').offset().top
        }, 1300);
        return false;
    }
});

我把链接留给JsFiddle!

TNX !

你所面临的"第一次点击"的问题是因为你已经包装你的变量作为一个字符串。

aa = (('d1' > 0)),
bb = (('d1' <= 0) && ('d2' > 0)),
cc = (('d1' < 0) && ('d2' <= 0) && ('d3' > 0)),
dd = (('d1' < 0) && ('d2' < 0) && ('d3' <= 0) && ('d4' > 0));

if ('aa') {
    $('html, body').animate({
        scrollTop: $('#sec1').offset().top
    }, 1300);
    return false;
}
...

在这两种情况下,都是对字符串进行条件检查。如果你去掉引号,就可以了。

第一次成功的原因是'aa'每次都求真。

希望这对你有帮助!

http://jsfiddle.net/PxnAw/20/