我正在尝试打开带有覆盖的侧面板并关闭

I'm trying to open side panels with overlay and close

我正在尝试编写我自己的 Shopify 主题,我想在有人单击面板时创建不同的侧面板(全部从右侧进入)link。我设法让它与一个面板和我在 Whosebug 上找到的脚本一起工作(抱歉,我是一个完全的新手),但现在我无法打开不同的面板。每个 link 都会打开它们(很明显)但无法通过 ID(我猜如何解决)而不是 类.

触发

我也想要叠加层来关闭面板。我只通过在每个面板中添加切换按钮来管理它。

我的侧面板脚本

<script>
$(document).ready(function() {  
  function toggleSidebar() {
    $(".sidepanel-toggle").toggleClass("active");
    $(".overlay").toggleClass("active");
    $(".sidepanel").toggleClass("active");
    $("body").toggleClass("activeoverlay");
  }

  $(".sidepanel-toggle").on("click tap", function() {
    toggleSidebar();
  });

  $(document).keyup(function(e) {
    if (e.keyCode === 27) {
      toggleSidebar();
    }
  });

});
</script>

以及 HTML 用于处理面板

  <a href="#" class="sidepanel-toggle">meta data</a>
  
  <aside id="extra_prod_meta" class="sidepanel">
    meta data
  </aside>

  <a href="#" class="sidepanel-toggle">Brand</a>

  <aside id="extra_prod_brand" class="sidepanel">
    meta data
  </aside>

$body = $('body');

$('a.sidepanel-toggle').on('click', function(e) {
    
  e.preventDefault();
  
  let _this = $(this),
      tg = _this.data('panel');
  
  addActivePanel(tg,_this);

});

$('.close, .overlay').on('click', function(){
    removeActivePanel();
});

function removeActivePanel(){
    
  $body.removeClass('activeoverlay');
  $('a.sidepanel-toggle, aside').removeClass('active');
  
}

function addActivePanel(panel,btn) {
    
  $body.addClass('activeoverlay');
  
  $('#'+panel).addClass('active');
  btn.addClass('active');
      
}
aside {
  box-sizing: border-box;
  width: 200px;
  height: 100%;
  position: fixed;
  top: 0;
  right: -200px;
  padding: 1rem;
  background: #000;
  color: #fff;
  z-index: 2;
  transition: right .3s ease;
}

aside.active {
  right: 0;
}

.overlay {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background: rgba(0,0,0,.2);
  z-index: -1;
  display: none;
}

.activeoverlay .overlay {
  display: block;
  z-index: 1;
}

.close {
  text-align: right;
  cursor: pointer;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a href="#" class="sidepanel-toggle" data-panel="extra_prod_meta">meta data</a>
  <div class="overlay"></div>
  <aside id="extra_prod_meta" class="sidepanel">
    <div class="close">X</div>
    meta data extra_prod_meta
  </aside>

  <a href="#" class="sidepanel-toggle" data-panel="extra_prod_brand">Brand</a>

  <aside id="extra_prod_brand" class="sidepanel">
    <div class="close">X</div>
    meta data extra_prod_brand
  </aside>

您可以使用 data-attributes 并定位正确的面板。

$('a.sidepanel-toggle').on('click', function(e) {

  e.preventDefault();
  
  let _this = $(this),
      tg = _this.data('panel');
  
  $('#'+tg).addClass('active');

})
.active {
  background: red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a href="#" class="sidepanel-toggle" data-panel="extra_prod_meta">meta data</a>
  
  <aside id="extra_prod_meta" class="sidepanel">
    meta data
  </aside>

  <a href="#" class="sidepanel-toggle" data-panel="extra_prod_brand">Brand</a>

  <aside id="extra_prod_brand" class="sidepanel">
    meta data
  </aside>