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

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

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

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

jQuery

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

1回答

4071閲覧

特定要素が画面上部にきたら背景がスクロールについていかずに固定されるようにしたい

groco

総合スコア20

JavaScript

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

jQuery

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2017/06/22 07:47

編集2017/06/22 08:26

レスポンシブサイトで特定要素の背景が画面上部にきたらスクロールについていかずに固定されるようにしたいです。

下図のようなページがあった時に2のように要素Bがヘッダーの下にくっついたら赤色背景が固定されるような動きをつけたいと考えています。
(要素A、要素B、要素Cの高さはそれぞれ異なります)

1)要素Bはヘッダーにくっついていないので赤色背景もスクロールについてくる
ページイメージ1

2)要素Bがヘッダーにくっついたので赤色背景はスクロールについてこなくなる(位置が固定される)
ページイメージ2

3)スクロールを続けると要素Bの赤背景が固定されたまま要素Cが要素Bの赤背景の上を通り過ぎる
ページイメージ3

background-attachment:fixed がスマホでは使えないようなので、
HTMLにimgで画像を入れて背景画像のように見せながらヘッダーにくっついたらクラス名「fixed」を追加して「position:relative;」を「position:fixed;」に変更する
という方法を試してみましたが、画面に固定される時にビクッと動いてしまい動きがぎこちなくなってしまったり、スマホでは画像が変に拡大されてしまったりしてしまいました。

Javascript

1 $(function() { 2 var $win = $(window); 3 var windowWidth = window.innerWidth; 4 if (windowWidth > 600) { 5 $(window).on('load resize scroll', function() { 6 var windowYF = $(window).scrollTop() + $('.bg__fix').height(); 7 $('.bg__fix').each(function() { 8 var diffYF = windowYF - $(this).offset().top + 80; 9 if (diffYF > $(this).height()) { 10 $(this).addClass('fixed'); 11 } else if (diffYF > 0) { 12 $(this).removeClass('fixed'); 13 } 14 }); 15 }); 16 } else { 17 $(window).on('load resize scroll', function() { 18 var windowYF = $(window).scrollTop() + $('.bg__fix').height(); 19 $('.bg__fix').each(function() { 20 var diffYF = windowYF - $(this).offset().top + 50; 21 if (diffYF > $(this).height()) { 22 $(this).addClass('fixed'); 23 } else if (diffYF > 0) { 24 $(this).removeClass('fixed'); 25 } 26 }); 27 }); 28 } 29 }); 30

https://github.com/Prinzhorn/skrollr
また、こちらのプラグインを使用して実現できないかと考えたのですが、私の入れ方が悪いのかこのプラグインを導入すると独自に実装したJSがタブレットやスマホで動かなくなってしまったり、bodyの高さ取得がおかしくなってしまいページ下部に余白ができたろしてしまいます。

動かなくなるJS
https://teratail.com/questions/77289

別の方法で実装できないかと思い調べてみたのですが、スマホでは動かなかったりしてなかなか良い方法を見つけられません。
おすすめの実装方法を教えていただけないでしょうか?

対応ブラウザは下記を想定しています。
・IE9以上(IE9は背景が固定されていなくてもOK)
・Chrome、Firefox、スマホ、タブレットは各最新版

何卒よろしくお願いいたします。

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

x_x

2017/06/22 08:03

文章に反し、固定されているように見えません。3つ目の画像は間違いなのでしょうか?
groco

2017/06/22 08:19 編集

ご指摘ありがとうございます。 読み返したところ確かに紛らわしい画像でした。 画像を修正しようかと思いましたが、良いイメージを作ることができなかったため取り急ぎイメージを削除してテキストを修正させていただきました。 良いイメージを思いついたら改めて更新させていただきたいと思います。
groco

2017/06/22 08:27

何度もすみません、ご指摘いただいた画像を修正して改めて投稿させていただきました。何卒よろしくお願いいたします。
guest

回答1

0

ベストアンサー

position: sticky;のようなことをしたいのだと思いますが、まだ対応ブラウザが少ないですね。

固定するのが背景画像だけということもありそのままでは難しいところがあるかもしれませんが、以下のサイトは参考になるでしょうか?

「position: sticky;」より便利!スクロールしたらヘッダやサイドバーがぴたっと貼り付くスクリプト -Fixed Sticky
http://coliss.com/articles/build-websites/operation/javascript/fixed-sticky-for-position-sticky-polyfill.html

position-stickyについて調べたメモ
https://1000ch.net/posts/2015/position-sticky.html

iOS の Safari で Sticky (スクロール固定) 要素がカタカタしてお困りの時は
http://wp-e.org/2016/07/15/7096/

投稿2017/06/22 08:32

x_x

総合スコア13749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

groco

2017/06/22 09:14

なるほど、position: sticky というものがあるのですね。 初めて知りました。 教えていただいた Fixed Sticky を試してみたいと思います。 ちなみに、スマホ対応のパララックスを実装する際によくつかわれているプラグインなどもありましたら教えていただきたいのですがいかがでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問