首页 > 其他分享 >uniapp vue3 实现自定义Switch效果

uniapp vue3 实现自定义Switch效果

时间:2024-06-12 17:46:11浏览次数:9  
标签:uniapp 自定义 color value isOn Switch props height type

<template>
    <view class="container" @click="toggleSwitch">
        <label :class="isOn ? 'switch-checked' : 'switch-nochecked'">
            <view class="open">{{ activeText }}</view>
            <view class="close">{{ inactiveText }}</view>
        </label>
    </view>
</template>

<script setup>
    import {
        ref,
        watch,
        defineProps,
        defineEmits
    } from 'vue';

    const props = defineProps({
        value: {
            type: Boolean,
            default: false
        },
        activeText: {
            type: String,
            default: '开启'
        },
        inactiveText: {
            type: String,
            default: '关闭'
        },
        activeValue: {
            type: [Number, String, Boolean],
            default: true
        },
        inactiveValue: {
            type: [Number, String, Boolean],
            default: false
        }
    });

    const emit = defineEmits(['update:value', 'change']);

    const isOn = ref(props.value);

    watch(() => props.value, (newVal) => {
        isOn.value = newVal;
    });

    const toggleSwitch = () => {
        isOn.value = !isOn.value;
        console.log(isOn.value ? props.activeValue : props.inactiveValue)
        emit('update:value', isOn.value ? props.activeValue : props.inactiveValue);
        emit('change', isOn.value ? props.activeValue : props.inactiveValue);
    };
</script>

<style lang="scss" scoped>
    .container {
        width: 100rpx;

        label {
            position: relative;
            display: block;
            border-radius: 40rpx;
            height: 40rpx;
            width: 100%;

            &:before {
                content: " ";
                display: block;
                border-radius: 50rpx;
                height: 100%;
                background-color: #d5d5d5;
                transform: scale(1, 1);
                transition: all 0.3s ease;
            }

            &:after {
                content: " ";
                position: absolute;
                top: 10%;
                // margin-left: 5%;
                left: 2px;
                width: 32rpx;
                height: 32rpx;
                border-radius: 32rpx;
                background-color: white;
                box-shadow: 2rpx rgba(0, 0, 0, 0.08);
                transition: all 0.3s ease;
            }
        }

        %font-style {
            top: 0;
            color: #ffffff;
            font-size: 24rpx;
            height: 100%;
            line-height: 40rpx;
            position: absolute;
            transition: all 1s ease;
        }

        .switch-checked {
            &:after {
                // margin-left: calc(100% - 40rpx);
                left: unset;
                right: 2px;
            }

            &:before {
                background-color: #007aff;
            }

            .close {
                display: none;
            }
        }

        .switch-nochecked {
            .open {
                display: none;
            }
        }

        .open {
            left: 10rpx;
            @extend %font-style;
        }

        .close {
            right: 10rpx;
            @extend %font-style;
            color: #6b6b6b;
        }
    }
</style>

使用效果

 

 

标签:uniapp,自定义,color,value,isOn,Switch,props,height,type
From: https://www.cnblogs.com/fczbk/p/18244396

相关文章

  • uniapp小程序,携带参数返回上一页
    功能介绍:这是我在开发微信小程序时实现的一个功能,在提交订单页面(A页面)点击设置收货地址跳转到地址列表页面(B页面)去选择地址后回退到订单页面并显示所选择的地址。具体实现:<!--HTML结构不完整,仅做参考,部分类名为作者项目中的配置--><viewclass='addressCon'v-if......
  • 下载使用nginx发布html自定义页面
    在浏览器搜索nginx.org,然后点击download,接着点击 stableandmainline选择自己所使用系统对应的信息后点击(我用的是CentOS,所以需要点击RHELandderivatives)vim/etc/yum.repos.d/nginx.repo[nginx-stable]name=nginxstablerepobaseurl=http://nginx.org/packages/ce......
  • 一文教你如何手写一个mybatis自定义框架
     本文主要介绍原始jdbc操作有哪些弊端等方面说明持久层框架出现的原因,另一方面介绍如何自己仿写一个mybatis框架。学习完本文相信你对日常使用的mybatis框架有更深的理解!简介说到持久层框架,我们很快能想到hibernate、mybatis。Hibernate是全自动的持久层框架,而mybatis则是半......
  • electron + vue3 自定义窗口:移动,缩放,置顶
    electronmain.jsconst{BrowserWindow,ipcMain}=require('electron');constpath=require("path")constCustomWindow=require('./CustomWindow')constwin=newBrowserWindow({frame:false,transparent:true,......
  • 利用自定义标签,实现select下拉列表默认选中
    //创建块函数方法,用于替换文本中的值functionsmarty_block_get_cates($params,$content,&$_sm,&$repeat){if(!$repeat){$ci=&get_instance();$cates=$ci->db->get('category')->result_array();$cates=get_dat......
  • 基于springboot+vue.js+uniapp小程序的社区团购系统附带文章源码部署视频讲解等
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaits系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • python绘制词云图最全教程,查看文章关键词,自定义词云图形状等,看完就会
    ......
  • VsCode中snippets --- vue自定义代码片段
    vue自定义代码片段Vue2代码片段1、点击文件→首选项→选择配置用户代码片段2、在弹出这个窗口中选择新建全局代码片段文件3、选择后在此处输入文件名后按‘Enter’键确定4、点击确定后会生成以下文件5、替换成以下vue2代码片段6、使用代码片段Vue3代码片段使用defineC......
  • uniapp(微信小程序)扫普通链接二维码打开小程序
    扫普通链接二维码打开小程序配置普通链接二维码数据1.登录微信公众平台2.开启扫普通链接二维码打开小程序功能3.点击添加4.生成二维码5.代码中通过onLoad生命周期获取二维码信息6.通过微信扫一扫测试是否正确获取二维码信息。场景:小程序中某些商家或企业想要生成......
  • 苹果iOS 18发布:新增锁屏自定义和应用锁
    今天凌晨1点,iOS18在苹果WWDC24上正式发布。全新的iOS18允许用户自由定义App排列,可以自由选择App颜色主题,并且iOS18升级支持锁屏状态自定义功能,还支持单个App的应用锁,保护用户隐私。与此同时,iOS18对控制中心也进行了升级调整,全新的控制中心更具有扩展性,支持第三方应用控制按......