在溢出的div

时间:2016-03-19 19:37:30

标签: javascript jquery html scroll

我是javascript的新手,目前我正在努力了解更多信息。我的想法是创建一个简单的导航菜单加上一个div,它启用溢出并且里面有很多div。但是,似乎我用于在溢出的div内滚动的代码不起作用。我试图自己解决问题,但我的知识还不够。

在底部,我将提供我编写的代码的运行示例。问题是当你点击链接“第2页”时,div实际上是向下滚动到第二个div。但是,如果您已经在此页面上时按下链接“第2页”,您将自动转到第一个div。此外,当我们处于“第2页”时,“第3页”的链接似乎无效。如果有人可以帮助我或至少给我一些建议如何解决这个问题,我将非常感激。提前谢谢。

$(".Link1").click(function() {
    $('.Box').animate({
        scrollTop: $(".Page1").offset().top},
        'slow');
});

$(".Link2").click(function() {
    $('.Box').animate({
        scrollTop: $(".Page2").offset().top},
        'slow');
});

$(".Link3").click(function() {
    $('.Box').animate({
        scrollTop: $(".Page3").offset().top},
        'slow');
});
body{
  margin:0;
  padding:0;
}

.Nav{
  position:relative;
  width:10%;
  height:100vh;
  background-color:red;
  float:left;
}

.Link1{
  position:relative;
  color:#FFFFFF;
  text-align:center;
  font-size:3vw;
  cursor: pointer;
}

.Link2{
  position:relative;
  color:#FFFFFF;
  text-align:center;
  font-size:3vw;
  cursor: pointer;
}

.Link3{
  position:relative;
  color:#FFFFFF;
  text-align:center;
  font-size:3vw;
  cursor: pointer;
}

.Box{
  position:relative;
  width:90%;
  height:100vh;
  background-color:green;
  overflow-y:hidden;
  float:left;
}

.Page1{
  position:relative;
  width:100%;
  height:100vh;
  background-color:green;
}

.Page2{
  position:relative;
  width:100%;
  height:100vh;
  background-color:gold;
}

.Page3{
  position:relative;
  width:100%;
  height:100vh;
  background-color:gold;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="Nav">
  <div class="Link1">
    Page 1
  </div>
  <div class="Link2">
    Page 2
  </div>
  <div class="Link3">
    Page 3
  </div>
</div>

<div class="Box">
  <div class="Page1">
    Page 1
  </div>
  <div class="Page2">
    Page 2
  </div>
  <div class="Page3">
    Page 3
  </div>
</div>

2 个答案:

答案 0 :(得分:2)

让我建议您使用锚点滚动的最佳选择:

$(document).on('click', '.scroller-link', function () {
    var obj = $($(this).attr('href'));

    if (obj.size() > 0) {
        $(selector).animate({
            scrollTop: obj.offset().top
        });
        return false;
    }
});

(别忘了设置selector

HTML:

<a class="scroller-link" href="#divID"></a>
<div id="divID"></div>

答案 1 :(得分:1)

根据你的代码,你需要在click事件之前定义变量,但是为了实现@Undefitied的答案是最好的选择。

var var1 = $(".Page1").offset().top;
var var2 = $(".Page2").offset().top;
var var3 = $(".Page3").offset().top;

$(".Link1").click(function() {
    $('.Box').animate({
        scrollTop: var1},
        'slow');
});

$(".Link2").click(function() {
    $('.Box').animate({
        scrollTop: var2},
        'slow');
});


$(".Link3").click(function() {
    $('.Box').animate({
        scrollTop: var3},
        'slow');
});