vue3主题切换按钮与功能实现

代码:

<template><div class="slideThree"><label class="theme-switch"><inputtype="checkbox"class="checkbox"v-model="isChecked"@change="setTheme"id="slideThree"name="check"checked/><div class="container"><!--云朵  --><div class="clouds"></div><div class="stars-container"><!--星星--><svgxmlns="http://www.w3.org/2000/svg"viewBox="0 0 144 55"fill="none"><pathfill-rule="evenodd"clip-rule="evenodd"d="M135.831 3.00688C135.055 3.85027 134.111 4.29946 133 4.35447C134.111 4.40947 135.055 4.85867 135.831 5.71123C136.607 6.55462 136.996 7.56303 136.996 8.72727C136.996 7.95722 137.172 7.25134 137.525 6.59129C137.886 5.93124 138.372 5.39954 138.98 5.00535C139.598 4.60199 140.268 4.39114 141 4.35447C139.88 4.2903 138.936 3.85027 138.16 3.00688C137.384 2.16348 136.996 1.16425 136.996 0C136.996 1.16425 136.607 2.16348 135.831 3.00688ZM31 23.3545C32.1114 23.2995 33.0551 22.8503 33.8313 22.0069C34.6075 21.1635 34.9956 20.1642 34.9956 19C34.9956 20.1642 35.3837 21.1635 36.1599 22.0069C36.9361 22.8503 37.8798 23.2903 39 23.3545C38.2679 23.3911 37.5976 23.602 36.9802 24.0053C36.3716 24.3995 35.8864 24.9312 35.5248 25.5913C35.172 26.2513 34.9956 26.9572 34.9956 27.7273C34.9956 26.563 34.6075 25.5546 33.8313 24.7112C33.0551 23.8587 32.1114 23.4095 31 23.3545ZM0 36.3545C1.11136 36.2995 2.05513 35.8503 2.83131 35.0069C3.6075 34.1635 3.99559 33.1642 3.99559 32C3.99559 33.1642 4.38368 34.1635 5.15987 35.0069C5.93605 35.8503 6.87982 36.2903 8 36.3545C7.26792 36.3911 6.59757 36.602 5.98015 37.0053C5.37155 37.3995 4.88644 37.9312 4.52481 38.5913C4.172 39.2513 3.99559 39.9572 3.99559 40.7273C3.99559 39.563 3.6075 38.5546 2.83131 37.7112C2.05513 36.8587 1.11136 36.4095 0 36.3545ZM56.8313 24.0069C56.0551 24.8503 55.1114 25.2995 54 25.3545C55.1114 25.4095 56.0551 25.8587 56.8313 26.7112C57.6075 27.5546 57.9956 28.563 57.9956 29.7273C57.9956 28.9572 58.172 28.2513 58.5248 27.5913C58.8864 26.9312 59.3716 26.3995 59.9802 26.0053C60.5976 25.602 61.2679 25.3911 62 25.3545C60.8798 25.2903 59.9361 24.8503 59.1599 24.0069C58.3837 23.1635 57.9956 22.1642 57.9956 21C57.9956 22.1642 57.6075 23.1635 56.8313 24.0069ZM81 25.3545C82.1114 25.2995 83.0551 24.8503 83.8313 24.0069C84.6075 23.1635 84.9956 22.1642 84.9956 21C84.9956 22.1642 85.3837 23.1635 86.1599 24.0069C86.9361 24.8503 87.8798 25.2903 89 25.3545C88.2679 25.3911 87.5976 25.602 86.9802 26.0053C86.3716 26.3995 85.8864 26.9312 85.5248 27.5913C85.172 28.2513 84.9956 28.9572 84.9956 29.7273C84.9956 28.563 84.6075 27.5546 83.8313 26.7112C83.0551 25.8587 82.1114 25.4095 81 25.3545ZM136 36.3545C137.111 36.2995 138.055 35.8503 138.831 35.0069C139.607 34.1635 139.996 33.1642 139.996 32C139.996 33.1642 140.384 34.1635 141.16 35.0069C141.936 35.8503 142.88 36.2903 144 36.3545C143.268 36.3911 142.598 36.602 141.98 37.0053C141.372 37.3995 140.886 37.9312 140.525 38.5913C140.172 39.2513 139.996 39.9572 139.996 40.7273C139.996 39.563 139.607 38.5546 138.831 37.7112C138.055 36.8587 137.111 36.4095 136 36.3545ZM101.831 49.0069C101.055 49.8503 100.111 50.2995 99 50.3545C100.111 50.4095 101.055 50.8587 101.831 51.7112C102.607 52.5546 102.996 53.563 102.996 54.7273C102.996 53.9572 103.172 53.2513 103.525 52.5913C103.886 51.9312 104.372 51.3995 104.98 51.0053C105.598 50.602 106.268 50.3911 107 50.3545C105.88 50.2903 104.936 49.8503 104.16 49.0069C103.384 48.1635 102.996 47.1642 102.996 46C102.996 47.1642 102.607 48.1635 101.831 49.0069Z"fill="currentColor"></path></svg></div><!--日月--><div class="circle-container"><div class="sun-moon-container"><!-- 月亮 --><div class="moon"><div class="moon-info"></div><div class="moon-info"></div><div class="moon-info"></div></div></div></div></div></label></div>
</template><script setup lang="ts">
import { ref, watch, onMounted } from "vue";
import { useCounterStore } from "../store/storeIndex";
import { storeToRefs } from "pinia";
const store = useCounterStore();
//从pinia中获取当前主题
const { theme } = storeToRefs(store);
const isChecked = ref(true);onMounted(() => {//挂载时判断当前主题if (localStorage.getItem("theme") === "dark") {isChecked.value = true;} else {isChecked.value = false;}
});watch(theme,(val) => {const root = window.document.documentElement;if (theme.value === "light") {isChecked.value = false;} else {isChecked.value = true;}root.classList.remove("light", "dark");if (theme.value === "system") {const systemTheme = window.matchMedia("(prefers-color-scheme: dark)").matches? "dark": "light";root.classList.add(systemTheme);return;}root.classList.add(val);},{immediate: true,}
);//切换主题
const setTheme = () => {let value = isChecked.value ? "dark" : "light";localStorage.setItem("theme", value);theme.value = value;
};
</script><style lang="scss" scoped>
.slideThree {position: relative;.theme-switch {//容器高度--container-height: 2.5em;//日月大小--circle-container-diameter: 3.375em;//日月偏移--circle-container-offset: calc((var(--circle-container-diameter) - var(--container-height)) / 2 * -1);//云色--clouds-color: #f3fdff;//夜晚云色--back-clouds-color: #aacadf;//日月切换动画--transition: 0.5s cubic-bezier(0, -0.02, 0.4, 1.25);//日月移动动画--circle-transition: 0.3s cubic-bezier(0, -0.02, 0.35, 1.17);}.theme-switch,.theme-switch *,.theme-switch *::before,.theme-switch *::after {-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;font-size: 20px;}.container {width: 6em;height: var(--container-height);background-color: #3d7eae;border-radius: 6.25em;overflow: hidden;cursor: pointer;-webkit-box-shadow: 0em -0.062em 0.062em rgba(0, 0, 0, 0.25),0em 0.062em 0.125em rgba(255, 255, 255, 0.94);box-shadow: 0em -0.062em 0.062em rgba(0, 0, 0, 0.25),0em 0.062em 0.125em rgba(255, 255, 255, 0.94);-webkit-transition: var(--transition);-o-transition: var(--transition);transition: var(--transition);position: relative;}.container::before {content: "";position: absolute;z-index: 1;inset: 0;-webkit-box-shadow: 0em 0.05em 0.187em rgba(0, 0, 0, 0.25) inset,0em 0.05em 0.187em rgba(0, 0, 0, 0.25) inset;box-shadow: 0em 0.05em 0.187em rgba(0, 0, 0, 0.25) inset,0em 0.05em 0.187em rgba(0, 0, 0, 0.25) inset;border-radius: 6.25em;}.checkbox {display: none;}.circle-container {width: var(--circle-container-diameter);height: var(--circle-container-diameter);background-color: rgba(255, 255, 255, 0.1);position: absolute;left: var(--circle-container-offset);top: var(--circle-container-offset);border-radius: 6.25em;-webkit-box-shadow: inset 0 0 0 3.375em rgba(255, 255, 255, 0.1),inset 0 0 0 3.375em rgba(255, 255, 255, 0.1),0 0 0 0.625em rgba(255, 255, 255, 0.1),0 0 0 1.25em rgba(255, 255, 255, 0.1);box-shadow: inset 0 0 0 3.375em rgba(255, 255, 255, 0.1),inset 0 0 0 3.375em rgba(255, 255, 255, 0.1),0 0 0 0.625em rgba(255, 255, 255, 0.1),0 0 0 1.25em rgba(255, 255, 255, 0.1);display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-transition: var(--circle-transition);-o-transition: var(--circle-transition);transition: var(--circle-transition);pointer-events: none;}.sun-moon-container {pointer-events: auto;position: relative;z-index: 2;width: 2.125rem;height: 2.125rem;margin: auto;border-radius: 6.25em;background-color: #ecca2f;-webkit-box-shadow: 0.062em 0.062em 0.062em 0em rgba(254, 255, 239, 0.61)inset,0em -0.062em 0.062em 0em #a1872a inset;box-shadow: 0.062em 0.062em 0.062em 0em rgba(254, 255, 239, 0.61) inset,0em -0.062em 0.062em 0em #a1872a inset;-webkit-filter: drop-shadow(0.062em 0.125em 0.125em rgba(0, 0, 0, 0.25))drop-shadow(0em 0.062em 0.125em rgba(0, 0, 0, 0.25));filter: drop-shadow(0.062em 0.125em 0.125em rgba(0, 0, 0, 0.25))drop-shadow(0em 0.062em 0.125em rgba(0, 0, 0, 0.25));overflow: hidden;-webkit-transition: var(--transition);-o-transition: var(--transition);transition: var(--transition);}.moon {-webkit-transform: translateX(100%);-ms-transform: translateX(100%);transform: translateX(100%);width: 100%;height: 100%;background-color: #c4c9d1;border-radius: inherit;-webkit-box-shadow: 0.062em 0.062em 0.062em 0em rgba(254, 255, 239, 0.61)inset,0em -0.062em 0.062em 0em #969696 inset;box-shadow: 0.062em 0.062em 0.062em 0em rgba(254, 255, 239, 0.61) inset,0em -0.062em 0.062em 0em #969696 inset;-webkit-transition: var(--transition);-o-transition: var(--transition);transition: var(--transition);position: relative;}.moon-info {position: absolute;top: 0.75em;left: 0.312em;width: 0.75em;height: 0.75em;border-radius: 6.25em;background-color: #959db1;-webkit-box-shadow: 0em 0.0312em 0.062em rgba(0, 0, 0, 0.25) inset;box-shadow: 0em 0.0312em 0.062em rgba(0, 0, 0, 0.25) inset;}.moon-info:nth-of-type(2) {width: 0.375em;height: 0.375em;top: 0.937em;left: 1.375em;}.moon-info:nth-last-of-type(3) {width: 0.25em;height: 0.25em;top: 0.312em;left: 0.812em;}.clouds {width: 1.25em;height: 1.25em;background-color: var(--clouds-color);border-radius: 6.25em;position: absolute;bottom: -0.625em;left: 0.312em;-webkit-box-shadow: 0.937em 0.312em var(--clouds-color),-0.312em -0.312em var(--back-clouds-color),1.437em 0.375em var(--clouds-color),0.5em -0.125em var(--back-clouds-color), 2.187em 0 var(--clouds-color),1.25em -0.062em var(--back-clouds-color),2.937em 0.312em var(--clouds-color), 2em -0.312em var(--back-clouds-color),3.625em -0.062em var(--clouds-color), 2.625em 0em var(--back-clouds-color),4.5em -0.312em var(--clouds-color),3.375em -0.437em var(--back-clouds-color),4.625em -1.75em 0 0.437em var(--clouds-color),4em -0.625em var(--back-clouds-color),4.125em -2.125em 0 0.437em var(--back-clouds-color);box-shadow: 0.937em 0.312em var(--clouds-color),-0.312em -0.312em var(--back-clouds-color),1.437em 0.375em var(--clouds-color),0.5em -0.125em var(--back-clouds-color), 2.187em 0 var(--clouds-color),1.25em -0.062em var(--back-clouds-color),2.937em 0.312em var(--clouds-color), 2em -0.312em var(--back-clouds-color),3.625em -0.062em var(--clouds-color), 2.625em 0em var(--back-clouds-color),4.5em -0.312em var(--clouds-color),3.375em -0.437em var(--back-clouds-color),4.625em -1.75em 0 0.437em var(--clouds-color),4em -0.625em var(--back-clouds-color),4.125em -2.125em 0 0.437em var(--back-clouds-color);-webkit-transition: 0.5s cubic-bezier(0, -0.02, 0.4, 1.25);-o-transition: 0.5s cubic-bezier(0, -0.02, 0.4, 1.25);transition: 0.5s cubic-bezier(0, -0.02, 0.4, 1.25);}.stars-container {position: absolute;color: #fff;top: -100%;left: 0.312em;width: 2.75em;height: auto;-webkit-transition: var(--transition);-o-transition: var(--transition);transition: var(--transition);}/* actions */.checkbox:checked + .container {background-color: #1d1f2c;}.checkbox:checked + .container .circle-container {left: calc(100% - var(--circle-container-offset) - var(--circle-container-diameter));}.checkbox:checked + .container .circle-container:hover {left: calc(100% - var(--circle-container-offset) - var(--circle-container-diameter) -0.187em);}.circle-container:hover {left: calc(var(--circle-container-offset) + 0.187em);}.checkbox:checked + .container .moon {-webkit-transform: translate(0);-ms-transform: translate(0);transform: translate(0);}.checkbox:checked + .container .clouds {bottom: -4.062em;}.checkbox:checked + .container .stars-container {top: 50%;-webkit-transform: translateY(-50%);-ms-transform: translateY(-50%);transform: translateY(-50%);}
}input[type="checkbox"] {visibility: hidden;&:checked + label {left: 43px;}
}
</style>

pinia中:

import { defineStore } from "pinia";
import { ref } from "vue";
export const useCounterStore = defineStore("counter", () => {const theme = ref<string>(localStorage.getItem("theme") || "dark");return {theme};
});

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

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

相关文章

Day08:CSS 高级

目标&#xff1a;掌握定位的作用及特点&#xff1b;掌握 CSS 高级技巧 一、定位 作用&#xff1a;灵活的改变盒子在网页中的位置 实现&#xff1a; 1.定位模式&#xff1a;position 2.边偏移&#xff1a;设置盒子的位置 leftrighttopbottom 水平方向偏移&#xff1a;left、…

mac下载安装好软件后提示已损坏

mac下载安装好软件后提示已损坏 解决方法&#xff1a; 首先确保系统安全设置已经改为任何来源。 打开任何来源后&#xff0c;到应用程序目录中尝试运行软件&#xff0c;如果仍提示损坏&#xff0c;请在应用图标上&#xff0c;鼠标右键&#xff0c;在弹出菜单中点打开。 如果…

埃及媒体分发投放-新闻媒体通稿发布

埃及商业新闻 大舍传媒近日宣布将在埃及商业新闻领域展开新的媒体分发投放。作为埃及最具影响力的商业新闻平台之一&#xff0c;埃及商业新闻将为大舍传媒提供广阔的市场和受众群体。这一合作意味着大舍传媒将有机会通过埃及商业新闻的平台向埃及的商业精英和投资者传递最新的…

SpringBoot项目启动时提示程序包不存在和找不到符号

一、前言 最近接手同事开发的一个Springboot工作项目&#xff0c;从svn上整体拉取下来后&#xff0c;构建完成后&#xff0c;启动的时候遇到了程序包找不到的情况&#xff0c;记录一下处理过程&#xff1b; 二、项目问题 1、报错信息&#xff1a;启动后报 java: 程序包org.sp…

升级 JDK17 一个不可拒绝的理由!

插&#xff1a; AI时代&#xff0c;程序员或多或少要了解些人工智能&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家(前言 – 人工智能教程 ) 坚持不懈&#xff0c;越努力越幸运&#xff0c;大家…

Spring AOP基于动态代理的实现的 AOP

目录 代理什么是代理代理模式 静态代理动态代理JDK动态代理CGLIB动态代理Spring AOP使用的是哪种代理&#xff1f; 代理 什么是代理 生活中的代理 房产中介 &#xff1a; 房屋进行租赁时&#xff0c;卖方会把房子授权给中介&#xff0c;由中介代理带客户看房&#xff0c;商谈…

行为型设计模式之模板模式

文章目录 概述原理结构图实现 小结 概述 模板方法模式(template method pattern)原始定义是&#xff1a;在操作中定义算法的框架&#xff0c;将一些步骤推迟到子类中。模板方法让子类在不改变算法结构的情况下重新定义算法的某些步骤。 模板方法中的算法可以理解为广义上的业…

Function Calling学习

Function Calling第一篇 Agent&#xff1a;AI 主动提要求Function Calling&#xff1a;AI 要求执行某个函数场景举例&#xff1a;明天上班是否要带伞&#xff1f;AI反过来问你&#xff0c;明天天气怎么样&#xff1f; Function Calling 的基本流程 Function Calling 完整的官…

北斗高精度定位终端的工作原理和精度范围

北斗高精度定位终端的工作原理主要基于北斗卫星导航系统&#xff0c;通过卫星信号的接收、处理和计算&#xff0c;实现了对目标位置的精确测量。以下是关于北斗高精度定位终端工作原理的引文&#xff1a; ​ 北斗高精度定位终端作为一款新型的高精定位设备&#xff0c;其核心…

pg_lakehouse 与 datafusion

原理分析 pg_lakehouse 是 ParadeDB 推出的一个开源插件&#xff0c;支持对多种数据湖里的数据做分析计算。它的出现&#xff0c;使得 Postgres 能够像访问本地数据一样轻松访问 S3 等对象存储&#xff0c;轻松访问 Delta Lake 上的表格&#xff0c;具备数据湖分析能力。 pg_…

微信小程序实现容器图片流式布局功能,配合小程序原生框架使用。

小程序实现容器图片流式布局功能&#xff0c;因为目前论坛上也有很多博主出过类似的文章&#xff0c;这里我就以一个小白角度去讲一下如何实现的吧。给作者一点点鼓励&#xff0c;先点个赞赞吧&#x1f44d;&#xff0c;蟹蟹&#xff01;&#xff01; 目标 实现下方效果图 技术…

sonar3 使用 api/measures/componet 获取代码当,Java实现

最近团队在做一个技术架构相关的优化&#xff0c;当前的目标是想要通过代码量&#xff0c;系统架构入手。先统计到部门的代码量&#xff0c;如何进行代码行数的统计呢&#xff0c;因为我们采用的是Java技术栈&#xff0c;我就Java技术栈进行说明。 1、如何统计代码行数 要统计…

ZYNQ AXI4 FDMA内存读写

1 概述 如果用过ZYNQ的都知道,要直接操作PS的DDR 通常是DMA 或者VDMA,然而用过XILINX 的DMA IP 和 VDMA IP,总有一种遗憾,那就是不够灵活,还需要对寄存器配置,真是麻烦。对于我们搞 FPGA 的人来说,最喜欢直接了当,直接用FPGA代码搞定。现在XILINX 的总线接口是AXI4总线…

latex中复制到word里面之后如何转变成word自带的公式

详细步骤如下&#xff1a; 第一步&#xff0c;将latex中的公式复制到word里面&#xff0c;例如&#xff1a;$r_1^d$ 第二步&#xff0c;选中$$里面的部分&#xff0c;也就是去掉$$&#xff0c;选中剩余的部分&#xff0c;例如&#xff1a;r_1^d 第三步&#xff0c;word工具栏里…

【代码随想录】【算法训练营】【第21天】 [530]二叉搜索树的最小绝对差 [501]二叉搜索树的众数 [236]二叉树的最近公共祖先

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 LeetCode。 day 21&#xff0c;天气不错的周二~ 题目详情 [530] 二叉搜索树的最小绝对差 题目描述 530 二叉搜索树的最小绝对差 解题思路 前提&#xff1a;二叉搜索树 思路&#xff1a;根据二叉搜索树的中…

长安链使用Golang编写智能合约教程(二)

本篇说的是长安链2.3.的版本的智能合约&#xff0c;虽然不知道两者有什么区别&#xff0c;但是编译器区分。 教程三会写一些&#xff0c;其他比较常用SDK方法的解释和使用方法 编写前的注意事项&#xff1a; 1、运行一条带有Doker_GoVM的链 2、建议直接用官方的在线IDE去写合…

奥枫软件Java要个16K遇到地狱级难度,醉了。。。

我只能说地狱难度&#xff0c;没绝对把握就别去了。我凭借前辈的经验&#xff0c;和当时天时地利人和&#xff0c;六道题答得很不错&#xff0c;但还是没通过。我有备而来都没过&#xff0c;现场写那些应该都是白忙活了。 一面 1&#xff0c;分割一个整数。如123&#xff0c;结…

抖音本地生活服务商入驻指南分享!

当前&#xff0c;各大平台的团购外卖业务持续火爆&#xff0c;并逐渐成为众多创业赛道中的大热门。其中&#xff0c;本地生活服务更是在短时间内杀出重围&#xff0c;成为创业者们的首选。 根据抖音生活服务近日发布的《2023年度数据报告》&#xff0c;2023年&#xff0c;抖音生…

2024年湖北水平能力测试能搞定吗?

武汉中级职称报名正式高一段落&#xff0c;意味着今年武汉市中级职称报名除开东湖高新区之外&#xff0c;其余地方都已经正式截止了&#xff0c;那么接下来大家都在准备6月中下旬的水平能力测试考试。 水平能力测试分为两种&#xff1a;面试答辩或者笔试机考试卷&#xff0c;面…

vue脚手架与创建vue项目

一、前言 vue脚手架的安装与创建vue项目需要先行安装配置node与npm&#xff0c;详情可以看node、npm的下载、安装、配置_node 下载安装-CSDN博客 二、vue脚手架的使用 1、vue与vue脚手架的版本 Vue脚手架&#xff08;Vue CLI&#xff09;是Vue.js官方提供的一个命令行工具&…