-
Notifications
You must be signed in to change notification settings - Fork 17
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
各キャラ紹介ページからボイボ寮に遷移した際に、該当キャラの位置までスクロールする #104
Comments
issue作成ありがとうございます!! この実装が完了したらホームページの方にも反映して、告知させて頂きたいと思います・・・! |
さっき発想を教えてもらったのですが、 |
失礼しました、反応遅くなりました。 お待たせした上で大変申し訳ないのですが、期待した挙動が実現できなさそうでした!! |
今回の個別ページ化において大事にしたいユーザ体験の優先度は
①>>>>>②となっている認識です(そもそもここが合ってなかったらすみません) ①は個別→一覧の遷移をnavigate(-1)にすることで実現でき、 以下技術的な詳細2を実現しようとすると、 これをアンカーにしても、
|
実装チャレンジと詳細なコメント、本当にありがとうございます・・・! こちらでも2時間弱ほどいろいろ試してみたのですが、navigate(=ブラウザの戻る進む)とスクロール位置保存の挙動が想像と違っていてめちゃくちゃ難しいなと感じました。。。 以下いろいろなお答えと判断です。(長いです)
なるほどです!
先程のとおり、賛成です。思った以上に難しい・・・。
個人的にこの挙動がすごく不思議でいます。なんでスクロール位置が保存されないのでしょう・・・。
VOICEVOX_voicevox_engine_.VOICEVOX.-.Google.Chrome.2022-11-02.04-24-19.mp4でもよくある挙動は違っていて、例えばこちらのブログだとスクロール位置に戻りました。↓ a.click.-.-.Google.Chrome.2022-11-02.04-26-19.mp4gatsbyのドキュメントやQiita記事だと一瞬anchorに行ってからスクロール位置に行く感じでした。↓ Gatsby.Link.API._.Gatsby.-.Google.Chrome.2022-11-02.04-23-01.mp4もしこの違いについてご存知だったら知りたいなと。。 |
なんで以前の #102 ではスクロール位置が保存されてたのか不思議なのですが、navigateではなくhistory.replaceを使っていたからでしょうか。 であれば、もし実現するとしたら、個別ページに来た場合に1回だけそのキャラにスクロール、あとはreplaceで見かけ上URLを遷移させるのが良いのかなと思いました。
という所感です。 |
なるほど・・・!完全に言葉足らずでした、失礼しました 🙇
前提として、gatsbyのLinkコンポーネントによる同一サイト内遷移は、内部ではreach-routerを利用した遷移になっています。 あとスクロール位置を復帰する挙動は、ブラウザ側に実装されているものと、jsの制御で実現しているものがあります。 アンカーに戻るかスクロール位置に戻るかは、上記2つのどっちが働くかによるのだと思います。 たとえばgatsbyのドキュメントで 貼っていただいた例のように外部ページから戻ってくるパターンではブラウザ側のスクロール位置保存が効いていそうです。 |
#102 だと、個別ページは「最初から該当キャラのモーダルを開いている状態のボイボ寮ページをレンダリングしている」だけなので、
ほぼこの状態になっていました。ページ遷移は発生せずモーダルの開閉だけなのでスクロール位置は変わりません。 現状はボイボ寮ページと個別ページは完全に別のページになっています。 |
おー、ありがとうございます!!
aタグ(Link)を用いつつ、replaceで遷移すれば良い感じ、という理解で合ってそうでしょうか👀 例えば 822a0e2 が #102 が入ったタイミングのコミットなのですが、その時のコードのこちら voicevox_blog/src/pages/dormitory.tsx Lines 946 to 949 in 822a0e2
を replace=true なLinkで囲み、↓showCharacterModal の実装からvoicevox_blog/src/pages/dormitory.tsx Lines 871 to 876 in 822a0e2
history.replaceState をなくす、みたいな感じです。
(なにか勘違いをしているかもしれません・・・ 🙇♂️ ) |
Linkタグのreplaceは今いるページの履歴を上書きして別のページに遷移する、という動作です。
ref: https://developer.mozilla.org/ja/docs/Web/API/History/replaceState replace=trueを指定してもページ遷移は発生するので、そうした場合はそもそもshowCharacterModalは実行されなくなります。 使わないコードが残った #103 と同じになる感じですね。 |
あ、なるほど!! 詳細にありがとうございます!! |
ありがとうございました!! 🙏 (&やりとりがだいぶ長くなってしまいすみません) |
ブラウザバックするとスクロール位置を無視してハッシュ箇所に戻ってしまう件についてもうちょっと調べてみました。 ここで報告されていて、closeされたあともなんか再発したっぽいんですが放置されてそうに思います。 どうやらhash urlに移動したときにそこに移動しない?みたいなバグがreach-routerにあるらしい? でこれを薄めるために、hash箇所にスクロールするのがgatsbyに入ったっぽい? でもこれはブラウザバック時にバグるのは残るので、そのままっぽい感じでした。 |
Why
各キャラ紹介ページは #102 #103 によって独立したページになっているが、
元がモーダルダイアログだった関係で表示はモーダルっぽさを引き継いでいる。
各キャラ紹介ページからモーダルを閉じる感覚でボイボ寮一覧ページに遷移したときに
ページトップに飛ぶと違和感を覚えてしまうため直したい。
How
4e56c8a
該当キャラの位置へスクロールする処理自体は↑で実現可能。
NOTICE
navigate(-1)
で戻る相当の処理で実現 )要件
The text was updated successfully, but these errors were encountered: