是否有替代方法来替换这些锚链接?

时间:2018-01-10 21:39:14

标签: javascript jquery css anchor lightbox

我开发了一个灯箱功能,大部分都是用CSS制作的。虽然它一目了然,但我一直面临一些复杂的问题,它通过锚链接打开和关闭,主要问题是它增加了浏览器历史记录的条目

以下是我所指的一个例子:

  1. 我在页面上加载了应用了灯箱功能的图片。
  2. 我点击图片,灯箱窗口打开。
  3. 然后我关闭灯箱窗口,然后返回页面;但是,通过锚链接行为(通过http://SITEURL.com/PAGEURL#theanchor附加页面的URL)来打开和关闭灯箱,现在添加了2个额外的历史条目
  4. 从之前的响应者判断,链接到锚点似乎是产生此类功能的最少建议。如果是这种情况,我怎么能实现这一点,(并且我可能完全避免使用锚点)?

    这是一个完整的代码段,用于显示正在运行的灯箱功能以及锚链接行为:

    $('.pic > img').click(function() {
      var srcToCopy = $(this).attr('src');
      $('body').find('.imgsrc').attr('src', srcToCopy);
      $('body').addClass('no-scroll');
    });
    
    $('#customlightbox-controls').on('click', function() {
      $('body').removeClass('no-scroll');
    });
    body {
      margin: 0;
      padding: 0;
      border: 0;
      height: 100%;
      width: 100%;
    }
    
    body.no-scroll {
      overflow: hidden;
    }
    
    .pic,
    #imgsrc {
      display: inline-block;
    }
    
    img {
      width: 100px
    }
    
    a {
      display: inline-block;
      line-height: 0;
    }
    
    .container {
      display: block;
      width: 100%;
      line-height: 0;
    }
    
    .customlightbox {
      top: 0%;
      bottom: 0%;
      box-sizing: border-box;
      position: fixed;
      left: 0;
      right: 0;
      background: rgba(0, 0, 0, 0.7);
      z-index: -5;
      opacity: 0;
    }
    
    .customlightbox-imgwrap {
      width: 100%;
      height: 100%;
      padding: 20px;
      box-sizing: border-box;
      position: relative;
      text-align: center;
    }
    
    .customlightbox img {
      width: auto;
      margin: auto;
      max-width: 100%;
      max-height: 100%;
      opacity: 0;
      position: relative;
      top: 50%;
      transform: translateY(-50%);
    }
    
    #customlightbox-controls {
      box-sizing: border-box;
      position: fixed;
      height: 50px;
      width: 50px;
      top: -50px;
      right: -3px;
      z-index: 5;
      border-left: 2px solid white;
      border-bottom: 2px solid white;
      opacity: .7;
    }
    
    #close-customlightbox {
      display: block;
      position: absolute;
      overflow: hidden;
      height: 30px;
      width: 30px;
      right: 10px;
      top: 10px;
      -webkit-transform: rotate(45deg);
      -moz-transform: rotate(45deg);
      -ms-transform: rotate(45deg);
      -o-transform: rotate(45deg);
      transform: rotate(45deg);
    }
    
    #close-customlightbox:before {
      content: "";
      display: block;
      position: absolute;
      height: 0px;
      width: 2px;
      left: 14px;
      top: 0;
      background: white;
      border-radius: 2px;
    }
    
    #close-customlightbox:after {
      content: "";
      display: block;
      position: absolute;
      width: 0px;
      height: 2px;
      top: 14px;
      left: 0;
      background: white;
      border-radius: 2px;
    }
    
    .customlightbox:target {
      z-index: 4;
      opacity: 1;
      display: inline-block;
    }
    
    .customlightbox:target img {
      opacity: 1;
    }
    
    .customlightbox:target~#customlightbox-controls {
      top: -3px;
    }
    
    .customlightbox:target~#customlightbox-controls #close-customlightbox:after {
      width: 30px;
    }
    
    .customlightbox:target~#customlightbox-controls #close-customlightbox:before {
      height: 30px;
    }
    
    .lb-animate {
      -webkit-transition: 0.5s ease-in-out;
      -moz-transition: 0.5s ease-in-out;
      -ms-transition: 0.5s ease-in-out;
      -o-transition: 0.5s ease-in-out;
      transition: 0.5s ease-in-out;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    
    <!-- Lightbox Instance 1 -->
    <div class="container">
      <a href="#view">
        <div class="pic">
          <img src="https://syedimranrocks.files.wordpress.com/2012/09/flower01low1.png">
        </div>
      </a>
    </div>
    
    <!-- Lightbox Instance 2 -->
    <div class="container">
      <a href="#view">
        <div class="pic">
          <img src="http://downloadicons.net/sites/default/files/Rose-Coral-Icon-906534.png">
        </div>
      </a>
    </div>
    
    <!-- Lightbox Instance 3 -->
    <div class="container">
      <a href="#view">
        <div class="pic">
          <img src="https://images.vexels.com/media/users/3/136645/isolated/lists/54b1517db1906889a6971939de45d2a8-purple-sunflower-cartoon.png">
        </div>
      </a>
    </div>
    
    <!-- Lightbox Prompt -->
    <div class="customlightbox lb-animate" id="view">
      <div class="customlightbox-imgwrap">
        <img class="imgsrc" id="customlightbox-img" src="">
      </div>
    </div>
    <div id="customlightbox-controls" class="lb-animate">
      <a id="close-customlightbox" class="lb-animate" href="#!"></a>
    </div>

    希望有一些可靠的解决方案。

2 个答案:

答案 0 :(得分:0)

我不小心发布了这个答案,但你可以删除锚标签,只需添加光标:指针; css到你的.pic课程。

exports.redirectFunc = function redirectFunc (req, res) {
  res.set('Location', 'https://example.com/destination');
  res.status(302);
  res.end();
};
$('.pic > img').click(function() {
  var srcToCopy = $(this).attr('src');
  $('body').find('.imgsrc').attr('src', srcToCopy);
  $('body').addClass('no-scroll');
});

$('#customlightbox-controls').on('click', function() {
  $('body').removeClass('no-scroll');
});
body {
  margin: 0;
  padding: 0;
  border: 0;
  height: 100%;
  width: 100%;
}

body.no-scroll {
  overflow: hidden;
}

.pic,
#imgsrc {
  display: inline-block;
  cursor: pointer;
}

img {
  width: 100px
}

a {
  display: inline-block;
  line-height: 0;
}

.container {
  display: block;
  width: 100%;
  line-height: 0;
}

.customlightbox {
  top: 0%;
  bottom: 0%;
  box-sizing: border-box;
  position: fixed;
  left: 0;
  right: 0;
  background: rgba(0, 0, 0, 0.7);
  z-index: -5;
  opacity: 0;
}

.customlightbox-imgwrap {
  width: 100%;
  height: 100%;
  padding: 20px;
  box-sizing: border-box;
  position: relative;
  text-align: center;
}

.customlightbox img {
  width: auto;
  margin: auto;
  max-width: 100%;
  max-height: 100%;
  opacity: 0;
  position: relative;
  top: 50%;
  transform: translateY(-50%);
}

#customlightbox-controls {
  box-sizing: border-box;
  position: fixed;
  height: 50px;
  width: 50px;
  top: -50px;
  right: -3px;
  z-index: 5;
  border-left: 2px solid white;
  border-bottom: 2px solid white;
  opacity: .7;
}

#close-customlightbox {
  display: block;
  position: absolute;
  overflow: hidden;
  height: 30px;
  width: 30px;
  right: 10px;
  top: 10px;
  -webkit-transform: rotate(45deg);
  -moz-transform: rotate(45deg);
  -ms-transform: rotate(45deg);
  -o-transform: rotate(45deg);
  transform: rotate(45deg);
}

#close-customlightbox:before {
  content: "";
  display: block;
  position: absolute;
  height: 0px;
  width: 2px;
  left: 14px;
  top: 0;
  background: white;
  border-radius: 2px;
}

#close-customlightbox:after {
  content: "";
  display: block;
  position: absolute;
  width: 0px;
  height: 2px;
  top: 14px;
  left: 0;
  background: white;
  border-radius: 2px;
}

.customlightbox:target {
  z-index: 4;
  opacity: 1;
  display: inline-block;
}

.customlightbox:target img {
  opacity: 1;
}

.customlightbox:target~#customlightbox-controls {
  top: -3px;
}

.customlightbox:target~#customlightbox-controls #close-customlightbox:after {
  width: 30px;
}

.customlightbox:target~#customlightbox-controls #close-customlightbox:before {
  height: 30px;
}

.lb-animate {
  -webkit-transition: 0.5s ease-in-out;
  -moz-transition: 0.5s ease-in-out;
  -ms-transition: 0.5s ease-in-out;
  -o-transition: 0.5s ease-in-out;
  transition: 0.5s ease-in-out;
}

答案 1 :(得分:0)

您可以阻止默认操作,而不是将哈希添加到网址(或历史记录)

$('a[href^="#"]').click(function(evt){
   evt.preventDefault()
});

我使用Lightbox已经很长时间了,不确定这是否会与它的功能发生冲突