下記のように開発者ツールで検出した数値では、[5024]と出てくるのですが、
実際のコーディングでは、5000pxとしてしています。なので、ここは5000pxにならないとおかしいのですが、
この24pxが出るのはjsの組み方がおかしいからでしょうか?
それともこういう誤差は出るものなのでしょうか?
HTML
<div class="page-top"> <a href="#" class="page-top_link"></a> </div> <div class="container"> <main> <p>コンテンツの高さは5000</p> </main> <footer class="footer"> <p>フッター</p> </footer> </div>
CSS
.page-top { position: fixed; bottom: 20px; right: 20px; transition: 0.5s; } .page-top_link { position: relative; display: block; width: 45px; height: 45px; border-radius: 10px; background-color: #cccccc; } .page-top_link:before { content: ""; display: block; position: absolute; top: 55%; left: 50%; transform: translate(-50%, -50%) rotate(45deg); width: 8px; height: 8px; border-top: 2px solid #fff; border-left: 2px solid #fff; } .is-hidden { visibility: hidden; opacity: 0; } main { height: 5000px; text-align: center; } .footer { height: 100px; background-color: #ff5757; padding: 20px; color: #fff; text-align: center; }
js
$(function() { var elem = $(".footer"); var banner = $(".page-top"); var elemO = elem.offset().top; // ページトップからの要素の高さを取得 var windowH = $(window).height(); // ウィンドウの高さを取得 $(window).on("scroll", function() { // スクロールした値を取得 var windowS = $(window).scrollTop(); // 現在の位置 if(windowS > elemO - windowH + (windowH / 2) ){ // 要素が見えたら動く banner.addClass("is-hidden"); }else{ banner.removeClass("is-hidden"); } }); });