【发布时间】:2019-12-08 16:43:56
【问题描述】:
我的网站迷你购物车有一个 Bootstrap 下拉菜单,如下面的 sn-p。我对其进行了设置,以便当它下降时,它后面会有一个灯箱效果,使其余内容变灰。
$(".dropdown").on('show.bs.dropdown hide.bs.dropdown', function(e) {
var lightbox = document.getElementById("lightbox_container");
if(e.type == 'hide'){
lightbox.style.display = "none";
}else if(e.type == 'show'){
lightbox.style.display = "block";
}
});
#lightbox_container{
position:fixed;
width:100%;
height:100%;
background-color:rgba(0,0,0,0.5);
z-index:40;
display:none;
top:0px;
left:0px;
}
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
<div class="dropdown d-inline minicart">
<span class="dropdown-toggle" data-toggle="dropdown">
<img src="media/icons/cart.png" alt="cart icon" class="icon">
</span>
<ul class="dropdown-menu" id="minicart">
<li class="dropdown-submenu">
// stuff goes here
</li>
</ul>
</div>
<div id="lightbox_container"></div>
这按预期工作并且工作正常,但我想在添加某些内容时弹出迷你车。
我是 Bootstrap 的新手,所以不太确定如何实现这一点。我这样做了:
function show_cart(){
$(".minicart").addClass("show");
$(".minicart .dropdown-toggle").attr("aria-expanded", "true");
$(".minicart .dropdown-menu").addClass("show");
$(".minicart .dropdown-menu").css("position", "absolute");
$(".minicart .dropdown-menu").css("transform", "translate3d(-171px, 21px, 0px)");
$(".minicart .dropdown-menu").css("top", "0px");
$(".minicart .dropdown-menu").css("left", "0px");
$(".minicart .dropdown-menu").css("will-change", "transform");
$("#lightbox_container").css("display", "block");
}
但显然这不是很好,即使它有点工作,但是当它打开时我无法在下拉列表之外单击以关闭它,我实际上必须上去并单击图标。
编辑
我改成:
function show_cart(){
$(".minicart").addClass("show");
$(".minicart .dropdown-toggle").attr("aria-expanded", "true");
$(".minicart .dropdown-menu").addClass("show");;
var doc_width = $(document).outerWidth(true);
if (doc_width <= 768){
$(".minicart .dropdown-menu").css("left", "-250px");
}else{
$(".minicart .dropdown-menu").css("left", "-350px");
}
$("#lightbox_container").css("display", "block");
}
然后为了再次隐藏它,我在实际的灯箱中添加了一个点击事件:
$("#lightbox_container").on("click", function(){
if($("#navbarSupportedContent").hasClass("show")){
$("#navbarSupportedContent").hide();
}
if($(".dropdown.locale").hasClass("show")){
$(".dropdown.locale").hide();
}
if($(".dropdown.minicart").hasClass("show")){
$(".dropdown.minicart").hide();
}
var lightbox = document.getElementById("lightbox_container");
lightbox.style.display = "none";
$(".minicart .dropdown-toggle").attr("aria-expanded", "flase");
$(".minicart .dropdown-menu").removeClass("show");
});
【问题讨论】:
标签: javascript jquery html css bootstrap-4