2017-07-26 87 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>