我正在尝试打开带有覆盖的侧面板并关闭
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>
我正在尝试编写我自己的 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>