Select2点击后有叠加效果的下拉菜单

问题描述 投票:0回答:2

我想自定义使用“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>

javascript css jquery-select2
2个回答
0
投票

解决了这个问题:

`

$(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');
      });
    
});

`


0
投票

您可以使用

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>

© www.soinside.com 2019 - 2024. All rights reserved.