HTML/CSS switch开关 (包括JS控制checked选择)

主要利用了label标签和input type=’checkbox’标签

switch1

预览:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
.switch {
  position: relative;
  display: inline-block;
  width: 60px;
  height: 34px;
}

.switch input {
    display:none;
}

.slider {
  position: absolute;
  cursor: pointer;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background-color: #ccc;
  -webkit-transition: .4s;
  transition: .4s;
}

.slider:before {
  position: absolute;
  content: "";
  height: 26px;
  width: 26px;
  left: 4px;
  bottom: 4px;
  background-color: white;
  -webkit-transition: .4s;
  transition: .4s;
}

input:checked + .slider {
  background-color: #2196F3;
}

input:focus + .slider {
  box-shadow: 0 0 1px #2196F3;
}

input:checked + .slider:before {
  -webkit-transform: translateX(26px);
  -ms-transform: translateX(26px);
  transform: translateX(26px);
}

/* Rounded sliders */
.slider.round {
  border-radius: 34px;
}

.slider.round:before {
  border-radius: 50%;
}
    </style>
</head>
<body>
    <h2>开关切换</h2>

<label class="switch">
  <input type="checkbox">
  <div class="slider"></div>
</label>

<label class="switch">
  <input type="checkbox" checked>
  <div class="slider"></div>
</label><br><br>

<label class="switch">
  <input type="checkbox">
  <div class="slider round"></div>
</label>

<label class="switch">
  <input type="checkbox" checked>
  <div class="slider round"></div>
</label>
</body>

</html>

switch2

预览:

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        h3 {
            margin: 10px 0 10px 0;
            font-size: 20px;
        }

        body {
            padding: 10px;
            font-size: 12px;
        }

        .example-con {
            margin-top: 30px;
        }

        .mui-switch-con {
            margin-top: 10px;
            font-size: 16px;
        }

        .mui-switch-con label {
            display: block
        }

        .mui-switch {
            width: 52px;
            height: 31px;
            position: relative;
            border: 1px solid #dfdfdf;
            background-color: #fdfdfd;
            box-shadow: #dfdfdf 0 0 0 0 inset;
            border-radius: 20px;
            border-top-left-radius: 20px;
            border-top-right-radius: 20px;
            border-bottom-left-radius: 20px;
            border-bottom-right-radius: 20px;
            background-clip: content-box;
            display: inline-block;
            -webkit-appearance: none;
            user-select: none;
            outline: none;
        }

        .mui-switch:before {
            content: '';
            width: 29px;
            height: 29px;
            position: absolute;
            top: 0px;
            left: 0;
            border-radius: 20px;
            border-top-left-radius: 20px;
            border-top-right-radius: 20px;
            border-bottom-left-radius: 20px;
            border-bottom-right-radius: 20px;
            background-color: #fff;
            box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4);
        }

        .mui-switch:checked {
            border-color: #64bd63;
            box-shadow: #64bd63 0 0 0 16px inset;
            background-color: #64bd63;
        }

        .mui-switch:checked:before {
            left: 21px;
        }

        .mui-switch.mui-switch-animbg {
            transition: background-color ease 0.4s;
        }

        .mui-switch.mui-switch-animbg:before {
            transition: left 0.3s;
        }

        .mui-switch.mui-switch-animbg:checked {
            box-shadow: #dfdfdf 0 0 0 0 inset;
            background-color: #64bd63;
            transition: border-color 0.4s, background-color ease 0.4s;
        }

        .mui-switch.mui-switch-animbg:checked:before {
            transition: left 0.3s;
        }

        .mui-switch.mui-switch-anim {
            transition: border cubic-bezier(0, 0, 0, 1) 0.4s, box-shadow cubic-bezier(0, 0, 0, 1) 0.4s;
        }

        .mui-switch.mui-switch-anim:before {
            transition: left 0.3s;
        }

        .mui-switch.mui-switch-anim:checked {
            box-shadow: #64bd63 0 0 0 16px inset;
            background-color: #64bd63;
            transition: border ease 0.4s, box-shadow ease 0.4s, background-color ease 1.2s;
        }

        .mui-switch.mui-switch-anim:checked:before {
            transition: left 0.3s;
        }
    </style>
</head>

<body>
    <div class="example-con">
        <h3>默认</h3>
    
        <div class="mui-tab-con clearfix">
            <form class="mui-form" name="" method="post" action="#" id="">
                <fieldset>
                    <legend>表单标题</legend>
                    <div class="mui-switch-con">
                        <label><input class="mui-switch" type="checkbox"> 默认未选中</label>
                    </div>
                    <div class="mui-switch-con">
                        <label><input class="mui-switch" type="checkbox" checked> 默认选中</label>
                    </div>
    
                </fieldset>
            </form>
        </div>
    <pre class="prettyprint lang-html linenums:1">
    <label><input class="mui-switch" type="checkbox"> 默认未选中</label>
    <label><input class="mui-switch" type="checkbox" checked> 默认选中</label>
    </pre>
    </div>
    <div class="example-con">
        <h3>简单的背景过渡效果 switch</h3>
           <p>加 mui-switch-animbg 类即可</p>
        <div class="mui-tab-con clearfix">
            <form class="mui-form" name="" method="post" action="#" id="">
                <fieldset>
                    <legend>表单标题</legend>
                    <div class="mui-switch-con">
                        <label><input class="mui-switch mui-switch-animbg" type="checkbox"> 默认未选中</label>
                    </div>
                    <div class="mui-switch-con">
                        <label><input class="mui-switch mui-switch-animbg" type="checkbox" checked> 默认选中</label>
                    </div>
    
                </fieldset>
            </form>
        </div>
    <pre class="prettyprint lang-html linenums:1">
    <label><input class="mui-switch mui-switch-animbg" type="checkbox"> 默认未选中</label>
    <label><input class="mui-switch mui-switch-animbg" type="checkbox" checked> 默认选中</label>
    </pre>
    </div>
    <div class="example-con">
        <h3>过渡效果的switch</h3>
           <p>加 mui-switch-anim 类即可</p>
        <div class="mui-tab-con clearfix">
            <form class="mui-form" name="" method="post" action="#" id="">
                <fieldset>
                    <legend>表单标题</legend>
                    <div class="mui-switch-con">
                        <label><input class="mui-switch mui-switch-anim" type="checkbox"> 默认未选中</label>
                    </div>
                    <div class="mui-switch-con">
                        <label><input class="mui-switch mui-switch-anim" type="checkbox" checked> 默认选中</label>
                    </div>
    
                </fieldset>
            </form>
        </div>
    <pre class="prettyprint lang-html linenums:1">
    <label><input class="mui-switch mui-switch-anim" type="checkbox"> 默认未选中</label>
    <label><input class="mui-switch mui-switch-anim" type="checkbox" checked> 默认选中</label>
    </pre>
    </div>
</body>

</html>

使用:

<input class="switch switch-animbg"   value="2"  style="outline: medium;margin-bottom: -10px;"  name="switch-alarm"   onclick="switchAlarm()" type="checkbox" >

JS控制代码:  // 这里只能用prop去控制和判断 不能用attr

function switchAlarm() {

        console.log($('.switch').attr('value'))  // 2 1 2 1 .....
        if($('.switch').attr('value') === '2'){
            $('.switch').prop('checked',false)
            //操作 .......

            //成功以后
            $('.switch').prop('checked',true)
            $('.switch').attr('value',1)
        }else {
            $('.switch').prop('checked',true)
            //操作 .......

            //成功以后
            $('.switch').prop('checked',false)
            $('.switch').attr('value',2)
        }
    }

原文:https://www.cnblogs.com/it-Ren/p/13062999.html

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注