VueUse、View Transitions API实现暗黑模式主题动画切换效果

news2024/10/6 16:17:20

VueUse、View Transitions API实现暗黑模式主题动画切换效果

  • 前言
    • View Transitions API
      • 兼容版本
    • VueUse
  • 正题
    • 效果
    • 安装
    • 代码

1

作者GitHub:https://github.com/gitboyzcf 有兴趣可关注!!

前言

View Transitions API

View Transitions API 是原生JavaScript提供一种能让Dom更加丝滑的API

示例👇
t

兼容版本

兼容

VueUse

Vue的工具函数合集 https://vueuse.org/

正题

效果

效果

安装

npm install @vueuse/core
or
pnpm install @vueuse/core
or
yarn add @vueuse/core

代码

以下代码放入自己项目对应文件中即可

/* 进入dark模式和退出dark模式时,两个图像的位置顺序正好相反 */
/* 根据自己选择器修改 */
[data-bs-theme='dark']::view-transition-old(root) {
  z-index: 1;
}
[data-bs-theme='dark']::view-transition-new(root) {
  z-index: 999;
}

::view-transition-old(root) {
  z-index: 999;
}
::view-transition-new(root) {
  z-index: 1;
}

import { useDark, useToggle } from '@vueuse/core'

const isDark = useDark({
  selector: 'html',
  attribute: 'data-bs-theme',
  valueDark: 'dark',
  valueLight: 'light'
})

const toggleDark = useToggle(isDark)
const toggleTheme = (event) => {
  const x = event.clientX
  const y = event.clientY
  const endRadius = Math.hypot(Math.max(x, innerWidth - x), Math.max(y, innerHeight - y))

  // 兼容性处理
  if (!document.startViewTransition) {
    toggleDark()
    return
  }
  const transition = document.startViewTransition(() => {
    toggleDark()
  })

  transition.ready.then(() => {
    const clipPath = [`circle(0px at ${x}px ${y}px)`, `circle(${endRadius}px at ${x}px ${y}px)`]
    // 关于【documentElement.animate】https://developer.mozilla.org/zh-CN/docs/Web/API/Element/animate
    document.documentElement.animate(
      {
        clipPath: !isDark.value ? [...clipPath].reverse() : clipPath
      },
      {
        duration: 400,
        easing: 'ease-in',
        pseudoElement: !isDark.value ? '::view-transition-old(root)' : '::view-transition-new(root)'
      }
    )
  })
}






到这里就结束了,后续还会更新 前端 系列相关,还请持续关注!
感谢阅读,若有错误可以在下方评论区留言哦!!!

111


推荐文章👇

太丝滑了!了解一下原生的视图转换动画 View Transitions

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

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

相关文章

华东理工大学漏洞报送证书

获取来源:edusrc(教育漏洞报告平台) url:主页 | 教育漏洞报告平台 兑换价格:20金币 获取条件:提交华东理工大学任意中危或以上级别漏洞 证书规格:附送图二实物及封皮

[ Linux Busybox ] nandwrite 命令解析

文章目录 相关结构体nandwrite 函数实现nandwrite 实现流程图 文件路径:busybox-1.20.2/miscutils/nandwrite.c 相关结构体 MTD 相关信息结构体 struct mtd_info_user {__u8 type; // MTD 设备类型__u32 flags; // MTD设备属性标志__u32…

【Proteus仿真】【STM32单片机】水质监测报警系统设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器,使用按键、LED、蜂鸣器、LCD1602、PCF8591 ADC、PH传感器、浑浊度传感器、DS18B20温度传感器、继电器模块等。 主要功能: 系统运行后&a…

汽车标定技术(七)--基于模型开发如何生成完整的A2L文件(2)

目录 1. 自定义ASAP2文件 2. asap2userlib.tlc需要修改的部分 3. 标定量观测量地址替换 3.1 由elf文件替换 3.2 由map文件替换 3.3 正则表达式(含asap2post.m修改方法) 4.小结 书接上文汽车标定技术(五)--基于模型开发如何生成完整的A2L文件(1)-C…

考研408-计算机网络 第二章-物理层学习笔记及习题

第二章 物理层 一 通信基础 1.1 物理层基本概念 1.1.1 认识物理层 物理层目的:解决如何在连接各种计算机的传输媒体上传输数据比特流,而不是具体的传输媒体。 物理层主要任务:确认与传输媒体接口有关的一些特性,需要进行定义标…

Kafka(消息队列)--简介

1、kafka: 是一个高吞吐的分布式消息系统,与Hdfs比较相似,但是与hdfs的区别是在于hdfs是存储的是历史的、海量的数据,然而kafka存储的是实时的、最新的数据。 2、消息队列: 指的是在Kafka中的数据队列。可以存放数据在…

华为数通方向HCIP-DataCom H12-831题库(多选题:141-160)

第141题 项目实施方案主要包含哪些项? A、风险控制措施 B、人员安排 C、时间规划 D、割接流程 答案:ABCD 解析: 项目实施方案主要包括:时间规划、人员安排、割接流程、风险控制措施。 第142题 以下哪些广域网链路属于报文交换网? A、PSIN B、ISDN C、X.25 D、ATM E、MSTP…

大语言模型(LLM)综述(六):大型语言模型的基准和评估

A Survey of Large Language Models 前言7 CAPACITY AND EVALUATION7.1 基本能力7.1.1 语言生成7.1.2 知识利用7.1.3 复杂推理 7.2 高级能力7.2.1 人类对齐7.2.2 与外部环境的交互7.2.3 工具操作 7.3 基准和评估方法7.3.1 综合评价基准7.3.2 评估方法 7.4 实证评估7.4.1 实验设…

数字化工厂的实施挑战与解决方法

随着科技的快速发展,数字化工厂成为现代制造业的重要趋势之一。数字化工厂通过整合信息技术和制造技术,可以提高生产效率、降低成本、优化资源利用,同时也给企业带来了更多的挑战。 1. 技术挑战 数字化工厂实施过程中最大的挑战之一是技术方…

运动耳机怎么选?精选五款优秀的运动耳机分享

​对于喜欢运动的我来说,不管是在室内健身,还是在户外跑步,我都会边运动边听歌,运动耳机里放着自己喜欢的音乐会很放松。然而,市面上的运动耳机品牌和型号众多,质量参差不齐。今天,我们就为大家…

ZKP8.2 FRI (Univariate) Polynomial Commitment

ZKP学习笔记 ZK-Learning MOOC课程笔记 Lecture 8: FRI-based Polynomial Commitments and Fiat-Shamir (Justin Thaler) 8.2 FRI (Univariate) Polynomial Commitment Recall: Univariate Polynomial Commitments Initial Attempt from Lecture 4 (Merkle Tree) Fixing…

AI智能助理源码系统+智能创作 带完整搭建教程

大家好啊,罗峰今天来给大家介绍一款AI智能助理源码系统。 以下是部分核心功能实现代码模块 系统特色功能一览: 高效便捷:AI智能助理能够帮助用户完成各种任务,无论是写作、论文、代码、小说、创意策划,还是Excel表格…

【Node.js入门】1.1Node.js 简介

Node.js入门之—1.1Node.js 简介 文章目录 Node.js入门之—1.1Node.js 简介什么是 Node.js错误说法 Node.js 的特点跨平台三方类库自带http服务器非阻塞I/O事件驱动单线程 Node.js 的应用场合适合用Node.js的场合不适合用Node.js的场合弥补Node.js不足的解决方案 什么是 Node.j…

如何利用ChannelPipeline在Netty中搭建无懈可击的数据处理流水线?

在上篇文章(Netty 入门 — ChannelHandler, Netty 的数据加工厂)提到 ChannelHandler 虽然是一个好的打工人,但是在我们实际业务线中,他不可能一个人干所有的活啊,毕竟都 21 世纪了,我们是要讲究…

通过对多个思维链进行元推理来回答问题11.8

通过对多个思维链进行元推理来回答问题 摘要1 引言2 背景3 方法3.1 生成推理链3.2 对推理链进行元推理 4 实验4.1 实验设置4.1.1 数据集4.1.2 方法 摘要 现代的多跳问题回答(QA)系统通常将问题分解为一系列推理步骤,称为思维链(C…

基于SSM的旅游管理系统的设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

el-select下拉框默认显示全部选项

这里一直不默认显示全部,但这部分代码是正确的, 经过查询发现: 所以找到了这段: 发现之前role_id和status是 修改成0后就可以默认选中全部选项了

程序设计:控制台输出二叉树 二叉树的形象显示

本文指导你编写一个输出到字符控制台的形象的二叉树展示。 目录 一般的Tree显示方式 理想的显示方式 实现方法 计算显示位置 输出数据 计算显示位置的代码 输出数据的代码 一般的Tree显示方式 编写二叉树算法时调试是很头疼的,如何显示成一目了然的树结构呢…

C/C++轻量级并发TCP服务器框架Zinx-游戏服务器开发003:架构搭建-需求分析及TCP通信方式的实现

文章目录 1 项目总体架构2 项目需求2.1 服务器职责2.2 消息的格式和定义 3 基于Tcp连接的通信方式3.1 通道层实现GameChannel类3.1.1 TcpChannel类3.1.2 Tcp工厂类3.1.3 创建主函数,添加Tcp的监听套接字3.1.4 代码测试 3.2 协议层与消息类3.2.1 消息的定义3.2.2 消息…

算法训练 第六周

一、用栈实现队列 本题要求我们使用栈这个数据结构来模拟实现队列的各种操作,我们的具体思路是使用两个栈,将一个栈当作输入栈,用于压入 push传入的数据;另一个栈当作输出栈,用于 pop和 peek 操作。每次 pop 或 peek 时…