スムーススクロールのスクリプトがaタグを書き換える件
スムーススクロールのjsについて、少し調べました。
多くのjsは、既存ページに設置しただけで使えるように
既存のaタグのhrefを、windowがonloadする際に
javascript:void(0)に書き換えているようでした。
例:
<a href="#target">ターゲットに移動するよ</a>
こういう記述がonloadで
↓
こうなる
<a href="javascript:void(0)" rel="#target" onclick="hoge()">ターゲットに移動するよ</a>
このonloadする際に「書き換え」という処理が少々気になってまして……
できれば書き換えたくないと思ったわけです(文書構造的に)。
暫定的な対策として、下記のようにしようと考えております。
<span onclick="hoge(this)"><a href="#target">ターゲットに移動するよ</a></span>
要はaタグは書き換えない訳です。
spanを追加する必要がありますが、
spanのchildren[0]のhrefを参照してターゲットを取得します。
後はスクロールを実行するだけです。
疑問:aが「href="#target"」のままだと瞬間移動するんじゃないの?
私も書いた時、そう思ったんですが、
なぜか親のonclick="hoge(this)"が優先されるっぽいですね……。
(2017年9月時点 Chrome、Safari、IEで確認)
とりあえずこれでいこうと思ってます。
問題が出たら追記予定です。