
codejumpのgalleryサイトの模写コーディングをしているのですが、accessからcontactにかけて背景画像をfadein,fadeoutさせるとこを素のjavascriptに書き直してみたのですが、うまく表示されません。galleryの途中から一瞬表示されて消えてしまいます。どなたか解る方いらっしゃいましたら。ご教授いただけると幸いです。
javascriptのコードは以下になります。
window.addEventListener('scroll', ()=> {
let scroll = window.pageYOffset || document.documentElement.scrollTop;
let access_position = document.getElementById('access').getBoundingClientRect().top - window.innerHeight;
let contact_position = document.getElementById('contact').getBoundingClientRect().top - window.innerHeight;
if (scroll >contact_position) {
if (scroll < access_position) {
document.querySelector('.bg').style.display = 'block';
} else {
document.querySelector('.bg').style.display = 'none';
}
} else {
document.querySelector('.bg').style.display = 'none';
}
});
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
こんにちは
HTMLがないのではっきりとはしませんけれど、idがaccessとcontactの要素の表示具合によって処理を決めようとしているものと推測します。
◇「要素の位置」に関して
位置の判定で、何を判定しようとしているのかがよくわかりません。
getBoundingClientRect().top は要素の上端のviewportからの距離なので、これが0という事は、要素の上端がviewportの上端に接しているという事です。
もしも、要素が「(下部から)表示を始めたら」をチェックしたいのなら、
getBoundingClientRect().top < window.innerHeight
をチェックするのではないでしょうか?
(ご提示のように先に減算しておくのなら、正か負かのチェック)
また、最近のブラウザであれば要素の表示状態を監視できる、Intersection Observerが使用できますので、こちらを利用する方法もあると思います。
https://developer.mozilla.org/ja/docs/Web/API/In …
◇「背景画像をfadein,fadeoutさせる」に関して
ご提示のスクリプトでは、要素(.bg)のdisplay = 'block'/'none' を切り替えているだけですので、要素の表示/非表示の切り替えになっています。
また、この要素が非表示になると全体の表示レイアウトが変わりますので、多分、#contact要素の位置が変わるはずと思います。
(非表示要素は、レイアウトから外されるので、高さ0換算になります)
ご質問文には、「fadein,fadeoutさせる」とありますので、レイアウトから外す(=非表示)のではなく、レイアウト上に残したまま、透明度を変化させたいのではないのでしょうか?
もしもそうであるなら、要素の style.opacity を0~1まで変化させるアニメーションを行うことになります。
スクリプトで行うのであれば、上記の値を逐次変化させてアニメーションを行います。
一方で、この程度のアニメーションであれば、CSSアニメーションを利用したほうが簡単に実現できます。
こちらの方法であれば、クラス名の 付与/削除 程度のスクリプトで実現できますので。
また、ご質問文には「背景画像をfadein,fadeout」とありますので、要素全体ではなく「あくまでも背景画像だけを変化させたい」という意味とも取れます。
(上に記した方法は、要素全体を変化させる方法です)
その場合は、背景画像だけをコントロールする必要がありますので、若干の工夫が必要になると考えられます。
以下が、ご参考になることでしょう。
(別要素にするか疑似要素にしてしまうのが簡単と思います)
https://web-camp.io/magazine/archives/89321
丁寧なご回答ありがとうございました。ご指摘のように何を判定してるかきちんと見直してコードを修正しましたところ、上手く表示させることができました。
拙いコードでもうしわけありませんでした。参考にさせていただきます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript スマフォではボタンを表示させたくない 2 2023/01/20 14:26
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript Colorboxがうまく設置できません 2 2024/01/13 16:59
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
- PHP style.cssのjQuery条件付きcssが機能しない 4 2022/07/17 18:27
- JavaScript vertical sliderをautoplayしたい 2 2022/08/25 14:47
- JavaScript 【JavaScript】検索がヒットした場合、プルダウンをオープンで表示させる方法 2 2023/09/06 14:02
- HTML・CSS 書籍を見つつサイト造りの練習をしているのですが、見た目が一致しません 2 2022/11/28 15:00
- HTML・CSS CSSでつくったメニューのアニメーションがうまく動かない・変えたい 2 2024/01/21 11:48
- JavaScript コードレビューをお願いします。 3 2023/12/17 01:07
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
excle VBA とweb上の検索を利用...
-
Null またはオブジェクトではあ...
-
重い処理とはどのようなものが...
-
DOM要素を削除しても、イベント...
-
プルダウンを複数使い、ページ...
-
codejump 模写コーディングgall...
-
ほとんどのブラウザに対応した...
-
XMLでのAttributeを持ったNode...
-
onload時にPostBackを発生させ...
-
Latexに関する質問です。
-
ラジオボタンやコンボボックス...
-
javascriptの基本的なことだと...
-
webページ上のTabキーの動き
-
ブックマークレットの() 背景...
-
ie操作 フレームのURLが...
-
ActiveXobjectが作成できない
-
Boolean型配列中のTrueの有無を...
-
google apps scriptの終了のさせ方
-
jspからjavascriptの変数引継ぎ
-
for文を使って変数に値を入れる...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DOM要素を削除しても、イベント...
-
Latexに関する質問です。
-
excle VBA とweb上の検索を利用...
-
FireFoxのjavascriptで自動でキ...
-
乗換案内 VBAで操作したい
-
javascriptの基本的なことだと...
-
JavaScript window.openで開く...
-
TexでΣの添え字の位置直し
-
Null またはオブジェクトではあ...
-
UWSCでオンクリックのボタンを...
-
onload時にPostBackを発生させ...
-
WSHのIEオブジェクト操作後のク...
-
webページ上のTabキーの動き
-
ブックマークレットの() 背景...
-
javascriptのdocument.allにつ...
-
IE11 javascriptについて
-
Javascriptで定期的にF5を押す...
-
XMLでのAttributeを持ったNode...
-
document.onkeydownについて
-
iframeのソースを取得したい
おすすめ情報