質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.51%

  • JavaScript

    20415questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • HTML

    11507questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

  • jQuery

    8157questions

    jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

範囲内で表示されるアンカーリンクをjqueryで作る

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 770

a1291

score 8

スクロールでnavからfooterの間のみで表示されるアンカーリンクをjQueryで作成したいです。
途中まで作成したのですが、上スクロールをした際にnavで消えないので、どなたかご教授お願いします。

HTML

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>タイトル</title>
</head>
<body>
 <div class="wrapper">
     <ul class="nav">
      <li><a href="">ナビ</a></li>
      <li><a href="">ナビ</a></li>
      <li><a href="">ナビ</a></li>
     </ul>
     <div class="maincontets">
         メインコンテンツ
     </div>
     <div class="footer">
         フッター
     </div>
     <div class="pagetop">トップへもどる</div>
 </div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
</body>
</html>


css

* {
  margin: 0;
  padding: 0;
}
.maincontets {
  height: 5000px;
  background-color: #eee;
}
.nav {
  margin-top:700px;
  background-color: #ddd;
}

.footer {
  background-color: #ccc;
  height: 300px;
}
.pagetop {
  display: none;
  position: fixed;
  bottom: 10%;
  margin-top: -30px;
  right: 10px;
}


jQuery

  $(window).scroll(function(){
    var navTop = $(".nav").offset().top;
    var footerTop = $(".footer").offset().top;
    var scrollPosition = $(window).height() + $(window).scrollTop();
    if( scrollPosition < (footerTop-navTop)) {
      $(".pagetop").fadeIn();
    }else {
      $(".pagetop").fadeOut();
    }
  });
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • s8_chu

    2017/08/14 17:06

    もし可能ならばCSSを追記していただけませんか?

    キャンセル

  • a1291

    2017/08/14 18:10

    申し訳ありません。css追加いたしました。よろしくお願いします。

    キャンセル

  • a1291

    2017/08/15 02:45

    高さは不明という点で設定したいので、具体的な数字は使わずにできますでしょうか。申し訳ありません。

    キャンセル

回答 1

checkベストアンサー

+1

的外れかもしれませんが、以下のように行ってみてはいかがでしょうか?

<!DOCTYPE html>
<html lang="ja"><!-- 修正 -->
<head>
    <meta charset="UTF-8">
    <title>タイトル</title>
    <style type="text/css">
        * {
            margin: 0;
            padding: 0;
        }

        .maincontets {
            height: 5000px;
            background-color: #eee;
        }

        .nav {
            margin-top: 700px;
            background-color: #ddd;
        }

        .footer {
            background-color: #ccc;
            height: 300px;
        }

        .pagetop {
            display: none;
            position: fixed;
            bottom: 10%;
            margin-top: -30px;
            right: 10px;
        }
    </style>
</head>
<body>
<div class="wrapper">
    <ul class="nav">
        <li><a href="">ナビ</a></li>
        <li><a href="">ナビ</a></li>
        <li><a href="">ナビ</a></li>
    </ul>
    <div class="maincontets">
        メインコンテンツ
    </div>
    <div class="footer">
        フッター
    </div>
    <div class="pagetop">トップへもどる</div>
</div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
    $(window).scroll(function () {
        var navTop = $(".nav").offset().top;
        var footerTop = $(".footer").offset().top;
        var scrollPosition = $(window).height() + $(window).scrollTop();
        if (scrollPosition < (footerTop - navTop) && scrollPosition > (navTop + 350)) {//修正
            $(".pagetop").fadeIn();
        } else {
            $(".pagetop").fadeOut();
        }
    });
</script>
</body>
</html>

追記

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>タイトル</title>
    <style type="text/css">
        * {
            margin: 0;
            padding: 0;
        }

        .maincontets {
            height: 5000px;
            background-color: #eee;
        }

        .nav {
            margin-top: 700px;
            background-color: #ddd;
        }

        .footer {
            background-color: #ccc;
            height: 300px;
        }

        .pagetop {
            display: none;
            position: fixed;
            bottom: 10%;
            margin-top: -30px;
            right: 10px;
        }
    </style>
</head>
<body>
<div class="wrapper">
    <ul class="nav">
        <li><a href="">ナビ</a></li>
        <li><a href="">ナビ</a></li>
        <li><a href="">ナビ</a></li>
    </ul>
    <div class="maincontets">
        メインコンテンツ
    </div>
    <div class="footer">
        フッター
    </div>
    <div class="pagetop">トップへもどる</div>
</div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
    $(window).scroll(function () {
        var navTop = $(".nav").offset().top;
        var footerTop = $(".footer").offset().top;
        var scrollPosition = $(window).scrollTop();

        if ($(window).height() + scrollPosition < footerTop && scrollPosition > navTop) {
            $(".pagetop").fadeIn();
        } else {
            $(".pagetop").fadeOut();
        }
    });
</script>
</body>
</html>

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/08/15 02:46

    高さは不明という点で設定したいので、具体的な数字は使わずにできますでしょうか。申し訳ありません。

    キャンセル

  • 2017/08/15 02:47

    具体的な数字とはどれのことでしょうか?

    キャンセル

  • 2017/08/15 02:48

    350という数字です。

    キャンセル

  • 2017/08/15 02:49

    navとfooterの間のみでpagetopをfadein,outさせたいので、高さの取得方法を知りたいです。要望が多くて申し訳ありません。

    キャンセル

  • 2017/08/15 02:55 編集

    > 350という数字です。
    350という数字はnavTopが常にscrollPositionよりも小さくなるために加えている値です。もし気になるならばnavTopの高さを大きくするか、該当部分の記述を削除する必要があります。

    > navとfooterの間のみでpagetopをfadein,outさせたいので、高さの取得方法を知りたいです。
    どこの高さでしょうか?メインコンテンツの高さならばheightメソッド、innerHeightメソッド、outerHeightメソッドなどで取得することが可能です。

    キャンセル

  • 2017/08/15 02:59

    はい、そのメソッドは存じ上げているのですが表記の仕方がわからず先に進めない状態となっています。
    サイトは別で作成していますが、内容をこちらで記載することができない為、一旦仮の状態でコードをあげています。申し訳ございませんが、navからfooterの間のみ表示させる表記をご教授願えますでしょうか。

    キャンセル

  • 2017/08/15 03:28

    追記しました。

    キャンセル

  • 2017/08/15 03:31

    解決できました。夜分遅くまで対応いただき本当にありがとうございます。他の回答も見させていただき勉強したいと思います。本当にありがとうございます。

    キャンセル

同じタグがついた質問を見る

  • JavaScript

    20415questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • HTML

    11507questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

  • jQuery

    8157questions

    jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。