我試圖從滾動後的頂部和它的下一個位置獲取元素的當前距離。事實上,我試圖根據距離選擇動畫持續時間。我寫了下面的代碼,但它不能正常工作 -jQuery當前位置和滾動位置之間的區別
我有菜單項,當我點擊每一個,窗口滾動到其位置。但問題是,當我點擊最後一個項目,它應該移動3000px在2秒,我想通過獲得距離來增加時間。不幸的是,當我添加if - else if
部分的一些項目不起作用。我的意思是點擊它們後沒有發生任何事。
var w = window.innerWidth
|| document.documentElement.clientWidth
|| document.body.clientWidth;
var h = window.innerHeight
|| document.documentElement.clientHeight
|| document.body.clientHeight;
var scrolingMenuTime=1500;
var hashTagActive = "";
$(".item, .item-f").click(function (ev) {
if(hashTagActive != this.hash) {
ev.preventDefault();
var next = 0;
if ($(this.hash).offset().top > $(document).height() - $(window).height()) {
next = $(document).height() - $(window).height();
} else {
next = $(this.hash).offset().top;
}
var currentPosition=$(this).offset().top;
var diffPos=Math.abs(next-currentPosition);
if (diffPos >= h && diffPos < 2*h){
scrolingMenuTime=1700;
}else if(diffPos >= 2*h && diffPos < 3*h){
scrolingMenuTime=2500;
}else if(diffPost >= 3*h && diffPos < 4*h){
scrolingMenuTime=3500;
}else if(diffPos >= 4*h && diffPos < 5*h){
scrolingMenuTime=4500;
}else if(diffPos >= 5*h){
scrolingMenuTime=5500;}
else{
return false;
}
$('html,body').animate({
scrollTop: next
}, scrolingMenuTime, 'easeOutBack');
hashTagActive = this.hash;
location.hash = '';
}
});
而且也是我要告訴,當我刪除if - else if
部分然後代碼工作正常。 if - else if
部分有什麼問題?
「無法正常工作」 什麼是預期的結果,併發生了什麼呢? – Popnoodles
感謝您的評論。其實我有6個菜單項,當我點擊每個菜單項時,窗口滾動到它的位置。但問題是,當我點擊最後一個項目時,它應該在2秒內移動超過3000像素,我想通過獲取距離來增加時間。不幸的是,當我添加「if and else if」部分時,一些項目不起作用。我的意思是點擊它們後沒有發生任何事。 – Vahid65
我在你的問題中加入了這個。只要一點,而不是if/elseif/elseif/else使用開關。 – Popnoodles