32.选择器

选择器

html部分

复制代码
<div class="toggle-container">
    <input type="checkbox" id="good" class="toggle">
    <label for="good" class="label">
        <div class="ball"></div>
    </label>
    <span>good</span>
</div>
<div class="toggle-container">
    <input type="checkbox" id="cheap" class="toggle">
    <label for="cheap" class="label">
        <div class="ball"></div>
    </label>
    <span>cheap</span>
</div>
<div class="toggle-container">
    <input type="checkbox" id="fast" class="toggle">
    <label for="fast" class="label">
        <div class="ball"></div>
    </label>
    <span>fast</span>
</div>

css部分

复制代码
*{
    margin: 0;
    padding: 0 ;
}
body{
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    height: 100vh;
    overflow: hidden;
}

.toggle-container{
    display: flex;
    align-items: center;
    margin: 10px 0;
    width: 200px;
}
.label{
    position: relative;
    background-color: #d0d0d0;
    border-radius: 50px;
    cursor: pointer;
    display: inline-block;
    margin: 0 15px 0;
    width: 80px;
    height: 40px;
}
.toggle{
    visibility: hidden;
}
.toggle:checked + .label{
    background-color: #8e44ad;
}
.ball{
    background-color: #fff;
    height: 34px;
    width: 34px;
    border-radius: 50%;
    position: absolute;
    top: 3px;
    left: 3px;
    animation: scrollOff .3s linear forwards;
}
.toggle:checked + .label .ball{
    animation: scrollOn .3s linear forwards;
}

@keyframes scrollOff{
    100%{
        transform: translateX(0) scale(1);
    } 
    50%{
        transform: translateX(20px) scale(1.2);
    }
    0%{
        transform: translateX(40px) scale(1);
    }
}
@keyframes scrollOn {
    50%{
        transform: translateX(20px) scale(1.2);
    }
    100%{
        transform: translateX(40px) scale(1);
    }
}

js部分

复制代码
// 获取dom
let toggles=document.querySelectorAll(".toggle")
toggles=Array.from(toggles)


// 按钮绑定事件
toggles.forEach((item)=>{
    item.addEventListener("change",(e)=>{
        const {checked,id}=e.target
        
        if(all()){
            if(id=='good'){
                toggles[1].checked=false
            }
            if(id=='cheap'){
                toggles[2].checked=false
            }
            if(id=='fast'){
                toggles[0].checked=false
            }
        }
    })
})

// 是否全选
function all(){
   return toggles.every((item)=>{
        return item.checked
    })
}

效果

相关推荐
Shaneyxs11 分钟前
从 0 到 1 实现CloudBase云开发 + 低代码全栈开发活动管理小程序(13)
前端
半山烟雨半山青13 分钟前
微信内容emoji表情包编辑器 + vue3 + ts + WrchatEmogi Editor
前端·javascript·vue.js
码途潇潇14 分钟前
Vue 事件机制全面解析:原生事件、自定义事件与 DOM 冒泡完全讲透
前端·javascript
zmirror16 分钟前
Monorepo 在 Docker 中的构建方案方案
前端
用户479492835691527 分钟前
node_modules 太胖?用 Node.js 原生功能给依赖做一次大扫除
前端·后端·node.js
_Kayo_37 分钟前
TypeScript 学习笔记2
前端·javascript·typescript
海纳百川本尊7606439 分钟前
Flutter框架核心原理深度解析
前端
Shaneyxs40 分钟前
从 0 到 1 实现CloudBase云开发 + 低代码全栈开发活动管理小程序(12)
前端
渔_1 小时前
uni-app 图片预览 + 长按保存,超实用!
前端