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

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

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

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

Q&A

解決済

2回答

252閲覧

Parallax:パパラックス効果画面の構成を変えたい

riders_jewelry

総合スコア9

CSS

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

0グッド

0クリップ

投稿2018/09/07 05:53

ネット独学でウェブショップを自身で制作し運営しています。

素人のHP制作者です。もし不適切であれば当質問は即効削除し退会します。

私は今回レスポンシブデザインでのリニューアルを考えて現在は雛形を制作中です。

会社概要などを見せるページにParallax:パパラックス効果を入れたいと思っています。

ネットを参考にして試作ページを制作しました。

一応参考にしたページ通りにレスポンシブデザインPC,SP共に効果が出ました。

https://www.aquadress.club/aa.html

ただこのパパラックス効果を改良して、

ページトップから順に、画像1、白場面2、画像3、白場面4、画像5、白場面6、画像7と並べて最後にフッター。

このように改良がしたいのです。

自分で色々と作業しますが、素人なので出来ません。

このような改良ができる方法をお聞かせ頂きたいのです。

どうかよろしくお願いいたします。

ここに質問の内容を詳しく書いてください。
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

エラーメッセージ
コード

該当のソースコード

ソースコード

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答2

0

ベストアンサー

返信では見にくいのでこちらで回答を書きます。
javaScriptが動いてなかったのは、最後の beforeBg = 'bgA; の記述で終わりの'が抜けてたからです。

これは私の方のミスではあるので申し訳なく思いますが、chromeの開発者ツールや各種エディタ等使えばsyntaxErrorを見抜けるので、まずはコードをチェックする癖をつけた方が良いかと思います。
また、流石に商用とするようなページにwebで貰ったコードをノーチェックで張り付けるのは危険すぎます。
書いたコードの中にある「$('.section1').removeClass('bg〇'); // ココを正規表現に置き換える」のようにremoveClassがどのような処理をするのかを理解していれば、クラス名の指定が適当だからまず自分で変更する必要があるというのも分かるはずです。

サンプルを貰えるのはこのサイトの強みなのでいいですが、貰ったコードはまず検証し、理解してから実装しなければバグの温床となりますし、メンテナンスも出来なくなりますので、コードを理解する努力はしましょう。

以下にコピペでも動く想定の修正版コードを載せますが、同じような処理をしているところの関数化など冗長的なコードの最適化等、改良はまだまだ出来ます。
ここで載せるコードはあくまでも、現時点での暫定対応とし、最適な手法については適宜改良が必要だという認識を持っていてください。

js

1<script> 2var beforeBg = ''; 3$(window).on('load scroll touchmove', function() { 4 $scrollTop = $(window).scrollTop(); 5 // 画像を切り替える位置 = セクション要素の画面上位置 6 $changePoint1 = $('.section1').offset().top; 7 $changePoint2 = $('.section3').offset().top; 8 $changePoint3 = $('.section5').offset().top; 9 $changePoint4 = $('.section7').offset().top; 10 11 // 以下の判定処理群で各要素の位置を超えたか判定し、画像の切り替えを行う 12 if($scrollTop < $changePoint7){ 13 // 同じ背景画像への切替を行わないように判定 14 if(beforeBg !== 'bgD'){ 15 // 新しい画像へ切替 16 $('.section1').removeClass('bgA'); 17 $('.section1').removeClass('bgB'); 18 $('.section1').removeClass('bgC'); 19 $('.section1').addClass('bgD'); 20 beforeBg = 'bgD'; 21 22 } 23 } else if($scrollTop < $changePoint5){ 24 if(beforeBg !== 'bgC'){ 25 $('.section1').removeClass('bgA'); 26 $('.section1').removeClass('bgB'); 27 $('.section1').removeClass('bgD'); 28 $('.section1').addClass('bgC'); 29 beforeBg = 'bgC'; 30 } 31 } else if($scrollTop < $changePoint3){ 32 if(beforeBg !== 'bgB'){ 33 $('.section1').removeClass('bgA'); 34 $('.section1').removeClass('bgC'); 35 $('.section1').removeClass('bgD'); 36 $('.section1').addClass('bgB'); 37 beforeBg = 'bgB'; 38 } 39 } else if($scrollTop < $changePoint1){ 40 if(beforeBg !== 'bgA'){ 41 $('.section1').removeClass('bgB'); 42 $('.section1').removeClass('bgC'); 43 $('.section1').removeClass('bgD'); 44 $('.section1').addClass('bgA'); 45 beforeBg = 'bgA'; 46 } 47 } 48}); 49</script>

投稿2018/09/10 01:05

mikan_s4n

総合スコア377

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

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

riders_jewelry

2018/09/10 01:19

おはようございます。 おっしゃる事すべて理解いたします。 今回頂戴したscriptを差し込んで試してみます。 色々とアドバイスを有難うございました。 感謝です。
guest

0

HTMLの中で直接CSSの指定をしているようなので、手っ取り早くするなら、そこを以下のコードの様に変更してみて下さい。
ポイントとしては現在の奇数セクションと偶数セクションのCSS指定の反転ですかね。
スマホの背景画像の変更はJSを使ってクラスの切り替えをしているようなので、そこに関してはJSの変更・修正が必要でしょうね。

ちなみにですが、cssでsection5,section6,section7を入れているので、body内で他のセクションと同様に

<div class="section5 section"> 表示内容 </div> のような要素の追加は必要です。

CSS

1 2<!-- 3 .section { 4 height: 100vh; 5 padding: 10% 0; 6 text-align: center; 7 8} 9 10 .section2 , .section4 ,section6 { 11 background: #fff; 12 13} 14 15 @media screen and (min-width: 737px) { 16 /* PCの場合の背景画像 */ 17 .section1 { 18 background: url("https://www.aquadress.club/zzz-img/12.jpg") no-repeat fixed center center /cover; 19 } 20 .section3 { 21 background: url("https://www.aquadress.club/zzz-img/03.jpg") no-repeat fixed center center /cover; 22 } 23 .section5 { 24 background: url("https://www.aquadress.club/zzz-img/画像") no-repeat fixed center center /cover; 25 } 26 .section7 { 27 background: url("https://www.aquadress.club/zzz-img/画像") no-repeat fixed center center /cover; 28 } 29 } 30 @media screen and (max-width: 736px) { 31 /* スマホの場合の背景画像 */ 32 .section1:before{ 33 background-position: center center; 34 background-repeat: no-repeat; 35 background-size: cover; 36 position: fixed; 37 top: 0; 38 left: 0; 39 width: 100%; 40 height: 100%; 41 content: ""; 42 z-index: -1; 43 } 44 /* スマホの場合は同じ要素の背景画像を変更する */ 45 .section1.bgA:before{ 46 background-image: url("https://www.aquadress.club/zzz-img/12b.jpg"); 47 } 48 49 .section1.bgB:before{ 50 background-image: url("https://www.aquadress.club/zzz-img/03b.jpg"); 51 } 52 53 .section1.bgC:before{ 54 background-image: url("https://www.aquadress.club/zzz-img/画像"); 55 } 56 57 .section1.bgD:before{ 58 background-image: url("https://www.aquadress.club/zzz-img/画像"); 59 } 60 } 61--> 62

投稿2018/09/07 08:24

編集2018/09/07 08:29
mikan_s4n

総合スコア377

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

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

riders_jewelry

2018/09/07 08:58

早速のアドバイスをありがとうございます。 パソコンサイズでは完璧にパララックス効果が現れます。 https://www.aquadress.club/ccc.html ただ、タブレットサイズ、スマホからは全面が真っ白で画像表示されません。 スマホはアンドロイド3機で確かめました。 きっともう少しなのでしょうね。 responsiveとかのタグが必要なのでしょうか?
mikan_s4n

2018/09/07 09:21

スマホからに関しては以下の指定がある通り、736px以下の幅を持つものはそうなってしまいますね。 @media screen and (max-width: 736px) 既存jsコード拝見しましたが、既存のままではbgA、bgBの画像の切り替えしかできませんね……。 以下の様に変更すればいいかもですが、わりと強引なコードですのでスマートではないです…。 removeClassで既に付いているbgなんちゃらを削っているので、そこは正規表現等を使って、消すようにすればいいですね。 試してはないので、正常に動作する保証はないですが、大筋は間違ってはいないと思うので、微調整すればいけると思います。 大雑把に説明するとsection〇までスクロールされれば、section1の背景画像を切り替えるという処理です。 <script> var beforeBg = ''; $(window).on('load scroll touchmove', function() { $scrollTop = $(window).scrollTop(); // 画像を切り替える位置 $changePoint1 = $('.section1').offset().top; $changePoint2 = $('.section3').offset().top; $changePoint3 = $('.section5').offset().top; $changePoint4 = $('.section7').offset().top; if($scrollTop < $changePoint7){ // 同じ背景画像への切替を行わないように判定 if(beforeBg !== 'bgD'){ // 新しい画像へ切替 $('.section1').removeClass('bg〇'); // ココを正規表現に置き換える $('.section1').addClass('bgD'); beforeBg = 'bgD'; } } else if($scrollTop < $changePoint5){ if(beforeBg !== 'bgC'){ $('.section1').removeClass('bg〇'); // ココを正規表現に置き換える $('.section1').addClass('bgC'); beforeBg = 'bgC'; } } else if($scrollTop < $changePoint3){ if(beforeBg !== 'bgB'){ $('.section1').removeClass('bg〇'); // ココを正規表現に置き換える $('.section1').addClass('bgB'); beforeBg = 'bgB'; } } else if($scrollTop < $changePoint1){ if(beforeBg !== 'bgA'){ $('.section1').removeClass('bg〇'); // ココを正規表現に置き換える $('.section1').addClass('bgA'); beforeBg = 'bgA; } } }); </script>
riders_jewelry

2018/09/08 00:03

おはようございます。アドバイスに感謝です。 早速試してみました。 https://www.aquadress.club/bbb.html しかし、どうもスマホでは上手く行きません。 私のやり方がまずいのかも知れません。 単純にコピー&ペーストでscriptを入れ替えたのですが、、、
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問