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

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

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

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

jQuery

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

Q&A

解決済

1回答

990閲覧

jQueryの$(window).on('load')のコンフリクト

ryo5ekine

総合スコア2

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2021/04/26 19:53

前提・実現したいこと

現在、Webサイトを制作中でして、

①ローディングアニメーション
(サンプル:https://125naroom.com/demo/scroll_fixed_background_fade.html)

②スクロールエフェクト
(サンプル:https://coco-factory.jp/ugokuweb/wp-content/themes/ugokuweb/data/4-1-4/4-1-4.html)

を実装したいと考えています。

それぞれ、単体では動作するのですが、一緒に動かそうと思うとうまく動作しません。
おそらく、jQueryを使用していて、$(window).on('load~~ という部分がコンフリクトを起こしているのではないかと思うのですが、バッティングを回避する方法が分かりません。

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

①、②を両方実装しようとすると、②が動作しなくなる。

該当のソースコード

Javascript

1//①ローディングアニメーション// 2 3$(window).on('load',function(){ 4 $("#door-anime").delay(2000).fadeOut(1000);//ローディング画面を1.5秒(1500ms)待機してからフェードアウト 5}); 6 7 8//②スクロールエフェクト// 9 10$(function(){ 11 $('.one').each(function(i, elem){ 12 var contentsPOS = $(elem).offset().top; 13 $(window).on('load scroll resize', function(){ 14 var winHeight = $(window).height(); 15 var scrollTop = $(window).scrollTop(); 16 var showClass = 'show'; 17 var timing = 200; // 100pxコンテンツが見えたら次のif文がtrue 18 if (scrollTop >= contentsPOS - winHeight + timing){ 19 $(elem).addClass(showClass); 20 } else { 21 $(elem).removeClass(showClass); 22 } 23 }); 24 }); 25});

試したこと

jQuery.noConflict() での書き換え

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

スクロールエフェクトの方を関数化したらいいのではないかと思います。

js

1let scroll = function(elem){ 2 var winHeight = $(window).height(); 3 var scrollTop = $(window).scrollTop(); 4 var showClass = 'show'; 5 var timing = 200; // 100pxコンテンツが見えたら次のif文がtrue 6 if (scrollTop >= contentsPOS - winHeight + timing){ 7 $(elem).addClass(showClass); 8 } else { 9 $(elem).removeClass(showClass); 10 } 11} 12 13$(window).on('load',function(i,elem){ 14 $("#door-anime").delay(2000).fadeOut(1000);//ローディング画面を1.5秒(1500ms)待機して 15からフェードアウト 16 scroll(elem); 17}); 18 19 20//②スクロールエフェクト// 21 22$(function(){ 23 $('.one').each(function(i, elem){ 24 $(window).on('scroll resize', function(){ 25 scroll(elem); 26 }); 27 }); 28}); 29

投稿2021/04/27 00:05

編集2021/04/27 00:07
FKM

総合スコア3640

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

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

ryo5ekine

2021/04/27 02:17

FKM様 ご丁寧にご回答いただきありがとうございます。 こちらのコードで試してみましたところ、①、②のモーションの部分は問題なく動くようになりました。ありがとうございます。 しかしながら、それまで <div class="bg _01"></div> <div class="bg _02"></div> として背景画像に設定していたものが、表示されなくなってしまいました。 (ご回答コードの変更前は逆に背景画像がちゃんとでるもののモーションがおかしいという状態でした。) もし可能であれば、下記コードを参考に背景画像を表示させる方法をご教授していただけますでしょうか。 ---HTML--- <div class="container"> <div class="one"> <div class="bg _01"></div> <section> ~~~ </section>    </div> <div class="one"> <div class="bg _02"></div> <section> ~~~ </section>    </div> ---CSS--- .one { display: flex; flex-direction: column; align-items: center; width: 100%; } #door-anime img { height: 100%; width: 100%; object-fit: cover; object-position: center center; } .bg { position: fixed; top: 0; left: 0; right: 0; width: 100%; height: 100%; background-repeat: no-repeat; opacity: 0; transition: all 1.5s ease 0s; z-index: -1; } .show .bg { opacity: 1; } .bg._01 { background-image: url(~~~); background-size: contain; background-repeat: repeat; } .bg._02 { background-image: url(~~~); background-size: contain; background-repeat: repeat; } ---Javascript--- ご回答いただいたもの
FKM

2021/04/27 02:22

bodyタグの最後に持っていってください。headタグの中だとDOM生成前なので、画像が作られていないんだと思います。
ryo5ekine

2021/04/27 18:58 編集

再度コメントしていただきありまして、大変有難うございます。 jQueryとscript.jsともに(この順で)最初からbodyタグの最後にありました。 今回はうまくいきませんでしたが、今後の参考になるコメントありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問