2016-05-18 2 views
0

ナビゲーションの高さを知ることができません。divへのスクロールアニメーション中に、nav/divの高さをオフセットすることができません

試み#1:

$("#process-link").click(function() { 
    $('html, body, #project-container').animate({ 
     scrollTop: $("#process-work").offset().top 
    }, 2000 + $("nav#primary").height()); 
}); 

試み#2:

var headerHeight = $("nav#primary").height(); 

    $.address.change(function(evt) { 
    var target = "#" + evt["pathNames"][0]; //Get the target from the event data 

    // If there's been some content requested go to it…else go to the top 
    if(evt["pathNames"][0]) { 
     var scrollToPosition = $(target).offset().top - headerHeight; 
     $('html, body, #project-container').animate({ 'scrollTop': scrollToPosition }, 600); 
    } else { 
     $('html, body, #project-container').animate({ 'scrollTop': '0' }, 600); 
    } 

    return false; 
}); 

試行#3

$(function() { 

     $('#process-link').click(function() { 
      $("html, body, #project-container").animate({ 
       scrollTop: $("#process-work").offset().top + $('nav#primary').height() 
      }, 2000); 

      return false; 
     }); 
    }); 

HTML

<nav id="primary">Content</nav>  
<div id="arrow-nav" class="container-full clearfix">Content</div> 

<div id="project"> 
     <div id="project-container"> 
      <div class="container"> 
       <section> 
        <p class="sm-title">Client:</p> 
        <h2 id="project-title"></h2> 
        <p id="project-description"></p> 
        <a id="process-link">View Process <i class="fa fa-long-arrow-right"></i></a> 

        <div class="row"> 
         <div id="process-work"> 
          <div class="col-6 fixme"> 
           <h2 id="process-title">Process Work</h2> 
           <p id="process-description"></p> 
          </div> 
          <div class="col-6"> 
           <div id="process-wireframes" class="owl-theme owl-carousel"></div> 
          </div> 
         </div><!-- end process-work--> 
        </div> 

       </section> 
      </div> 
     </div><!-- end project container --> 
    </div><!--closes project--> 

私は#プロセス・リンクをクリックした後、それは#プロセスワークにあなたをスライドし、NAVの#プライマリおよびそれに応じて#矢印-NAVとオフセットの高さを計算してそれを作るしようとしています。

+0

HTMLを提供できますか? –

+0

「サイトを完全に壊した」とはどういう意味ですか?実際のエラーメッセージを投稿してください。 – C14L

+0

最初の試みでは、scrollTop値の代わりにアニメーションの長さ(2000 +高さ)にナビゲーションの高さを追加します。あなたの質問や実際のコードに間違いがありますか?後者の場合、それはあなたの問題かもしれません。それ以外の場合は、HTMLを追加して、どの要素をどこにスクロールするかを記述してください。 – Lesley

答えて

0

このjavascriptは現在、私がやりたいことを達成しました。すべてのdiv要素を#project-contentという1つの要素にグループ化し、その高さとnavを計算しました。ページが修正されたため、問題が発生していました。

HTML

<div id="project-content"> 
    <p class="sm-title">Client:</p> 
    <h2 id="project-title"></h2> 
    <p id="project-description"></p> 
    <div style="background:#919191" class="hr"></div> 
    <a id="project-link" target="_blank">View Website <i class="fa fa-long-arrow-right"></i></a> 
    <a id="process-link" data-type="slideTo" data-target="process-work">View Process <i class="fa fa-long-arrow-right"></i></a> 
    <div id="project-tag"></div> 
    <div id="project-images"></div> 
</div><!--end project content--> 

Javascriptを

$('#process-link').click(function() { 
     $("html, body, #project-container").animate({ 
      scrollTop: $('nav#primary').height() + $("#arrow-nav").height() + $("#project-content").height() + 30 
     }, 2000); 

     return false; 
    }); 

もドキュメントに存在してdivタグと私は計算していますを参照するにはOPを見てください。 #project-containerにはpadding-top:60px;があります。これはオフセットにも影響すると私は思っています。それが30を追加した理由です。

+0

誰もこれがこのアプローチに間違っていると思いますか?私はこれが十分に良い答えであることを知るまでこれを受け入れたくありません。 –

+0

30pxをハードコーディングするのではなく、どの要素がそれを設定していて動的にサイズを取得しているかを知ることができます。そうすれば、スタイルシートが変わっても、このjsの編集について心配する必要はありません。例えば、30pxが本当に '#project-container'の' padding-top'の半分から来ているなら、 '$( '#project-container')css( 'padding-top')/ 2' – Lesley

関連する問題