アースリバー開発記

アースリバーというサイトを開発するにあたってのメモです。

スムーススクロールのスクリプトが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月時点 ChromeSafariIEで確認)

 

 

 

とりあえずこれでいこうと思ってます。

問題が出たら追記予定です。