2016-05-20 7 views
0

私はここにウェブサイトを作ったhttp://sycoscientistrecords.github.io。私は、様々なdiv要素の位置を決定するために、次のコードを使用している:コード内の配列要素に58が追加されているのはなぜですか?

myscroll = {}; 
function getScrollpos(idname) { 
    return document.getElementById(idname).offsetTop; 
} 
myscroll.point = []; 
myscroll.idnames = []; 
myscroll.point[0] = getScrollpos("home"); 
myscroll.point[1] = getScrollpos("artists"); 
myscroll.point[2] = getScrollpos("songs"); 
myscroll.point[3] = getScrollpos("beats"); 
myscroll.point[4] = getScrollpos("contact"); 

問題は、getScrollpos("beats");戻り2766しかしmyscroll.point[3]戻る3124。同様にgetScrollpos("contact")が返信3668であるが、myscroll.point[4]返信4046である。一方、myscroll.point[0]getScrollpos("home")はどちらも同じ値を返します。 myscroll.point[1] and getScrollpos("artists")も同じ値を返します。ソースファイルから他のすべてのjavascriptコードを削除しても、問題は残ります。

質問:私のコードで3番目と4番目の配列要素に58が追加されているのはなぜですか?

P.S:私のウェブサイトのコードを開発ツールで直接開くことはできますが、私はGoogleのChromeでいくつかの研究を行った

\t var myscroll = {}; 
 
\t myscroll.list = document.getElementsByClassName("navbar-right")[0].getElementsByTagName("li"); 
 

 
\t myscroll.bodypos = function getScrollY() { 
 
\t scrOfY = 0; 
 
\t if (typeof(window.pageYOffset) == 'number') { 
 
\t  //Netscape compliant 
 
\t  scrOfY = window.pageYOffset; 
 

 
\t } else if (document.body && (document.body.scrollLeft || document.body.scrollTop)) { 
 
\t  //DOM compliant 
 
\t  scrOfY = document.body.scrollTop; 
 

 
\t } else if (document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)) { 
 
\t  //IE6 standards compliant mode 
 
\t  scrOfY = document.documentElement.scrollTop; 
 

 
\t } 
 
\t return scrOfY; 
 
\t } 
 

 
\t function getScrollpos(idname) { 
 
\t return document.getElementById(idname).offsetTop; 
 
\t } 
 
\t myscroll.point = []; 
 
\t myscroll.point[0] = getScrollpos("home"); 
 
\t myscroll.point[1] = getScrollpos("artists"); 
 
\t myscroll.point[2] = getScrollpos("songs"); 
 
\t myscroll.point[3] = getScrollpos("beats"); 
 
\t myscroll.point[4] = getScrollpos("contact"); 
 

 
\t function removeclass() { 
 
\t for (var i = 0; i < 5; i++) { 
 
\t  myscroll.list[i].className = ""; 
 
\t } 
 
\t } 
 

 
\t window.addEventListener('scroll', function(e) { 
 

 
\t if (myscroll.bodypos() >= myscroll.point[0]) { 
 
\t  removeclass(); 
 
\t  myscroll.list[0].className = "active"; 
 
\t } 
 

 

 
\t if (myscroll.bodypos() >= myscroll.point[1]) { 
 
\t  removeclass(); 
 

 
\t  myscroll.list[1].className = "active"; 
 
\t } 
 

 
\t if (myscroll.bodypos() >= myscroll.point[2]) { 
 
\t  removeclass(); 
 
\t  myscroll.list[2].className = "active"; 
 

 
\t } 
 

 
\t if (myscroll.bodypos() >= myscroll.point[3]) { 
 
\t  removeclass(); 
 
\t  myscroll.list[3].className = "active"; 
 

 
\t } 
 

 
\t if (myscroll.bodypos() >= myscroll.point[4]) { 
 
\t  removeclass(); 
 
\t  myscroll.list[4].className = "active"; 
 

 
\t } 
 
\t }); 
 

 
\t for (var j = 0; j < 5; j++) { 
 

 
\t (function(j) { 
 

 
\t  myscroll.list[j].anchor = document.getElementsByClassName("navbar-right")[0].getElementsByTagName("li")[j].getElementsByTagName("a")[0]; 
 
\t  myscroll.list[j].anchor.addEventListener("click", function(event) { 
 

 

 
      event.preventDefault(); 
 
\t  if ((document.body.scrollTop != undefined) && (document.body.scrollTop < myscroll.point[j])) { 
 

 
\t   var clr1 = setInterval(function() { 
 
\t   if (document.body.scrollTop < myscroll.point[j] - 10) { 
 
\t    document.body.scrollTop += 3; 
 
\t   } else { 
 
\t    document.body.scrollTop = myscroll.point[j]; 
 
\t    clearInterval(clr1); 
 
\t   } 
 
\t   }, 1); 
 
\t  } 
 

 

 

 
\t  if ((document.documentElement.scrollTop != undefined) && (document.documentElement.scrollTop < myscroll.point[j])) { 
 

 
\t   var clr2 = setInterval(function() { 
 
\t   if (document.documentElement.scrollTop < myscroll.point[j] - 10) { 
 
\t    document.documentElement.scrollTop += 3; 
 
\t   } else { 
 
\t    document.documentElement.scrollTop = myscroll.point[j]; 
 
\t    clearInterval(clr2); 
 
\t   } 
 
\t   }, 1); 
 
\t  } 
 

 

 
\t  if ((document.body.scrollTop != undefined) && (document.body.scrollTop > myscroll.point[j])) { 
 
\t   var clr3 = setInterval(function() { 
 
\t   if (document.body.scrollTop >= myscroll.point[j] + 4) { 
 
\t    document.body.scrollTop -= 3; 
 
\t   } else { 
 
\t    document.body.scrollTop = myscroll.point[j]; 
 
\t    clearInterval(clr3); 
 
\t   } 
 

 
\t   }, 1); 
 
\t  } 
 

 
\t  if ((document.documentElement.scrollTop != undefined) && (document.documentElement.scrollTop > myscroll.point[j])) { 
 
\t   var clr4 = setInterval(function() { 
 
\t   if (document.documentElement.scrollTop >= myscroll.point[j] + 4) { 
 
\t    document.documentElement.scrollTop -= 3; 
 
\t   } else { 
 
\t    document.documentElement.scrollTop = myscroll.point[j]; 
 
\t    clearInterval(clr4); 
 
\t   } 
 

 
\t   }, 1); 
 
\t  } 
 
\t  alert(j); 
 

 
\t  }, true); 
 

 
\t }(j)); 
 

 
\t }
#navbar, 
 
#navbar a:link, 
 
#navbar a:visited, 
 
#navbar a:hover { 
 
    position: fixed; 
 
    color: red !important; 
 
} 
 
#home { 
 
    width: 500px; 
 
    height: 500px; 
 
    background-color: black; 
 
    display: block; 
 
} 
 
#artists { 
 
    width: 500px; 
 
    height: 500px; 
 
    background-color: gray; 
 
    display: block; 
 
} 
 
#songs { 
 
    width: 500px; 
 
    height: 500px; 
 
    background-color: yellow; 
 
    display: block; 
 
} 
 
#beats { 
 
    width: 500px; 
 
    height: 500px; 
 
    background-color: blue; 
 
    display: block; 
 
} 
 
#contact { 
 
    width: 500px; 
 
    height: 500px; 
 
    background-color: green; 
 
    display: block; 
 
}
<div id="navbar" class="navbar-collapse collapse"> 
 
    <ul class="nav navbar-nav navbar-right"> 
 
    <li class="active"><a href="#">Home</a> 
 
    </li> 
 
    <li><a href="#artists">Artists</a> 
 
    </li> 
 
    <li><a href="#songs">Songs</a> 
 
    </li> 
 
    <li><a href="#beats">Beats</a> 
 
    </li> 
 
    <li><a href="#contact">Contact</a> 
 
    </li> 
 
    </ul> 
 
</div> 
 

 
<div id="home"></div> 
 
<div id="artists"></div> 
 
<div id="songs"></div> 
 
<div id="beats"></div> 
 
<div id="contact"></div>

+0

htmlでも投稿できますか? – Verthosa

+0

@Verthosa私のウェブサイトのHTMLコード全体を投稿したいですか? – user31782

+0

私の前の投稿と同じように、私のコードのワイヤフレーム版を投稿することができます:http://stackoverflow.com/q/37298414/3429430 – user31782

答えて

0

:私は、次のコードに問題があることを模倣するために、同じJavaScriptコードで基本的なアーキテクチャを作りました。あなたのサイトにアクセスした後、私は開発者コンソール(F12)を開いてコードを実行しました。結果は次のとおりです。

myscroll = {}; 
function getScrollpos(idname) { 
    return document.getElementById(idname).offsetTop; 
} 
myscroll.point = []; 
myscroll.idnames = []; 
myscroll.point[0] = getScrollpos("home"); 
myscroll.point[1] = getScrollpos("artists"); 
myscroll.point[2] = getScrollpos("songs"); 
myscroll.point[3] = getScrollpos("beats"); 
myscroll.point[4] = getScrollpos("contact"); 

getScrollpos("home"); 
// 0 
getScrollpos("songs"); 
// 1202 
getScrollpos("beats"); 
// 2017 
getScrollpos("contact"); 
// 2857 
myscroll.point 
// [0, 420, 1202, 2017, 2857] 

すべてがOKです。

+0

私は問題が小さな画面のデスクトップにのみ表示されると思う。クロム開発ツールのモバイルビューで小さな画面サイズを試してみてください。 – user31782

+0

配列に値を保存した後、ウィンドウのサイズを変更した可能性があります。したがって、 'getScrollpos()'は保存された値と等しくない実際の値を返します。 –

+0

いいえ私はちょうど小さい画面サイズのコンピュータのウェブサイトをチェックしました。 – user31782

0

に起因して、どのように「対策」、

getScrollpos("beats"); 

は差が道あなたから来ているデベロッパーコンソールを表示したり、関数を呼び出すとき、それは可能ではありませんあなたに応じて、変更される可能性がありますの結果テストですか?

デベロッパーコンソールの作成方法に応じて、この関数は異なる値を返します。

+0

しかし、なぜ、 'getScrollpos(" beats ");と' getScrollpos( "contact"); 'の結果だけが変更されるのですか?なぜ、他の値も 'getScrollpos(" songs ")のようなものではありません。かわった。 – user31782

関連する問題