为什么Swiper中的hashNavigation组件会替换URL中的整个路径?

Why does the hashNavigation component in Swiper replace the entire path in the URL?

我想启用对 Swiper 轮播中图像的深层链接。 "hashNavigation" 组件似乎是为此目的而构建的,但我看不出如何让它工作。当我启用它并在我的幻灯片中提供 data-hash 属性时,它会用我提供的哈希值替换整个路径。显然,这使得它对于不在主页上的任何滑动器都无用。我如何才能将它 append 哈希添加到路径而不是替换它?这是我实例化它的代码:

var vis = document.getElementById('vis'),
swiperOpts = {
  loop: true,
  slidesPerView: 1,
  mousewheel: true,
  hashNavigation: {
    watchState: true,
    replaceState: true,
  },
  autoplay: {delay: 4444}
},
swiper = new Swiper(vis, swiperOpts);

还有一个标记示例:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">

<base href="/">

<link rel="preconnect" href="//cdnjs.cloudflare.com">
<link rel="preconnect" href="//unpkg.com">
<link rel="stylesheet" href="//unpkg.com/swiper/css/swiper.min.css">
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/normalize/8.0.0/normalize.min.css">
</head>

<body class="visio">
<main>
<div class="swiper-container" id="vis">
<ul class="swiper-wrapper">
  <li class="swiper-slide" data-hash="235" style="">
      <p>slide one</p></li>
  <li class="swiper-slide" data-hash="228" style="">
      <p>slide two</p></li>
  <li class="swiper-slide" data-hash="224" style="">
      <p>slide tre</p></li>
  <li class="swiper-slide" data-hash="227" style="">
      <p>slide for</p></li>
  <li class="swiper-slide" data-hash="236" style="">
      <p>slide fiv</p></li>
</ul>
        </div>
    </main>
<script src="//unpkg.com/swiper/js/swiper.min.js"></script>
</body></html>

以下是我看到的 URL 的一些示例:

我一直无法让它正常工作,但我使用以下代码解决了这个问题:

let initIDX = 0;
if(window.location.hash){
    let lmnt = document.querySelector('[data-hash="'+window.location.hash.substring(1)+'"]'),
    i = 0;

    while((lmnt = lmnt.previousSibling) != null) if(lmnt.nodeType == 1) ++i;

    initIDX = i;
}

var vis = document.getElementById('vis'),
    swiperOpts = {
        loop: true,
        slidesPerView: 1,
        initialSlide: initIDX,
        on:{
            slideChangeTransitionEnd: function(){
                history.replaceState(null, null,
                    window.location.pathname + '#' + this.slides[this.activeIndex].dataset.hash);
            }
        }
    },
    swiper = new Swiper(vis, swiperOpts);

这对我有用。