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

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

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

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

HTML

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

Q&A

解決済

1回答

1599閲覧

パララックスについて

parapra

総合スコア14

jQuery

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

HTML

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

0グッド

1クリップ

投稿2020/02/21 01:04

編集2020/02/21 01:10

現在パララックス効果で背景をスクロールすると画像が変わるというデザインを作りたいと考えております。

ですがスクロールすると画像指定している画像ではなく背景が見えてしまうという状態になっています。
画像の表示場所などはjQueryで指定したりしているのですがうまくいきません。

コードは下記のようなものを使用使用しています。

HTML

1<div class="parallax-wrap"> 2 <div class="parallax bg-01" id="parallax-01"> 3 <h1>タイトル</h1> 4 </div> 5 <div class="content">前面:コンテンツエリア</div> 6 <div class="parallax bg-02" id="parallax-02"> 7 <h2> 8 9 </h2> 10 </div> 11 <div class="content">前面:コンテンツエリア</div> 12 <div class="parallax bg-03" id="parallax-03"> 13 <h2> 14 15 </h2> 16 </div> 17 <div class="content">前面:コンテンツエリア</div> 18 </div>

CSS

1.parallax.bg-01 { 2 width: 100%; 3 position: relative; 4 background-image: url(../img/back/renga.jpg); 5 z-index: 1; 6} 7.parallax.bg-01::before { 8 content: ''; 9 background-color: rgba(0,0,0,.3); 10 position: absolute; 11 top: 0; 12 right: 0; 13 bottom: 0; 14 left: 0; 15 z-index: -1; 16} 17 18.parallax.bg-02 { 19 width: 100%; 20 position: relative; 21 background-image: url(../img/back/renga1.jpg); 22 z-index: -1; 23} 24.parallax.bg-02::before { 25 content: ''; 26 background-color: rgba(0,0,0,.3); 27 position: absolute; 28 top: 0; 29 right: 0; 30 bottom: 0; 31 left: 0; 32 z-index: -1; 33} 34 35.parallax.bg-03 { 36 width: 100%; 37 position: relative; 38 background-image: url(../img/back/renga2.jpg); 39 z-index: -1; 40} 41.parallax.bg-03::before { 42 content: ''; 43 background-color: rgba(0,0,0,.3); 44 position: absolute; 45 top: 0; 46 right: 0; 47 bottom: 0; 48 left: 0; 49 z-index: -1; 50} 51 52.parallax { 53 min-height: 400px; 54 background-position: center; 55 background-repeat: no-repeat; 56 background-size: cover; 57 padding: 60px; 58 box-sizing: border-box; 59} 60.content { 61 padding: 60px; 62 background-color: #fff; 63}

jQuery

1 $(function(){ 2 var target1 = $("#parallax-01"); 3 var targetPosOT1 = target1.offset().top; 4 var target2 = $("#parallax-02"); 5 var targetPosOT2 = target2.offset().top; 6 var target3 = $("#parallax-03"); 7 var targetPosOT3 = target3.offset().top; 8 var targetFactor = 0.5; 9 var windowH = $(window).height(); 10 var scrollYStart1 = targetPosOT1 - windowH; 11 var scrollYStart2 = targetPosOT2 - windowH; 12 var scrollYStart3 = targetPosOT3 - windowH; 13 $(window).on('scroll',function(){ 14 var scrollY = $(this).scrollTop(); 15 if(scrollY > scrollYStart1){ 16 target1.css('background-position-y', (scrollY - targetPosOT1) * targetFactor + 'px'); 17 }else{ 18 target1.css('background-position','center'); 19 } 20 if(scrollY > scrollYStart2){ 21 target2.css('background-position-y', (scrollY - targetPosOT2) * targetFactor + 'px'); 22 23 }else{ 24 target2.css('background-position','center'); 25 } 26 if(scrollY > scrollYStart3){ 27 target3.css('background-position-y', (scrollY - targetPosOT3) * targetFactor + 'px'); 28 }else{ 29 target3.css('background-position','center'); 30 } 31 }); 32});

下記の画像のように1枚目はページを開いた時です。
2枚目が下にスクロールして行った時です。
2枚目を見てもらったらわかるようにレンガの画像の下側に灰色の背景が見えてしまっています。
3枚目も同様です。
これを解決したいです。

何かご教授いただければ幸いです。

1枚目
1枚目

2枚目
2枚目

3枚目
3枚目

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

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

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

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

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

guest

回答1

0

ベストアンサー

これは単純に背景画像の高さが足りてないということです。今回のコードではjsで高さの中央値との差分を計算してずらしているようで、背景画像はあくまで元のコンテンツの大きさに依存します。background-size:coverで横幅を合わせて比率を合わせて高さを取っているので、高さが取れていない部分はbackground-colorになります。

もしこの実装で修正するなら、

  • 画像ソースを画面サイズの比率に合わせるか(高さを画面サイズの比率より大きくする)
  • background-repeatをかけてあげて継ぎ足す
  • 背景画像のサイズを無理やり引き延ばす

css

1// 背景画像のサイズを無理やり引き延ばすれ 2//比率がおかしいので横の長さを計算する必要がある 3background-size: 100vw 100vh;

かがいいかと思います。

投稿2020/02/21 02:28

zushi0905

総合スコア683

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

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

parapra

2020/02/21 05:52

画像の大きさの問題だったんですね! ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問