【问题标题】:change slider when different checkbox is checked选中不同的复选框时更改滑块
【发布时间】:2023-12-17 19:46:01
【问题描述】:

我试图在引导轮播中有 4 个不同的滑块,我有一些按钮,当有人点击一个按钮时,滑块应该根据我在 CSS 中的决定而改变,但我尝试过的代码不是工作,我给你链接了一个不工作的代码的最小版本,谢谢。

    <style>
        .c {
            display: none;
        }

        .d {
            display: none;
        }

        #a:checked~.c {
            display: block !important;
        }

        #b:checked~.d {
            display: block !important;
        }
    </style>
</head>

<body>
    <input type="checkbox" id="a" class="check" checked>
    <input type="checkbox" id="b" class="check">
    <label for="a">a</label>
    <label for="b">b</label>

    <div id="carouselExampleIndicators" class="carousel slide" data-bs-ride="carousel">
        <div class="carousel-indicators">
            <button type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide-to="0" class="active"
                aria-current="true" aria-label="Slide 1"></button>
            <button type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide-to="1"
                aria-label="Slide 2"></button>
            <button type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide-to="2"
                aria-label="Slide 3"></button>
        </div>
        <div class="carousel-inner c" id="f1">
            <div class="carousel-item active">
                <img src="..." class="d-block w-100" alt="...">
                a
            </div>
            <div class="carousel-item">
                <img src="..." class="d-block w-100" alt="...">
            </div>
            <div class="carousel-item">
                <img src="..." class="d-block w-100" alt="...">
            </div>
        </div>

        <div class="carousel-inner d" id="f2">
            <div class="carousel-item active">
                <img src="..." class="d-block w-100" alt="...">
            </div>
            <div class="carousel-item">
                <img src="..." class="d-block w-100" alt="...">
            </div>
            <div class="carousel-item">
                <img src="..." class="d-block w-100" alt="...">
            </div>
        </div>



        <button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleIndicators"
            data-bs-slide="prev">
            <span class="carousel-control-prev-icon" aria-hidden="true"></span>
            <span class="visually-hidden">Previous</span>
        </button>
        <button class="carousel-control-next" type="button" data-bs-target="#carouselExampleIndicators"
            data-bs-slide="next">
            <span class="carousel-control-next-icon" aria-hidden="true"></span>
            <span class="visually-hidden">Next</span>
        </button>
    </div>

    <!-- Optional JavaScript; choose one of the two! -->

    <!-- Option 1: Bootstrap Bundle with Popper -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/js/bootstrap.bundle.min.js"
        integrity="sha384-/bQdsTh/da6pkI1MST/rWKFNjaCP5gBSY4sEBT38Q/9RBh9AH40zEOg7Hlq2THRZ"
        crossorigin="anonymous"></script>

    <!-- Option 2: Separate Popper and Bootstrap JS -->
    <!--
    <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.3/dist/umd/popper.min.js" integrity="sha384-W8fXfP3gkOKtndU4JGtKDvXbO53Wy8SZCQHczT5FMiiqmQfUpWbYdTil/SxwZgAN" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/js/bootstrap.min.js" integrity="sha384-skAcpIdS7UcVUC05LJ9Dxay8AXcDYfBJqt1CJ85S/CFujBsIzCIv+l9liuYLaMQ/" crossorigin="anonymous"></script>
    -->
    <script>

        $(".check").click(function () {
            $(".check").prop("checked", false);
            $(this).prop("checked", true);

        });
    </script>
</body>

</html>

我首先从 BOOTSTRAP 获取轮播,然后创建另一个内部轮播,然后创建具有不同 id 但相同类的复选框。因为不要同时检查两者我正在使用 JQUERY 底部的类并检查它们是否没有同时检查。最后使用 CSS 我根据选中的复选框显示每个内部轮播,但不知何故它不起作用

【问题讨论】:

标签: html css carousel


【解决方案1】:

这对我有用,它是正确的方法吗?

<!doctype html>
<html lang="en">

<head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="style.css">

    <!-- Bootstrap CSS -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-F3w7mX95PdgyTmZZMECAngseQB83DfGTowi0iMjiWaeVhAn4FJkqJByhZMI3AhiU" crossorigin="anonymous">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>

    <title>Hello, world!</title>
    <style>
        #f1 {
            display: block;
        }

        #f2 {
            display: none;
        }

        #f3 {
            display: none;
        }

        /* 
        #a:checked~.c {
            display: block !important;
        }

        #b:checked~.d {
            display: block !important;
        } */
    </style>
</head>

<body>
    <input type="radio" id="a" name="e" value="a" checked>
    <input type="radio" id="b" name="e" value="b">
    <input type="radio" id="c" name="e" value="c">
    <label for="a">a</label>
    <label for="b">b</label>
    <label for="c">c</label>

    <div id="carouselExampleIndicators" class="carousel slide" data-bs-ride="carousel">
        <div class="carousel-indicators">
            <button type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide-to="0" class="active"
                aria-current="true" aria-label="Slide 1"></button>
            <button type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide-to="1"
                aria-label="Slide 2"></button>
            <button type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide-to="2"
                aria-label="Slide 3"></button>
        </div>
        <div class="carousel-inner c" id="f1">
            <div class="carousel-item active">

                a
            </div>

        </div>

        <div class="carousel-inner d" id="f2">
            <div class="carousel-item active">
                b
            </div>


        </div>
        <div class="carousel-inner d" id="f3">
            <div class="carousel-item active">
                c
            </div>

        </div>



        <button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleIndicators"
            data-bs-slide="prev">
            <span class="carousel-control-prev-icon" aria-hidden="true"></span>
            <span class="visually-hidden">Previous</span>
        </button>
        <button class="carousel-control-next" type="button" data-bs-target="#carouselExampleIndicators"
            data-bs-slide="next">
            <span class="carousel-control-next-icon" aria-hidden="true"></span>
            <span class="visually-hidden">Next</span>
        </button>
    </div>

    <!-- Optional JavaScript; choose one of the two! -->

    <!-- Option 1: Bootstrap Bundle with Popper -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/js/bootstrap.bundle.min.js"
        integrity="sha384-/bQdsTh/da6pkI1MST/rWKFNjaCP5gBSY4sEBT38Q/9RBh9AH40zEOg7Hlq2THRZ"
        crossorigin="anonymous"></script>

    <!-- Option 2: Separate Popper and Bootstrap JS -->
    <!--
    <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.3/dist/umd/popper.min.js" integrity="sha384-W8fXfP3gkOKtndU4JGtKDvXbO53Wy8SZCQHczT5FMiiqmQfUpWbYdTil/SxwZgAN" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/js/bootstrap.min.js" integrity="sha384-skAcpIdS7UcVUC05LJ9Dxay8AXcDYfBJqt1CJ85S/CFujBsIzCIv+l9liuYLaMQ/" crossorigin="anonymous"></script>
    -->
    <!-- // $(".check").click(function () {
    //     $(".check").prop("checked", false);
    //     $(this).prop("checked", true);

    // }); -->
    <!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> -->
    <script type="text/javascript">


        $('input[type=radio][name=e]').change(function () {

            if (this.value == 'a') {
                $("#f2").css("display", "none");
                $("#f3").css("display", "none");
                $("#f1").css("display", "block");
            }
            else if (this.value == 'b') {
                $("#f1").css("display", "none");
                $("#f3").css("display", "none");
                $("#f2").css("display", "block");
                // alert("Transfer Thai Gayo");
            }
            else if (this.value == 'c') {
                $("#f1").css("display", "none");
                $("#f3").css("display", "block");
                $("#f2").css("display", "none");
                // alert("Transfer Thai Gayo");
            }
        });
    </script>
</body>

</html>```

【讨论】:

  • 查看新答案,因为您已经在使用引导程序的轮播,请依赖更改代码。
【解决方案2】:

使用$("#carouselExampleSlidesOnly").carousel(slidenumber); 更改幻灯片。将选定的幻灯片存储为value 或数据属性。见下文。

$("input[type='radio'][name=exampleRadios]").on("change", function() {
  $("#carouselExampleSlidesOnly").carousel(parseInt($(this).val()));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.bundle.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css" rel="stylesheet" />
<div class="form-check">
  <input class="form-check-input" type="radio" name="exampleRadios" id="exampleRadios1" value="0" checked data-select="0">
  <label class="form-check-label" for="exampleRadios1">
    Slide 1
  </label>
</div>
<div class="form-check">
  <input class="form-check-input" type="radio" name="exampleRadios" id="exampleRadios2" value="1" data-select="2">
  <label class="form-check-label" for="exampleRadios2">
    Slide 2
  </label>
</div>
<div class="form-check">
  <input class="form-check-input" type="radio" name="exampleRadios" id="exampleRadios3" value="2">
  <label class="form-check-label" for="exampleRadios3">
    Slide 3
  </label>
</div>
<div id="carouselExampleSlidesOnly" class="carousel slide" data-ride="carousel" data-interval="false">
  <div class="carousel-inner">
    <div class="carousel-item active">
      <img src="https://via.placeholder.com/1600x200" class="d-block w-100" alt="...">
    </div>
    <div class="carousel-item">
      <img src="https://via.placeholder.com/1600x201" class="d-block w-100" alt="...">
    </div>
    <div class="carousel-item">
      <img src="https://via.placeholder.com/1600x202" class="d-block w-100" alt="...">
    </div>
  </div>
</div>

【讨论】: