前提
JavasScript初学者です。
同期処理に関して質問があります。
実現したいこと
ここに実現したいことを箇条書きで書いてください
以下、一連の動きを実現させたいです。
1.該当ページのローディング
2."id=js-field01Target"の要素まで画面スクロール
3."id=js-menuFixed "の要素に".js-show"というクラスを付与
発生している問題・エラーメッセージ
同期処理させる記述のであるpromiseを使用したのですが、正常に動いてくれません。
具体的には以下の動きをしました。
「"id=js-menuFixed "の要素」が一瞬表示された後、非表示になり、
画面が「"id=js-field01Target"の要素」まで画面スクロールする。
該当のソースコード
JavasScript
const field01Target = document.getElementById('field01Target'); const menuFixed = document.getElementById('js-menuFixed'); const promise = new Promise((resolve, reject) => { window.addEventListener('load', function () { const rect = field01Target.getBoundingClientRect().top; const offset = window.pageYOffset; const gap = 90; const target = rect + offset - gap; window.scrollTo({ top: target, behavior: 'smooth', }); }); resolve(); }); promise.then(() => { menuFixed.classList.add('js-show'); });
試したこと
promiseではなく、基本のコールバック関数を使用しました。
その場合、またしても期待通りの動きはしませんでした。
具体的な以下のような動きです。
画面が一瞬スクロールされた後、画面は初期位置に戻り、
「"id=js-menuFixed "の要素」が表示される。
補足情報(FW/ツールのバージョンなど)
コールバック関数使用時の記述です。
function scrollDown(callback) { const rect = field01Target.getBoundingClientRect().top; const offset = window.pageYOffset; const gap = 90; const target = rect + offset - gap; window.scrollTo({ top: target, behavior: 'smooth', }); callback(); } scrollDown(function () { menuFixed.classList.add('js-show'); });
回答1件
あなたの回答
tips
プレビュー