まいのこマート:スライダーのサムネクリック制御
Closedfirst published: 2019/01/20last updated: 2019/01/20

実装したスライダーに困る挙動があった。サムネイル画像をクリックするとポジションがトップに移動したり、ブラウザバックで瞬時に前ページに戻れない(移動の履歴が残るため)など。
あー、これはサムネイルのボタンが a タグだからだなというはすぐにわかった。ちなみに左右の移動ボタンは button になっている。
しかし、調べた限りでは a タグの中身を差し替えるファンクションはあるが、a タグ自体を button に差し替えるすべがない。
CSSの pointer-event: none だと、サムネイル画像を押した時のメイン画像切り替えも不能になってしまうためボツ。やはり、タグを差し替えるなりJavaScriptでなんとかすることになる。最小限の修正で済ませたい。
どうやら、サムネイル画像をクリックした時のイベントを設定できるらしい。メイン画像のクリックイベントについてはドキュメントに書いてあったが、サムネイルは書き忘れている様子。これでなんとかする。
aタグを無効化する方法の一つである stopPropagation を ImageGallery コンポーネントに持たせる。
onThumbnailClick={event => {
event.stopPropagation()
}}
これで、a タグにラップされているサムネイル画像をクリックしてもトップへ移動しなくなった。移動の履歴も残っていないため、ブラウザバックで意図通りに前ページへ移動できている。