scrollIntoViewでスムーススクロール(ハッシュタグ付き)

スクロールしたらハッシュタグをつけます。location.hrefとかでできるかな?と思ったのですが、アニメーション中にid名へ急にジャンプしてしまったため、history.pushState()を使用しています。
scrollIntoViewに対応していないブラウザのためにポリフィルを読ませます。

コード

import smoothscroll from 'smoothscroll-polyfill';

export const Scroll = () => {
  //polyfill読み込み
  smoothscroll.polyfill();
  
  let anchor = document.getElementsByClassName('anchor');

  if (0 < anchor.length) {
    //option
    let scrollOption = {
      behavior: 'smooth', //推移のアニメーション
      block: "start", //縦方向のスクロール位置
      inline: "nearest" //横方向のスクロール位置
    }

    let anchorLink = (e) => {
      e.preventDefault();

      let _this = e.currentTarget;
      let _thisTarget;
      let _thisHref;
      if (_this.getAttribute('href') === "#") {
        //TOPへ戻る
        _thisTarget = document.body;
      } else {
        //アンカーリンク
        _thisHref =  _this.getAttribute('href').replace(/[\/\\^$.*+?()[\]{}|]/g, '\\$&');
        _thisTarget = document.querySelector(_thisHref);
      }

      _thisTarget.scrollIntoView(scrollOption);

      //ハッシュタグつける
      if(_thisHref){
          history.pushState({},'', _thisHref) 
      }
    };

    for (let i = 0; i < anchor.length; i++) {
      anchor[i].addEventListener('click',(e) => {
        anchorLink(e);
      })
    }
  }
}
export default Scroll;
<div>
	<a class="anchor" href="#link1">リンク1</a>
</div>

<div id="link1"></div>

<div>
	<a class="anchor" href="#">TOPへ</a>
</div>

scrollIntoViewの詳細については以前のエントリに記載してあります。

参考サイト

[HTML5] アドレスバーのURLを変更する – history.pushState()
https://blog.katsubemakito.net/html5/history-pushstate

polyfill

smoothscroll-polyfill – npm
https://www.npmjs.com/package/smoothscroll-polyfill