使用Vue3封装的切换主题开关

news2025/8/8 13:15:43

组件介绍

第一次封装正经组件,更加深刻地感受到了Vue的强大及其带来的便利,记录一下😄打算多搞几个练Vue3

这是一个绑定了两个自定义事件、两个具名插槽的组件,可以切换白天、黑夜两种状态,因为放了两个slot插槽因此支持自定义状态标识

食用方法

1.由于使用的是具名插槽,因此需要在该组件注册至父组件后,在组件内放入两个带有v-slottemplate标签
2.需要通过v-slot传值daynight来分别表示白天与黑夜的主题
3.daynight需要是一个函数
4.若插槽内不传入任何内容,则默认补充汉字“日”与“月”

码上掘金

码上掘金可以嵌套组件吗?这样似乎不好展示效果

代码

组件:

  • 组件内对可能会发生样式变化的容器设置了transition并设置在0.3s完成过渡
  • 组件内使用了ref来获取DOM节点
  • 为了增加稍微丝滑一点的效果,开关中间的圆形按钮会变宽后变窄
  • situation是非常重要的变量,表示目前的主题状态,当发生改变时将调用父组件传入的对应函数daynight,且容器样式将会发生改变
<template lang=""><div class="slip-outer"><div class="slip-block" ref="block"></div><div class="inner"><div class="day" ref="day" @click="changeToDay"><slot name="day">日</slot></div><div class="night" ref="night" @click="changeToNight"><slot name="night">月</slot></div></div></div>
</template>
<script> import { ref, watch } from 'vue'export default {name: 'ChangeStyle',setup(props, context) {let situation = ref(true)const block = ref(null)const day = ref(null)const night = ref(null)function changeToDay() {if (!situation.value) {situation.value = true}}function changeToNight() {if (situation.value) {situation.value = false}}function changeWidth() {block.value.style.width = '50px'setTimeout(() => {block.value.style.width = '30px'}, 80)}watch(situation, (newValue) => {changeWidth()if (newValue === true) {context.emit('day')block.value.style.left = '2px'block.value.style.backgroundColor='#fff'night.value.style.color = '#000'} else {context.emit('night')block.value.style.left = '38px'block.value.style.backgroundColor='#000'night.value.style.color = '#fff'}})return {changeToDay,changeToNight,block,night,day,situation}}} </script>
<style scoped> .slip-outer {height: 30px;width: 70px;border-radius: 15px;background-color: rgb(221, 221, 221);box-shadow: 0px 2px 5px rgb(140, 140, 140) inset;position: relative;}.slip-block {height: 26px;width: 30px;border-radius: 13px;background-color: #fff;position: absolute;z-index: 0;top: 2px;left: 2px;box-shadow: 0px 2px 2px rgb(140, 140, 140);transition: 0.3s;}.inner {display: flex;width: 70px;cursor: pointer;}.inner div {z-index: 1;width: 50%;line-height: 30px;text-align: center;} </style> 

使用实例:

  • 该实例展示的是父组件中使用如上组件的情况
  • 可以像下方实例那样使用CSS变量来更方便地控制主题色(:root.demo中背景色的内容)
  • 函数daynight在控制CSS变量以快速且方便地控制主题色
<template lang=""><div><ChangeStyle @day="day" @night="night"><template v-slot:day>231</template><template v-slot:night>132</template></ChangeStyle><div class="demo" ref:demo></div></div>
</template>
<script> import ChangeStyle from './ChangeStyle.vue';import { ref } from 'vue'export default {name: 'DemoDoc',components: {ChangeStyle},setup(props) {const demo = ref(null)function day() {console.log('day');document.documentElement.style.setProperty('--theme','#fff')}function night() {console.log('night');document.documentElement.style.setProperty('--theme','#000')}return {day,night,demo}}} </script>
<style scoped> :root {--theme: '#fff';}.demo {width: 100px;height: 100px;background-color: var(--theme);border: 1px solid #000;} </style> 

最后

整理了75个JS高频面试题,并给出了答案和解析,基本上可以保证你能应付面试官关于JS的提问。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/34314.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java接口的相关知识

文章目录接口的概念语法规则接口的使用接口的特征实现多个接口接口间的继承接口使用实例Clonable 接口和深拷贝抽象类和接口的区别Object获取对象信息&#xff08;toString&#xff09;对象比较equals方法接口的概念 在生活中&#xff0c;接口的例子比比皆是&#xff0c;比如&…

总结:Prometheus之PromQL操作符

一、介绍 使用PromQL除了能够方便的按照查询和过滤时间序列以外&#xff0c;PromQL还支持丰富的操作符&#xff0c;这些操作符包括&#xff1a;数学运算符&#xff0c;逻辑运算符&#xff0c;布尔运算符等等。 二、数学运算 (加法)- (减法)* (乘法)/ (除法)% (求余)^ (幂运算…

macOS Outlook 查看邮件的源码 HTML源码

文章目录一句话Intro系统及软件版本macOS 12.6 M1 chipOutlook 16.67 (22111300)操作方式邮件正文 demo一句话 查看Outlook中HTML格式邮件的HTML源代码&#xff1a; Windows&#xff1a;Actions > Other Actions > View Source macOS&#xff1a;鼠标右击要查看的邮件 &…

提高工作效率,让你快速获得Hypermesh二次开发能力!

众所周知&#xff0c;目前电子产品种类很多&#xff0c;产品更新换代很快&#xff0c;已经步入快消品行列&#xff0c;这必然导致每个厂商对于产品开发周期的要求很严格&#xff0c;其次消费者对产品越来越挑剔&#xff0c;对产品的创新性要求很高&#xff0c;如果产品的同质化…

三肽Isovaleryl-Val-Val-Sta-乙酯化、120849-36-7

三肽Isovaleryl-Val-Val-Sta-乙酯化 编号&#xff1a;154080 CAS号&#xff1a;120849-36-7 三字母&#xff1a;Isobutyricacid-Val-Val-Sta-OEt 描 述&#xff1a;胃酶抑素类似物 SR 42128 抑制肾素活性。编号: 154080 中文名称: 三肽Isovaleryl-Val-Val-Sta-乙酯化 CAS号: 12…

JVM类加载(类加载过程、双亲委派模型)

系列文章目录 JVM的内存区域划分_crazy_xieyi的博客-CSDN博客 文章目录 一、类加载过程二、关于类加载的典型试题三、双亲委派模型一、类加载过程 对于一个类来说&#xff0c;它的生命周期是这样的&#xff1a;1.加载 “加载”&#xff08;Loading&#xff09;阶段是整个“类加…

MyBatis-核心配置文件mybatis-config.xml主要参数详解

1.全局配置文件 全局配置文件&#xff0c;见名知意就是对当前MyBatis的一些全局属性进行设置。也就是对各种数据操作进行统一规定。 全局配置文件包含了全局设置&#xff08;setting&#xff09;和properties两个大的部分&#xff0c;通过这两个大的部分动态的影响MyBatis的行…

安装Centos7

大部分运行环境都是centos&#xff0c;自己最近装了太多次centso&#xff0c;记录一下。 目录一、安装VMware二、下载Centos7镜像三、新建虚拟机四、配置Centos4.1 开启虚拟机4.2 配置安装语言4.3 安装图形界面4.4 设置磁盘分区4.5 开启网络4.6 配置root密码一、安装VMware VM…

git学习(一)

git学习之基本配置以及简单推拉操作 1 git的基本配置 1.1 配置提交者的姓名 1.1.1 语法 git config --global user.name "姓名"1.1.2 示例代码 git config --global user.name "张三"1.1.3 示例代码运行截图 1.2 配置提交者的邮箱 1.2.1 语法 git c…

app优化ios,iOS app上架流程问题集锦,ASO新手小白必看(上)

App从研发到提审上架&#xff0c;需要一套流程来保证App质量。而在上架过程中&#xff0c;开发者们往往都会遇到一些问题。今天就上架流程中遇到的问题作简单的梳理~ 1.准备 苹果开发者账号&#xff1a; 美术素材&#xff1a; Icon&#xff1a;尺寸1024*1024 设计icon时&#x…

Socket网络编程

参考博客&#xff1a;https://blog.csdn.net/shuux666/article/details/124023652 1、环境查看 通过cmd窗口的命令:ipconfig查看本机IP地址 查看网络情况是否正常:ping百度官网 2、Socket概述 3、套接字建立连接过程 4、Socket网络编程 基本的Socket编程&#xff1a; 本实…

2023-2028年中国合成氨行业发展前景与投资规划分析报告

本报告由锐观咨询重磅推出&#xff0c;对中国合成氨行业的发展现状、竞争格局及市场供需形势进行了具体分析&#xff0c;并从行业的政策环境、经济环境、社会环境及技术环境等方面分析行业面临的机遇及挑战。还重点分析了重点企业的经营现状及发展格局&#xff0c;并对未来几年…

【网络篇】第十五篇——HTTP协议(二)

HTTP的方法 HTTP的状态码 HTTP常见的Header Cookie和Session HTTP VS HTTPS HTTP/1.1,HTTP/2&#xff0c;HTTP/3演变 前面一章初步认识了URL&#xff0c;HTTP请求和相应协议格式,有所忘记的可以看一下前面的博客 (3条消息) 【网络篇】第十四篇——HTTP协议(一)(附带电视剧…

JVM 的可达性分析法和四种引用

JVM的垃圾回收机制的三个问题 回收哪些数据&#xff1f;什么回收&#xff1f;在哪里回收&#xff1f; 本就回答垃圾回收机制是回收哪些数据&#xff1f; 所谓“要回收的垃圾”无非就是那些不可能再被任何途径所使用的对象。无需再使用的对象&#xff0c;会被标记为垃圾&#…

PDF预览完整解决方案及各种兼容(VUE版)

PDF预览完整解决方案及各种兼容&#xff08;VUE版&#xff09; PDF预览完整解决方案及各种兼容&#xff08;VUE版&#xff09; - 掘金 前端学习使者正在上传…重新上传取消 2021年11月12日 16:57 阅读 2547 一、利用iframe 就一行代码就够了&#xff0c;只能满足最基本的…

【C++】vector的使用与题目练习

文章目录一、前言二、构造函数三、遍历四、增删查改1.常用接口2.增删查改五、经典题目一、前言 学习完string类之后&#xff0c;我们在来学习vector难度并没有之前那么高&#xff0c;更加容易理解一些接口 vector是表示可变大小数组的序列容器 &#xff0c;本质讲&#xff0c;v…

【基于stm32 FreeRtos的智能台灯】

基于stm32 FreeRtos的智能台灯控制 之前做了一个裸机版本的智能台灯&#xff0c;最近刚好复习一下FreeRto的一些基础知识&#xff0c;朋友发给了我一个功能需求刚好用来实践一下&#xff0c;需要的朋友可以自行下载。 链接&#xff1a;https://pan.baidu.com/s/1Ovn1ILgvDWWzeC…

Java项目:JSP会议-会议室管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目包含两个角色&#xff0c;管理员与用户角色&#xff1b; 管理员角色包含以下功能&#xff1a; 查看预订,查看会议,部门管理,员工注册,添…

Driud数据库连接池的使用

Driud数据库连接池的使用 简介&#xff1a;本文通过简洁的代码&#xff0c;让大家快速熟悉Driud数据库连接池的使用。 数据库连接池简介 数据库连接池是个容器&#xff0c;负责分配、管理数据库连接(Connection) 它允许应用程序重复使用一个现有的数据库连接&#xff0c;而不…

ROS-Unity连接教程

本篇文章主要介绍基于ROS-TCP-Connector、ROS-TCP-Endpoint两个Unity接口与ROS进行通信的环境配置&#xff0c;并对官方给出的Unity和ROS相互通信示例中的消息部分做了说明 一、环境配置 参考&#xff1a;Unity-Robotics-Hub/setup.md at main Unity-Technologies/Unity-Rob…