【前端】使用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>
相关文章
|
4月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
伪类:伪类这个叫法源自于它们跟类相似,但实际上并没有类会附加到标记中的标签上。 伪类分为两种(以及新增的伪类选择器): UI伪类:会在HTML元素处于某种状态时(例如:鼠标指针位于连接上),为该元素应用CSS样式。 :hover 结构化伪类:会在标记中存在某种结构上的关系时 例如: 某元素是一组元素中的第一个或最后一个,为该元素应用CSS样式。 :not和:target(CSS3新增的两个特殊的伪类选择器)
332 1
|
11月前
|
前端开发 API 开发者
harmonyOS基础- 快速弄懂HarmonyOS ArkTs基础组件、布局容器(前端视角篇)
本文由黑臂麒麟(6年前端经验)撰写,介绍ArkTS开发中的常用基础组件与布局组件。基础组件包括Text、Image、Button等,支持样式设置如字体颜色、大小和加粗等,并可通过Resource资源引用统一管理样式。布局组件涵盖Column、Row、List、Grid和Tabs等,支持灵活的主轴与交叉轴对齐方式、分割线设置及滚动事件监听。同时,Tabs组件可实现自定义样式与页签切换功能。内容结合代码示例,适合初学者快速上手ArkTS开发。参考华为开发者联盟官网基础课程。
1005 75
harmonyOS基础- 快速弄懂HarmonyOS ArkTs基础组件、布局容器(前端视角篇)
|
前端开发 安全 开发工具
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
795 90
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
7月前
|
人工智能 JSON 前端开发
如何解决后端Agent和前端UI之间的交互问题?——解析AG-UI协议的神奇作用
三桥君指出AG-UI协议通过SSE技术实现智能体与前端UI的标准化交互,解决流式传输、实时进度显示、数据同步等开发痛点。其核心功能包括结构化事件流、多Agent任务交接和用户中断处理,具有"一次开发到处兼容"、"UI灵活可扩展"等优势。智能体专家三桥君认为协议将AI应用从聊天工具升级为实用软件,适用于代码生成、多步骤工作流等场景,显著提升开发效率和用户体验。
1758 0
|
Dart 前端开发
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
479 75
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
Dart 前端开发 容器
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
460 18
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
监控 前端开发 数据可视化
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生
@icraft/player-react 是 iCraft Editor 推出的 React 组件库,旨在简化3D数字孪生场景的前端集成。它支持零配置快速接入、自定义插件、丰富的事件和方法、动画控制及实时数据接入,帮助开发者轻松实现3D场景与React项目的无缝融合。
935 9
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生
|
UED
「Mac畅玩鸿蒙与硬件28」UI互动应用篇5 - 滑动选择器实现
本篇将带你实现一个滑动选择器应用,用户可以通过滑动条选择不同的数值,并实时查看选定的值和提示。这是一个学习如何使用 Slider 组件、状态管理和动态文本更新的良好实践。
225 1
「Mac畅玩鸿蒙与硬件28」UI互动应用篇5 - 滑动选择器实现
|
JSON 缓存 前端开发
个人练习前端技术使用Bootstrap、JQuery、thymeleaf
个人练习前端技术使用Bootstrap、JQuery、thymeleaf
232 3
|
JavaScript
超炫酷UI效果的jQuery滑块插件
超炫酷UI效果的jQuery滑块插件
149 0

热门文章

最新文章