返回列表 发布新帖
查看: 47|回复: 0

[代码技巧] 子比主题 – 昼夜切换模式新增过度动画

[复制链接]
SunJu_FaceMall
社区贡献

315

主题

190

回帖

1万

积分

等级头衔
Icon组别 : 管理员
Icon等级 :

积分成就
   钻石 : 524 颗
   贡献 : 1457 点
   金币 : 12 枚
Icon在线时间 : 1294 小时
Icon注册时间 : 2024-11-22
Icon最后登录 : 2025-10-29

荣誉勋章

会员LV.1会员LV.2会员LV.3会员LV.4会员LV.5会员LV.6会员LV.7会员LV.8会员LV.9会员LV.10

风云·优秀版主

飞流名人堂成员

1

实名认证 手机认证 vip vip-year FLLTCN发表于 2025-10-10 16:36:45 | 查看全部 |阅读模式 浙江金华

资源无需等待,交易就趁现在,全面资源整合网络大咖云集,让你轻松玩转互联网!

您需要 登录 才可以下载或查看,没有账号?立即注册

×
逛论坛的时候发现一款子比主题切换昼夜和白天模式的时候通过JS改了子比的源代码来实现的过度动画的效果,这个效果非常好看,喜欢的自行部署吧!

image.webp

代码部署


定位:/wp-content/themes/zibll/js/main.min.js,我们要修改这个文件,但是这个文件是压缩后的,不好去改,那么我们再去定位:/wp-content/themes/zibll/js/min.js,这个文件是没有压缩的js代码,跟上面压缩的是代码是一样的,我们要有一个逻辑,我们先去改min.js文件的然后去粘贴到main.min.js,然后再压缩就可以了,话不多说直接开始!
tengfei_down - 2025-10-10T163604.776.webp
代码如下
  1. $('.toggle-theme').click(function(e) {
  2.     // 缓存所有DOM元素和初始值,避免重复查询
  3.     var body = $('body');
  4.     var isDark = body.hasClass('dark-theme');
  5.     var tinymceBody = $('#post_content_ifr').contents().find('body');
  6.     var enlighter = $('.enlighter-default');
  7.     var highClasses = {
  8.         white: 'enlighter-t-' + _win.highlight_white_zt,
  9.         dark: 'enlighter-t-' + _win.highlight_dark_zt
  10.     };
  11.    
  12.     // 计算半径只需要一次
  13.     var radius = Math.hypot(
  14.         Math.max(e.clientX, window.innerWidth - e.clientX),
  15.         Math.max(e.clientY, window.innerHeight - e.clientY)
  16.     );
  17.    
  18.     // 优化为一个函数调用
  19.     applyThemeTransition(e.clientX, e.clientY, radius, isDark);
  20.    
  21.     // 核心函数 - 处理主题过渡
  22.     function applyThemeTransition(x, y, endRadius, isDark) {
  23.         // 1. 准备样式
  24.         prepareStyles(isDark);
  25.         
  26.         // 2. 切换图片
  27.         $('img[switch-src]').each(function() {
  28.             var img = $(this);
  29.             var src = img.attr('data-src') || img.attr('src');
  30.             var switchSrc = img.attr('switch-src');
  31.             img.attr({
  32.                 'src': switchSrc,
  33.                 'switch-src': src,
  34.                 'data-src': ''
  35.             });
  36.         });
  37.         
  38.         // 3. 应用主题切换
  39.         if (typeof document.startViewTransition === 'function') {
  40.             try {
  41.                 // 使用View Transition API
  42.                 document.startViewTransition(function() {
  43.                     applyTheme(isDark, body, tinymceBody, enlighter, highClasses);
  44.                 }).ready.then(function() {
  45.                     // 应用动画
  46.                     var clipPaths = isDark
  47.                         ? [`circle(${endRadius}px at ${x}px ${y}px)`, `circle(0px at ${x}px ${y}px)`]  // 黑→白:收缩
  48.                         : [`circle(0px at ${x}px ${y}px)`, `circle(${endRadius}px at ${x}px ${y}px)`]; // 白→黑:扩散
  49.                         
  50.                     var element = isDark ? '::view-transition-old(root)' : '::view-transition-new(root)';
  51.                     
  52.                     document.documentElement.animate(
  53.                         { clipPath: clipPaths },
  54.                         { duration: 750, easing: 'ease-out', pseudoElement: element }
  55.                     );
  56.                 });
  57.             } catch {
  58.                 // 动画失败时直接切换
  59.                 applyTheme(isDark, body, tinymceBody, enlighter, highClasses);
  60.             }
  61.         } else {
  62.             // 不支持动画API时直接切换
  63.             applyTheme(isDark, body, tinymceBody, enlighter, highClasses);
  64.         }
  65.     }
  66.    
  67.     // 准备样式函数
  68.     function prepareStyles(isDark) {
  69.         // 确保基础样式存在
  70.         var baseStyle = document.getElementById('view-transition-styles');
  71.         if (!baseStyle) {
  72.             baseStyle = document.createElement('style');
  73.             baseStyle.id = 'view-transition-styles';
  74.             baseStyle.textContent = `
  75.                 ::view-transition-old(root), ::view-transition-new(root) {
  76.                     animation: none;
  77.                     mix-blend-mode: normal;
  78.                 }
  79.                 ::view-transition-image-pair(root) { isolation: auto; }
  80.             `;
  81.             document.head.appendChild(baseStyle);
  82.         }
  83.         
  84.         // 设置z-index
  85.         var zStyle = document.getElementById('z-transition-style') ||
  86.                      document.head.appendChild(document.createElement('style'));
  87.         zStyle.id = 'z-transition-style';
  88.         zStyle.textContent = isDark
  89.             ? `::view-transition-old(root){z-index:999}::view-transition-new(root){z-index:1}`
  90.             : `::view-transition-old(root){z-index:1}::view-transition-new(root){z-index:999}`;
  91.     }
  92.    
  93.     // 应用主题函数
  94.     function applyTheme(isDark, body, tinymceBody, enlighter, classes) {
  95.         if (!isDark) {
  96.             // 切换到暗色
  97.             tinymceBody.addClass('dark-theme');
  98.             enlighter.addClass(classes.dark).removeClass(classes.white);
  99.             body.addClass('dark-theme');
  100.             $.cookie('theme_mode', 'dark-theme', {path: '/'});
  101.         } else {
  102.             // 切换到亮色
  103.             tinymceBody.removeClass('dark-theme');
  104.             enlighter.addClass(classes.white).removeClass(classes.dark);
  105.             body.removeClass('dark-theme');
  106.             $.cookie('theme_mode', 'white-theme', {path: '/'});
  107.         }
  108.     }
  109. });
复制代码



本帖被以下淘专辑推荐:

路虽远,行则将至;事虽难,做则必成。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

飞流广播+ 发布

系统消息:柒沐已经连续答对3道难题,逆天学霸谁与争锋?!#每日答题#
10-30 17:02
系统消息:柒沐已经连续答对10道难题,逆天学霸谁与争锋?!#每日答题#
10-09 09:07
系统消息:柒沐已经连续答对3道难题,逆天学霸谁与争锋?!#每日答题#
09-24 09:00
系统消息:柒沐已经连续答对3道难题,逆天学霸谁与争锋?!#每日答题#
09-11 11:40
系统消息:柒沐已经连续答对3道难题,逆天学霸谁与争锋?!#每日答题#
09-02 09:17
系统消息:柒沐已经连续答对3道难题,逆天学霸谁与争锋?!#每日答题#
08-27 08:56
系统消息:柒沐已经连续答对3道难题,逆天学霸谁与争锋?!#每日答题#
08-20 15:12
系统消息:柒沐已经连续答对3道难题,逆天学霸谁与争锋?!#每日答题#
08-03 10:22
系统消息:柒沐已经连续答对10道难题,逆天学霸谁与争锋?!#每日答题#
06-30 08:57
系统消息:柒沐已经连续答对3道难题,逆天学霸谁与争锋?!#每日答题#
06-18 09:14
系统消息:清风网络已经连续答对10道难题,逆天学霸谁与争锋?!#每日答题#
04-11 09:40
系统消息:清风网络已经连续答对3道难题,逆天学霸谁与争锋?!#每日答题#
04-10 09:31
系统消息:IXM77777已经连续答对3道难题,逆天学霸谁与争锋?!#每日答题#
04-09 13:44
系统消息:清风网络已经连续答对3道难题,逆天学霸谁与争锋?!#每日答题#
04-09 09:22
系统消息:柒沐已经连续答对10道难题,逆天学霸谁与争锋?!#每日答题#
04-09 08:52
系统消息:清风网络已经连续答对3道难题,逆天学霸谁与争锋?!#每日答题#
04-08 09:24
系统消息:柒沐已经连续答对3道难题,逆天学霸谁与争锋?!#每日答题#
04-07 09:02
系统消息:柒沐已经连续答对10道难题,逆天学霸谁与争锋?!#每日答题#
02-27 09:35
系统消息:柒沐已经连续答对3道难题,逆天学霸谁与争锋?!#每日答题#
02-26 09:06
系统消息:柒沐已经连续答对3道难题,逆天学霸谁与争锋?!#每日答题#
02-25 08:49
站内通告

提供资源交易、信息共享、靓号交流、技术变现、学习问答、兴趣娱乐等全面服务。

1.丰富功能系统,扩展社区特色玩法,打造最好的互联网聚集圈子。

2.准确信息真实交易,安全快捷又方便,让虚拟交易面对面。

3. 天上不会掉馅饼,话术骗术迷人心,切勿脱离平台线下交易,被骗与平台无关!

4. 欺诈骗钱,违规违法将视情受到警告&禁言&封号甚至检举至👮🏻‍♀️处理!

官方Q群:123129钉推群:BAYR2383 站长QQ:3220000000

投诉/建议/商务合作联系

fl@fllt.cn

严禁私下交易,被骗与本站无关。
违反交易细则,取证立查严惩。
  • 钉钉新帖推送群
  • 官方交流QQ群
  • 站长唯一微信号

👮曝光Ta|🧿小黑屋|📴手机页|飞流网 ( 渝ICP备2025054677号-1|电信增值许可 渝B2-20250789 )|网站地图

GMT+8, 2025-11-8 02:04 , Processed in 0.082057 second(s), 61 queries, MemCached On , Gzip On.

Based on XJ-TX X3.5 Licensed

飞流论坛 HanAnalytics icp Astro vhAstro-Theme

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表