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

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

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

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

HTML

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

CSS

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

Q&A

解決済

1回答

1794閲覧

スクロールした時に要素が出てくるアニメーションのライブラリを使うと、最初の読み込み時レイアウト崩れが発生してしまうのを防ぎたいです。

nomura02

総合スコア133

JavaScript

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

HTML

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

CSS

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

0グッド

0クリップ

投稿2021/01/19 10:20

前提・実現したいこと

スクロールしていくと、要素が次々と現れる、「ScrollReveal」というJSライブラリを使いつつ、
レイアウト崩れを防ぎたいです。

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

そのアニメーションを誤って併用していることによってこの問題が起きているようです。
↓これを適用させようとすると、

JS

1ScrollReveal().reveal('.animation3', { 2 duration: 2000, 3 origin: 'right', 4 distance: '50px', 5 viewFactor: 0.5, 6 }); 7

背景固定にしているファーストビューの部分や、ほかレイアウトが崩れます。
画像のような状態になってしまいます。
発生している問題

該当のソースコード

↓いっぱい書いてありますが、単純に、要素にあわせて、出てくるスピードを変えたかったので、
このようにしています。

JS

1ScrollReveal().reveal('.animation1', { 2 duration: 1500, 3 origin: 'top', 4 distance: '50px', 5 viewFactor: 0.3, 6 }); 7 8 ScrollReveal().reveal('.animation2', { 9 duration: 1000, 10 origin: 'bottom', 11 distance: '50px', 12 viewFactor: 0.2, 13 }); 14 15ScrollReveal().reveal('.animation3', { ←恐らく問題の記載部分 16 duration: 2000, 17 origin: 'right', 18 distance: '100px', 19 viewFactor: 0.5, 20 }); 21 22 ScrollReveal().reveal('.animation4', { 23 duration: 2000, 24 origin: 'left', 25 distance: '100px', 26 viewFactor: 0.5, 27 }); 28 29 ScrollReveal().reveal('.animation5', { 30 duration: 3500, 31 origin: 'left', 32 distance: '80px', 33 viewFactor: 0.1, 34 }); 35 36 ScrollReveal().reveal('.animation6', { 37 duration: 3500, 38 viewFactor: 0.5, 39 }); 40 41 ScrollReveal().reveal('.animation7', { 42 duration: 3500, 43 origin: 'bottom', 44 distance: '80px', 45 viewFactor: 0.1, 46 }); 47 48 ScrollReveal().reveal('.animation8', { 49 duration: 4000, 50 origin: 'left', 51 distance: '150px', 52 viewFactor: 0.5, 53 opacity: 1, 54 }); 55 56 ScrollReveal().reveal('.animation9', { 57 duration: 1500, 58 origin: 'top', 59 distance: '50px', 60 viewFactor: 0.8, 61 scale: 3, 62 }); 63 64 ScrollReveal().reveal('.animation10', { 65 duration: 1500, 66 viewFactor: 0.2, 67 });

HTML側のクラス名に書き、制御するタイプのライブラリです。

HTML

1<main> 2 <section class="threecommitment"> 3 <div class="threecommitment-content"> 4 5 <div class="box price"> 6 <div class="subject price-content animation1"> 7 <h3>01.PRICE</h3> 8 <h4>高品質な家具をお手頃価格で</h4> 9 <p>テキスト</p> 10 </div> 11 <figure class="animation7"><img src="img/commit01.png" alt="PRICEイメージ画像"></figure> 12 </div> 13 14 <div class="box specialty"> 15 <div class="subject specialty-content animation1"> 16 <h3>02.SPECIALTY</h3> 17 <h4>専門店としての知識と技術</h4> 18 <p>テキスト</p> 19 </div> 20 21 <figure class="animation7"><img src="img/commit02.png" alt="SPECIALTYイメージ画像"></figure> 22 </div> 23 24 <div class="box design"> 25 <div class="subject design-content animation1"> 26 <h3>03.DESIGN</h3> 27 <h4>洗練されたデザイン</h4> 28 <p>テキスト</p> 29 </div> 30 <figure class="animation7"><img src="img/commit03.png" alt="DESIGNイメージ画像"></figure> 31 </div> 32 </div> 33 </section> 34 35 36 <section class="anniversary"> 37 <figure class="animation8"><img src="img/est1990_1.png" alt="メモリアルプレート"></figure> 38 39 <div class="anniversary-content"> 40 <div class="anniversary-content-writing"> 41 <p class="est animation1">EST.<br>1990</p> 42 43 <p class="thankyou animation3">Thank you very much!</p> ←ここで右から出るアニメーションを使っています。 44 45 <div class="text animation7"> 46 <p テキスト</p> 47 </div> 48 </div> 49 </div> 50 </section> 51 </main> 52

CSS

1/*---3COMMITMENTファーストビュー---*/ 2.introduction { 3 background-image: url(../img/back_commitment.jpg); 4 background-size: cover; 5 background-repeat: no-repeat; 6 background-attachment: fixed; 7} 8 ↑これがIOSだとうまくうごかないとのことだったので 9 10@media (max-width: 667px) { 11 .introduction { 12 background-image: none; 13 } 14} 15 ↑スマホバージョンでは、これを解除して、 16 17.introduction-content { 18 width: 50%; 19} 20 21@media (max-width: 667px) { 22 .introduction-content { 23 background: rgba(0, 0, 0, 0.555); 24 padding: 5%; 25 width: 90%; 26 margin: 5% auto; 27 } 28 ↑これはスクロール部分の、透明黒背景の部分です 29 .introduction-content:before { 30 content: ""; 31 display: block; 32 position: fixed; 33 top: 0; 34 left: 0; 35 z-index: -1; 36 width: 100%; 37 height: 100vh; 38 background: url(../img/back_commitment2.jpg) center no-repeat; 39 background-size: cover; 40 -webkit-transform: translate3d(0, 0, 0); 41 transform: translate3d(0, 0, 0); 42 } 43} 44 ↑スマホバージョンの背景画像固定の部分です 45 46.introduction-content .title { 47 padding: 30% 0; 48} 49 50.introduction-writing { 51 padding: 0 10%; 52 height: 100vh; 53 position: -webkit-sticky; 54 position: sticky; 55 top: 0; 56 left: 0; 57} 58 59@media (max-width: 667px) { 60 .introduction-writing { 61 position: static; 62 } 63} 64 ↑一応 position: sticky;もスマホバージョンでは解除しました。 65 66 67 ↓右から出てくるアニメーションを適用させている要素の、CSSです。 68.anniversary-content-writing { 69 width: 90%; 70 padding-bottom: 20%; 71 margin-left: 38%; 72} 73 74@media (max-width: 667px) { 75 .anniversary-content-writing { 76 width: 100%; 77 margin-left: 0%; 78 padding: 0%; 79 } 80} 81 82.anniversary-content .text { 83 width: 55%; 84} 85 86@media (max-width: 667px) { 87 .anniversary-content .text { 88 padding: 10%; 89 } 90} 91 92.anniversary-content .thankyou { 93 font-size: 32px; 94 font-family: "playfair-display", serif; 95 font-style: normal; 96 font-weight: 900; 97 line-height: 1em; 98 font-style: italic; 99 padding: 5% 10%; 100} 101 102@media (max-width: 667px) { 103 .anniversary-content .thankyou { 104 font-size: 24px; 105 padding: 5%; 106 } 107} 108

試したこと

・同様に、JSにscale: 1を設定したときも同じことが起こりました。
・paddingやmarginを消してみたのですが、そうすると、アニメーション終了時のレイアウトが崩れ、余白もなくなりませんでした。
・「スクロール中にクラスを付与してposition:fixed;を指定しても描画はCPUが行うのでスクロールが終わるまで反映されない」という記事を拝見し、transform: translate3d(0, 0, 0);を、position:fixed;を設定した要素にいれてみまちたがどうやら見当違いのようでした。
・distanceを、 '10px',にしてみたところ解消されましたが、右からふわっと出てくるアニメーションのよさが消えてしまいました。

JS

1ScrollReveal().reveal('.animation3', { 2 duration: 2000, 3 origin: 'right', 4 distance: '10px', 5 viewFactor: 0.5, 6 });

・これが最後の手でした。いっそ、隠してしまおうと思い、下記を入れてみました。⇒だめでした。

CSS

1body{ 2 overflow-x: hidden; 3}

お聞きしたいことまとめ

  1. なぜ、右から出てきたり、拡大してから元の大きさに戻る「scale」などを使うと、こうしてレイアウトが一気に崩れてしまうのでしょうか。
  2. どうして、overflow-x: hidden;が効かないのでしょうか。

長くなってしまい、大変恐縮ですが、どうぞ宜しくお願いいたします。

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

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

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

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

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

guest

回答1

0

自己解決

右からのアニメーションを諦めることで、問題は完全に解決しました。
もし良いアイディアがありましたら、引き続き調べていきたいです。
お騒がせしましたm(_ _)m

投稿2021/01/20 06:55

nomura02

総合スコア133

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問