【前端】使用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>
相关文章
|
8月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
伪类:伪类这个叫法源自于它们跟类相似,但实际上并没有类会附加到标记中的标签上。 伪类分为两种(以及新增的伪类选择器): UI伪类:会在HTML元素处于某种状态时(例如:鼠标指针位于连接上),为该元素应用CSS样式。 :hover 结构化伪类:会在标记中存在某种结构上的关系时 例如: 某元素是一组元素中的第一个或最后一个,为该元素应用CSS样式。 :not和:target(CSS3新增的两个特殊的伪类选择器)
1059 2
|
开发者 容器
44.[HarmonyOS NEXT RelativeContainer案例一] 掌握组件锚点布局:打造灵活精准的UI定位系统
在HarmonyOS NEXT的UI开发中,精确控制组件位置是构建复杂界面的关键。RelativeContainer作为一种强大的布局容器,通过锚点系统提供了精确定位能力,使开发者能够创建出灵活且精准的UI布局。本教程将详细讲解如何使用RelativeContainer的锚点布局功能,帮助你掌握这一核心技术。
364 4
|
设计模式 缓存 容器
06.HarmonyOS Next UI进阶:Text组件与视觉样式完全指南
在HarmonyOS Next应用开发中,Text组件是最基础也是最常用的UI元素之一。它不仅用于显示文本内容,还可以通过丰富的样式属性实现各种视觉效果。掌握Text组件的样式设置,是构建精美UI界面的基础技能。
534 1
|
前端开发 安全 开发工具
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
1079 90
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
9月前
|
Linux Go iOS开发
IDA 9.2 发布:Golang 改进、新 UI 组件、类型解析等
IDA Pro 9.2 (macOS, Linux, Windows) - 强大的反汇编程序、反编译器和多功能调试器
1531 0
|
11月前
|
Web App开发 前端开发 JavaScript
Element UI框架中自定义input组件的placeholder样式。
确保这些样式在你的应用程序CSS文件中定义,且该文件已正确加载到项目中。通过以上方法,可以控制Element UI组件中input的placeholder样式,使其满足特定的设计要求。这些更改都是基于CSS伪元素进行的,因此并不会对DOM结构产生改变,保持了原有结构的简洁和高效。
902 12
|
12月前
|
移动开发 开发者
仓颉开发语言入门教程:常见UI组件介绍和一些问题踩坑
仓颉开发语言即将发布一周年,虽已有知名App应用,但教程稀缺且官网文档不够完善。幽蓝君推出系列教程,从零开始系统讲解移动开发。本期介绍常用UI组件:按钮、文本、图片、输入框与搜索框的使用方法及注意事项,帮助开发者快速上手仓颉语言。
|
11月前
|
人工智能 JSON 前端开发
如何解决后端Agent和前端UI之间的交互问题?——解析AG-UI协议的神奇作用
三桥君指出AG-UI协议通过SSE技术实现智能体与前端UI的标准化交互,解决流式传输、实时进度显示、数据同步等开发痛点。其核心功能包括结构化事件流、多Agent任务交接和用户中断处理,具有"一次开发到处兼容"、"UI灵活可扩展"等优势。智能体专家三桥君认为协议将AI应用从聊天工具升级为实用软件,适用于代码生成、多步骤工作流等场景,显著提升开发效率和用户体验。
2613 0
「Mac畅玩鸿蒙与硬件46」UI互动应用篇23 - 自定义天气预报组件
本篇将带你实现一个自定义天气预报组件。用户可以通过选择不同城市来获取相应的天气信息,页面会显示当前城市的天气图标、温度及天气描述。这一功能适合用于动态展示天气信息的小型应用。
799 38
「Mac畅玩鸿蒙与硬件46」UI互动应用篇23 - 自定义天气预报组件
|
JavaScript 数据安全/隐私保护
Vue Amazing UI 组件库(Vue3+TypeScript+Vite 等最新技术栈开发)
Vue Amazing UI 是一个基于 Vue 3、TypeScript、Vite 等最新技术栈开发构建的现代化组件库,包含丰富的 UI 组件和常用工具函数,并且持续不断维护更新中。另外,组件库全量使用 TypeScript,支持自动按需引入和 Tree Shaking 等,能够显著提升开发效率,降低开发成本。
866 5
Vue Amazing UI 组件库(Vue3+TypeScript+Vite 等最新技术栈开发)