我想自定义使用“Select2”库创建的下拉菜单。
我试图在菜单打开时创建叠加效果,但我失败了。
有没有人可以帮助我?
谢谢
我想在点击后获得一个放置在视口中心的下拉菜单,并在菜单打开时在背景中获得“叠加效果”。 因此,所有屏幕都变得有点暗,用户只能关注下拉菜单。
点击选项后,背景叠加效果和下拉菜单消失。 点击下拉菜单外后叠加效果和下拉菜单消失
下面是我写的代码:
$(document).ready(function(){
$('#my-select').select2({
});
});
.box {
position: fixed;
top: 80%;
left: 50%;
transform: translate(-50%, -50%);
}
.select2-selection {
background-color: aqua !important;
border-radius: 10px !important;
}
.select2-dropdown {
background-color: red !important;
position: fixed !important;
top: 50% !important;
left: 50% !important;
transform: translate(-50%, -50%) !important;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link ref="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/css/select2.min.css" rel="stylesheet" />
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/select2.min.js">
</script>
</head>
<body>
<div class="box">
<select id="my-select" style="width: 200px">
<option value="option1">Option 1</option>
<option value="option2">Option 2</option>
<option value="option3">Option 3</option>
</select>
</div>
<!-- jQuery -->
<script type='text/javascript' rc="https://ajax.googleapis.com/ajax/libs/jquery/3.6.3/jquery.min.js">
</script>
<!-- Select2 CSS -->
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/css/select2.min.css" rel="stylesheet" />
<!-- Select2 JS -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/js/select2.min.js">
</script>
</body>
</html>
解决了这个问题:
`
$(document).ready(function(){
$('#my-select').select2({
});
$('#my-select').on('select2:open', function (e) {
$('#container').addClass("overlay");
$('#box').css('opacity', '0');
});
$('#my-select').on('select2:close', function (e) {
$('#container').removeClass("overlay");
$('#box').css('opacity', '1');
});
});
`
您可以使用
select2:open
和select2:close
来触发选择打开和关闭的事件,然后在您的ovelay
容器上应用类select2
这里是一个例子:
$(document).ready(function(){
$('#my-select').select2({});
$('#my-select').on('select2:open', function (e) {
$('#container').addClass("overlay");
});
$('#my-select').on('select2:close', function (e) {
$('#container').removeClass("overlay");
});
});
.container {
display: flex;
align-items: center;
justify-content: center;
height: 100vh;
width: 100%;
overflow: hidden;
}
.overlay {
background-color: rgba(0, 0, 0, 0.5);
background-size: cover;
background-repeat: no-repeat;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link ref="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/css/select2.min.css" rel="stylesheet" />
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/select2.min.js">
</script>
</head>
<body>
<div class="container" id="container">
<div class="box">
<select id="my-select" style="width: 200px">
<option value="option1">Option 1</option>
<option value="option2">Option 2</option>
<option value="option3">Option 3</option>
</select>
</div>
</div>
<!-- jQuery -->
<script type='text/javascript' rc="https://ajax.googleapis.com/ajax/libs/jquery/3.6.3/jquery.min.js">
</script>
<!-- Select2 CSS -->
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/css/select2.min.css" rel="stylesheet" />
<!-- Select2 JS -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/js/select2.min.js">
</script>
</body>
</html>
基于您的评论的其他解决方案:
此示例添加一个覆盖整个页面的覆盖元素,并将其
z-index
设置为1。它还将z-index
元素的select2-container
设置为2,以确保它始终位于覆盖之上。
当下拉菜单打开时,触发
select2:open
事件,并显示叠加层。当下拉框关闭时,触发select2:close
事件,叠加层隐藏:
$(document).ready(function() {
$('#my-select').select2();
$('#my-select').on('select2:open', function(e) {
$('.overlay').show();
});
$('#my-select').on('select2:close', function(e) {
$('.overlay').hide();
});
});
.overlay {
display: none;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
z-index: 1;
}
.select2-container {
z-index: 2;
}
.box {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Select2 Example</title>
<!-- jQuery -->
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<!-- Select2 CSS -->
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.1.0-rc.0/css/select2.min.css" rel="stylesheet" />
<!-- Select2 JS -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.1.0-rc.0/js/select2.min.js"></script>
</head>
<body>
<div class="overlay"></div>
<div class="box">
<select id="my-select" style="width: 200px;">
<option value="option1">Option 1</option>
<option value="option2">Option 2</option>
<option value="option3">Option 3</option>
</select>
</div>
</body>
</html>