【前端】使用jQuery封装一套UI组件 - 是和否滑动切换组件

简介: 本篇文章来讲解下是和否的滑动切换组件切换滑动组件,使用的场景实际上就是一个开和关的场景,一般有是和否,开和关,禁用和启用等等,只需要设置0和1即可
作者:小5聊基础
简介:一只喜欢全栈方向的程序员,欢迎咨询,尽绵薄之力答疑解惑
编程原则:Write Less Do More

GIF2.gif

【滑动切换组件特点】

1)默认为未启用状态,值为0

2)由底部具有一定高宽度的滑动背景层,默认为灰色状态

3)灰色背景层上有一个滑动小圆圈,默认在左边停靠

4)当切换到开状态时,滑动背景轨道变为蓝色等高亮状态颜色

5)当切换到开状态时,滑动小圆圈从左边滑动到右边

6)当切换到开状态时,值由0变为1,可以设置保存到一个input隐藏域里

【滑动切花组件布局】

1)先设置一个父级div,宽度定为60px,高度和行高定为24px,背景为灰色,并且为鼠标点击状态cursor:pointer,边框设置为圆形边框,border-radius:24px;

image.png

 <div style="cursor:pointer;width: 60px;height: 24px;line-height: 24px;background: #e3e3e3;position:relative;border-radius:24px;">
 </div>

2)再父级div基础上,添加一个小圆圈div,高宽度为18px,和父级div有6px的差值,相对父级定位,top值即可设置为3px,位于垂直居中状态

image.png

<style type="text/css">
    .switch-div {
        cursor: pointer;
        width: 60px;
        height: 24px;
        line-height: 24px;
        background: #e3e3e3;
        position: relative;
        border-radius: 24px;
        overflow: hidden;
    }

        .switch-div .icon-div {
            width: 18px;
            height: 18px;
            border-radius: 18px;
            background: #fff;
            position: absolute;
            top: 3px;
            left: 3px;
        }
</style>
<div style="width:300px;height:500px;background:#fff;padding:10px;margin:0 auto;margin-top:30px;border-radius:10px;box-shadow:0 0 13px #ccc;">

    <div class="switch-div" style="">
        <div class="icon-div"></div>
    </div>
</div>

3)在上面两步操作,已经出来原型了,接下来就是显示开和关文本值,设置一个span标签显示文本

image.png

【滑动切换组件动起来】

  • 方法一 - 使用animate动画方法实现

1)先给切换组件绑定一个点击事件

2)在点击方法里,获取组件宽度,因为有3px距离空隙值,所以滑动宽度需要减去3px,并且还要减去小圆圈的宽度

3)设置小圆圈使用animate动画,left从3px滑动到右边,在滑动的同时也需要高亮背景

4)同时文本值显示在左边

5)设置一个属性data-flag,保存当前开和关状态,1=表示开,0=表示关

GIF.gif

  • 方法二 - 在方法一逻辑基础上,改为transition样式方式

1)设置一个焦点class,所有开状态的样式值设置到class里

2)当开状态时,添加class焦点值

3)当关状态时,去掉class焦点值

image.png

image.png

【主要知识点列表】

编号 语言或插件 知识点 说明
1 jQUery $(dom).animate() 动画方法,元素样式从一个状态到另一个状态的变化
2 css transition 过渡、渐变属性,transition:all .5s all表示所有属性,也可以设置单个或者多个,多个用逗号隔开

【完整代码】

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <title>switch切换组件</title>
    <style>
        body, html {
            margin: 0;
            padding: 0;
            font-size: 100%;
        }
    </style>
</head>
<body>

    <style type="text/css">
        .switch-div {
            cursor: pointer;
            width: 60px;
            height: 24px;
            line-height: 24px;
            background: #e3e3e3;
            position: relative;
            border-radius: 24px;
            overflow: hidden;
            text-align: right;
            color: #333;
            font-size: 13px;
        }

            .switch-div .span {
                margin-right: 8px;
            }

            .switch-div .icon-div {
                width: 18px;
                height: 18px;
                border-radius: 18px;
                background: #fff;
                position: absolute;
                top: 3px;
                left: 3px;
                transition: left .3s;
                -moz-transition: left .3s; /* Firefox 4 */
                -webkit-transition: left .3s; /* Safari 和 Chrome */
                -o-transition: left .3s; /* Opera */
            }

        .switch-div-action {
            background: #099dff;
            color: #fff;
            text-align: left;
        }

            .switch-div-action .icon-div {
                left: 39px;
            }

            .switch-div-action .span {
                margin-left: 8px;
            }
    </style>
    <div style="width:300px;height:500px;background:#fff;padding:10px;margin:0 auto;margin-top:30px;border-radius:10px;box-shadow:0 0 13px #ccc;">
        <div class="switch-div switch-div1" style="">
            <div class="icon-div"></div>
            <span class="span">关</span>
        </div>

        <div style="width:100%;height:50px;"></div>

        <div class="switch-div switch-div2" style="" data-text="禁用|启用">
            <div class="icon-div"></div>
            <span class="span">禁用</span>
        </div>
    </div>

</body>
</html>

<!--交互js-->
<script src="https://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
<script type="text/javascript">
    $(function () {

        $(".switch-div1").click(function () {

            var width = $(this).width();
            var widthIcon = $(".icon-div").width();

            var flag = $(this).attr("data-flag");
            if (flag == undefined || flag == "0") {
                flag = "1";
                $(".switch-div1").css({ "textAlign": "left", "background": "#099dff", "color": "#fff" });
                $(".switch-div1 .span").html('开').css({ "marginLeft": "8px" });
                $(".switch-div1 .icon-div").animate({ left: width - widthIcon - 3 }, 300);
            }
            else {
                flag = "0";
                $(".switch-div1").css({ "textAlign": "right", "background": "#e3e3e3", "color": "#333" });
                $(".switch-div1 .span").html('关').css({ "marginRight": "8px" });
                $(".switch-div1 .icon-div").animate({ left: 3 }, 300);
            }
            $(this).attr("data-flag", flag);

        });

        $(".switch-div2").click(function () {
            
            var flag = $(this).attr("data-flag");
            var text = $(this).attr("data-text");
            if (flag == undefined || flag == "0") {
                flag = "1";
                $(".switch-div2").addClass("switch-div-action");
                $(".switch-div2 .span").html(text.split('|')[1]);
            }
            else {
                flag = "0";
                $(".switch-div2").removeClass("switch-div-action");
                $(".switch-div2 .span").html(text.split('|')[0]);
            }
            $(this).attr("data-flag", flag);

        });
    })
</script>
相关文章
|
3月前
|
前端开发 安全 开发工具
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
241 90
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
3月前
|
JavaScript 数据安全/隐私保护
Vue Amazing UI 组件库(Vue3+TypeScript+Vite 等最新技术栈开发)
Vue Amazing UI 是一个基于 Vue 3、TypeScript、Vite 等最新技术栈开发构建的现代化组件库,包含丰富的 UI 组件和常用工具函数,并且持续不断维护更新中。另外,组件库全量使用 TypeScript,支持自动按需引入和 Tree Shaking 等,能够显著提升开发效率,降低开发成本。
206 5
Vue Amazing UI 组件库(Vue3+TypeScript+Vite 等最新技术栈开发)
|
2月前
|
安全 API 开发者
深入探索ArkUI中的@LocalBuilder装饰器:构建高效可维护的UI组件
在ArkUI框架中,组件化开发至关重要。@LocalBuilder作为自API version 12引入的装饰器,专注于组件内部私有构建,确保封装性与安全性。本文解析其工作原理、参数传递机制及与@Builder的区别,结合典型场景代码示例,助开发者掌握这一工具。通过状态驱动UI更新、复杂组件组合等实践,优化性能并提升代码可维护性,推动高效UI架构构建。
59 0
|
3月前
|
人工智能 自然语言处理 前端开发
Flame:开源AI设计图转代码模型!生成React组件,精准还原UI+动态交互效果
Flame 是一款开源的多模态 AI 模型,能够将 UI 设计图转换为高质量的现代前端代码,支持 React 等主流框架,具备动态交互、组件化开发等功能,显著提升前端开发效率。
495 1
|
5月前
「Mac畅玩鸿蒙与硬件46」UI互动应用篇23 - 自定义天气预报组件
本篇将带你实现一个自定义天气预报组件。用户可以通过选择不同城市来获取相应的天气信息,页面会显示当前城市的天气图标、温度及天气描述。这一功能适合用于动态展示天气信息的小型应用。
241 38
「Mac畅玩鸿蒙与硬件46」UI互动应用篇23 - 自定义天气预报组件
|
5月前
|
人工智能 开发框架 JavaScript
LowCodeEngine:阿里开源的企业级低代码开发平台,提供预制的 UI 组件和模板,覆盖完整的研发周期
LowCodeEngine 是阿里巴巴开源的低代码开发框架,旨在通过拖拽、配置等简单操作,帮助开发者快速构建复杂的系统页面,提升开发效率和质量。
307 4
LowCodeEngine:阿里开源的企业级低代码开发平台,提供预制的 UI 组件和模板,覆盖完整的研发周期
|
5月前
|
XML 搜索推荐 前端开发
安卓开发中的自定义视图:打造个性化UI组件
在安卓应用开发中,自定义视图是一种强大的工具,它允许开发者创造独一无二的用户界面元素,从而提升应用的外观和用户体验。本文将通过一个简单的自定义视图示例,引导你了解如何在安卓项目中实现自定义组件,并探讨其背后的技术原理。我们将从基础的View类讲起,逐步深入到绘图、事件处理以及性能优化等方面。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和技巧。
|
7月前
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
547 14
|
7月前
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
116 0
|
7月前
|
人工智能 自然语言处理 运维
前端大模型应用笔记(一):两个指令反过来说大模型就理解不了啦?或许该让第三者插足啦 -通过引入中间LLM预处理用户输入以提高多任务处理能力
本文探讨了在多任务处理场景下,自然语言指令解析的困境及解决方案。通过增加一个LLM解析层,将复杂的指令拆解为多个明确的步骤,明确操作类型与对象识别,处理任务依赖关系,并将自然语言转化为具体的工具命令,从而提高指令解析的准确性和执行效率。
196 6

热门文章

最新文章