首页 > 其他分享 >2024-07-24 记录一则切换页面背景颜色效果

2024-07-24 记录一则切换页面背景颜色效果

时间:2024-07-24 14:08:38浏览次数:14  
标签:24 const 07 -- px transition 2024 color 按钮

效果:点击切换按钮,背景色由白色变成黑色,从指定的地方开始过渡

 点击按钮:

<div ref="themeBtn" @click="changeTheme">点击切换</div>

切换逻辑:

// 主题切换按钮
const themeBtn = ref(null);

/* 改变颜色 */
const changeTheme = () => {
    // 创建一个过渡对象
    const transition = document.startViewTransition(() => {
        document.documentElement.classList.toggle('dark')
    })

    const width = themeBtn.value.getBoundingClientRect().width // 按钮的宽度
    const height = themeBtn.value.getBoundingClientRect().height // 按钮的高度
    const x = themeBtn.value.getBoundingClientRect().x + width / 2 // 按钮的中心x坐标
    const y = themeBtn.value.getBoundingClientRect().y + height / 2 // 按钮的中心y坐标

    // 计算展开圆的半径
    const tragetRadius = Math.hypot(
        Math.max(x, window.innerWidth - x),
        Math.max(y, window.innerHeight - y)
    )

    // 设置过渡的动画效果
    transition.ready.then(() => {
        document.documentElement.animate({
            clipPath: [`circle(0% at ${x}px ${y}px)`, `circle(${tragetRadius}px at ${x}px ${y}px)`]
        }, {
            duration: 1000,
            // pseudoElement 
            // 设置过渡效果的伪元素,这里设置为根元素的伪元素
            // 这样过渡效果就会作用在根元素上
            pseudoElement: '::view-transition-new(root)',
        })
    })
}

样式:

:root {
    --background-color: #fff;
    --color: #282c34;
    background-color: var(--background-color);
    color: var(--color);
  }
  
  :root.dark {
    --background-color: #282c34;
    --color: #fff;
  }
  
  /* 隐藏默认的过渡效果 */
  ::view-transition-new(root),
  ::view-transition-old(root) {
    animation: none;
  }

注意:本文参照https://juejin.cn/post/7363836438935552035来写的,可以看下原文,支持一下原作者。

 

标签:24,const,07,--,px,transition,2024,color,按钮
From: https://www.cnblogs.com/iuniko/p/18320784

相关文章

  • 【首届已完成见刊检索,华中师范大学伍伦贡联合研究院与南京大学联合主办 |EI 、SCOPUS
    第三届人工智能、物联网与云计算技术国际会议(AIoTC2024)将于2024年9月13日-15日在中国武汉举行。本次会议由华中师范大学伍伦贡联合研究院与南京大学联合主办、江苏省大数据区块链与智能信息专委会承办、江苏省概率统计学会、江苏省应用统计学会、SirForum、南京理工大学、......
  • 2024牛客多校3J Rigged Games
    欢迎来我的博客看这篇题解!Problem在两人竞技比赛中,对于任何正整数\(a\),我们定义\(BO(2a-1)\)如下:两名玩家继续竞争,直到其中一人获胜\(a\)次,那么他赢得整个比赛。\(BO(2a-1)\)最多包含\(2a-1\)小局游戏,最少包含\(a\)小局游戏。现在两个人进行一场DotA2比赛,使用的......
  • 2024/7/12
    //考试时间分配及感想T1聂赫柳朵夫之变link:T1score:100time:1h题型及难点:我都能A可见这题有多简单.jpgT2夏目漱石之月link:T2score:0time:90min题型及难点:1.没有大样例,所以对题目的分析尤其是读题有极高的要求(说不定就栽在哪里了(=@__@=))解题思路60pts首......
  • 0724 考试记录
    0724考试记录总结:多打暴力,不费时间并且对分数非常有用交之前检查一遍代码,包括静态查错以及记得关掉注释!!!(本场比赛因此爆零)对于以上,建议保证在写下一道题的时候反复检查上一道的代码为成品以下是考试题目分析&总结:T1题意简述:给你一个序列$l$与正整数\(T\),求......
  • 07-禅道
    禅道项目管理软件缺陷管理/软件缺陷管理(DefectManagement)是在软件生命周期中识别、管理、沟通任何缺陷的过程(从缺陷的识别到缺陷的解决关闭),确保缺陷被跟踪管理而不丢失。一般的,需要跟踪管理工具来帮助进行缺陷全流程管理。禅道项目管理软件是做什么的?禅道是国产开源项......
  • 2024年5款VSCode实用扩展推荐
    1.GitHubCopilot扩展说明:您可以在VisualStudioCode中使用Copilot来生成代码、修复错误、询问有关代码的问题等等。地址:https://marketplace.visualstudio.com/items?itemName=GitHub.copilot2.AIFlowchart2024扩展说明:AIFlowchart它可以帮助您使用Mermaid.js语......
  • 19、Python之容器:快来数一数,24678?Counter能数得更好
    引言关于数据的分组计数,前面的文章中已经涉及了很多次。眼下要进行分组计数,我们可用的方法有:1、直接使用dict进行计数,需要对首次出现的键进行判断初始化的操作;2、使用dict的setdefault()方法进行计数,代码可以简化一些,虽然方法名有点怪;3、defaultdict进行计数,可以设置自动......
  • 2024暑假集训总结
    2024暑假集训总结知识点清单:树状数组拓展:(1)k维前缀和(2)树状数组+倍增没码过,小慌线段树:(1)线段树不仅仅是一个维护区间和、区间最值或者类似于方差那道题,维护区间的平方等等信息,它的深层是将区间拆分为\(O(logn)\)个子区间从而将修改与查询降为\(O(logn)\)级别,因此对于线......
  • 2024牛客多校第三场
    磨合上升期,爽!B队友做的#include<bits/stdc++.h>usingnamespacestd;#defineintlonglonginlineintread(){intx=0;boolf=1;charch=getchar();for(;ch<'0'||ch>'9';ch=getchar())f^=(ch=='-');for(;ch>=&#......
  • 2024-07-24 想法记录,关于 可以准点睡觉 和 拖延寄快递
    2024-07-24     昨天晚上可以及时睡觉,比原来早,12点以前睡下来,11点半闭上的眼。之前的晚睡,怎么突然在这一会就可以变回来了呢? 我思考了一下,最重要的原因,我看见自己下巴和两鬓的白胡子,白发了。我才人到中年而已,年纪不大就已经头发胡子都变白了,不敢再熬夜了。再仔细感受......