2017-07-26 85 views
0

我正在尝试做一个向下箭头,通过点击jquery按顺序(一个一个地)移动锚点。到目前为止,我只设法立即移动它们。使用jQuery滚动锚点

var targets = new Array(); 
 
$(".jump").each(function() { 
 
    targets.push($(this).attr('id')); 
 
}); 
 

 
$("#clickme").click(function() { 
 
    for (var i = 0; i < targets.length; i++) { 
 
    if (i + 1 >= targets[i]) { 
 
     $("html, body").animate({ 
 
     scrollTop: $('#' + targets[i]).offset().top 
 
     }, 1000); 
 
    } 
 
    } 
 
});
p { 
 
    padding-top: 100px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<a style="cursor: pointer;" id="clickme">Click Here</a> 
 
<a class="jump" id="1"></a> 
 
<p>Lorem ipsum dolor sit amet...</p> 
 
<a class="jump" id="2"></a> 
 
<p>Lorem ipsum dolor sit amet...</p> 
 
<a class="jump" id="3"></a> 
 
<p>Lorem ipsum dolor sit amet...</p>

我的代码或算法可能是错的。我开放给jQuery的替代品。

+0

*(请忽略和原谅暂时关闭。我已经打开** **都现在眼睛)* –

回答

1

要循环锚“一个接一个”你不想要一个for循环,而是保存您在每次点击后增加一个索引(设置为0将重置再次锚定第一个锚点)并检查数组中是否还有其他项目。

var currentTarget = 0; 
 
var targets= new Array(); 
 
      $(".jump").each(function() { 
 
       targets.push($(this).attr('id')); 
 
      }); 
 
    
 
$("#clickme").click(function() { 
 
if (currentTarget < targets.length) { 
 
$("html, body").animate({ scrollTop: $('#' + targets[currentTarget]).offset().top }, 1000); 
 

 
    currentTarget++; 
 
    // Uncomment to loop 
 
    /* 
 
    if (currentTarget >= targets.length) 
 
     currentTarget=0; 
 
    */ 
 
    }   
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div style="position:fixed; background: white; border: 1px solid black"> 
 
<a style="cursor: pointer;" id="clickme">Click Here</a> 
 
</div> 
 
<a class="jump" id="1"></a> 
 
<p style="height:200px">Lorem ipsum dolor sit amet...</p> 
 
<a class="jump" id="2"></a> 
 
<p style="height:200px">Lorem ipsum dolor sit amet...</p> 
 
<a class="jump" id="3"></a> 
 
<p style="height:200px">Lorem ipsum dolor sit amet...</p>

0

这是你在找什么?

var targets = $(".jump"); 
 

 
$("#clickme").click(function() { 
 
    goTo(0); 
 

 
    function goTo(thisElement) { 
 
    if (thisElement <= targets.length - 1) { 
 
     $("html, body").animate({ 
 
     scrollTop: $(targets[thisElement]).offset().top 
 
     }, 1000, function() { 
 
     goTo(thisElement + 1); 
 
     }.bind(this)); 
 
    } 
 
    } 
 
});
p { 
 
    padding-top: 400px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<a style="cursor: pointer;" id="clickme">Click Here</a> 
 
<a class="jump" id="1"></a> 
 
<p>Lorem ipsum dolor sit amet...</p> 
 
<a class="jump" id="2"></a> 
 
<p>Lorem ipsum dolor sit amet...</p> 
 
<a class="jump" id="3"></a> 
 
<p>Lorem ipsum dolor sit amet...</p>

+0

@Cromwell这样做可以帮助您? – jeanfrg

0

我假设你要移动每次点击

你的一个元素将运行几乎瞬间。因此,它会遍历所有元素并为所有元素应用动画。改用计数器。

var $jump = $(".jump"); 
 
var jumpIndex = 0 
 

 
$("#clickme").click(function() { 
 
    if (jumpIndex < $jump.length) { 
 
    
 
    $("html, body").stop(true, true).animate({ 
 
     scrollTop: $jump.eq(jumpIndex).offset().top 
 
    }, 1000); 
 
    
 
    jumpIndex++ 
 
    }; 
 

 

 
});
.jump { 
 
    margin-top: 300px; 
 
    display: block 
 
} 
 

 
#clickme{position:fixed; top:0; left:50%} 
 

 
body{padding-bottom:500px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<button style="cursor: pointer;" id="clickme">Click Here</button> 
 
<a class="jump" id="1"></a> 
 
<p>Content 1</p> 
 
<a class="jump" id="2"></a> 
 
<p>Content 2</p> 
 
<a class="jump" id="3"></a> 
 
<p>Content 3</p>