Published on

千辛万苦来到卓拉领地

部署

还以为买个域名点点点就完事了没想到这么麻烦。。。。。从 git page 开始疯狂踩坑,迫不得已转战 Vercel,不得不说真的方便,就是有个致命的问题

1709536981013.png

(凌晨四点 git page 你害我害的好苦啊你为什么就是不肯加载 css 样式我心里有事)

vercel 一键部署

特别伟大的发明,直接绑定开发仓库跟分支就可以了,push 新代码直接自动部署,还送你一个免费域名,怎么就被墙了你说说

DNS 解析异常

世界上没有困难的工作只有努力的小狗!于是转战阿里云,买完域名 just 痛苦的开始,实名认证完发现 dns 解析永远 clientHold 😎 -> 😭

域名 quelennui.cn,无法解析 您的域名注册商为 Alibaba Cloud 无法解析的原因为 域名状态为 clientHold,处于该状态的域名会被暂停解析。 解决方法 您需要联系域名注册商解除该状态,请您重新选择“域名”产品进行咨询 推荐您参考以上信息,其与工程师提供的内容一致。

两天尝试未果还是提了工单

1709537273860.png

认证完后把域名过户就可以啦,dns 解析正常

1709537386496.jpg 好!!!!配置转发开始!!!!!

Cloudflare 配置

1709538257318.png

阿里云配置

1709538935616.png

vercel 配置

在 vercel 配置域名

1709537897637.png

最后

会出现重定向次数太多导致页面加载错误的问题,解决方式就是在 cloudflare 设置 SSL/TLS 加密模式

1709539175804.png

很认真的查了一下国内的域名布在国外服务器需不需要进行 ICP 备案,既然香港服务器都可以,那为什么我们。。。。

结论是不用!至少现在是不用!我白手持身份证拍了张神似入狱照的照片了!

上线

鼠标样式适配黑夜模式

效果来自 如何打造一款乖巧的鼠标指针特效

今天一切黑夜模式傻眼了。。。第一次体会到了这么有层次的黑。。。。。黑背景黑鼠标您是怎么想的呢。。。。。

问题不大,开始改造!

这个鼠标样式是由一个 svg 图片作为 cursor,一个半透明圆形追着跑()实现的

先改圆形,在 #cursor 选择器中使用 var(--cursor-color) 来引用这个自定义属性:

#cursor {
  position: fixed;
  width: 16px;
  height: 16px;
  /* 匹配暗夜模式 */
  background: var(--cursor-color);
  border-radius: 8px;
  opacity: 0.25;
  z-index: 10086;
  pointer-events: none;
  transition: 0.2s ease-in-out;
  transition-property: background, opacity, transform;
}

.light 类和 .dark 类中定义一个 --cursor-color 自定义属性,Tailwind 的颜色工具函数 theme() 可以用来来获取颜色值

.light {
  --cursor-color: theme('colors.black');
}

.dark {
  --cursor-color: theme('colors.white');
}

svg 图片的稍微麻烦一点,在代码中是这么引入的(好长)

this.scr.innerHTML = `* {cursor: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8' width='8px' height='8px'><circle cx='4' cy='4' r='4' fill='black' opacity='.5'/></svg>") 4 4, auto}`

首先还是需要配置该主题下对应的颜色

.light {
  --cursor-color: theme('colors.black');
  --svg-color: #000;
}

.dark {
  --cursor-color: theme('colors.white');
  --svg-color: #fff;
}

在 SVG 数据 URL 中使用 fill 属性和 var() 函数来引用这个自定义 CSS 变量,例如

document.body.appendChild((this.scr = document.createElement('style')))
this.scr.innerHTML = `* {cursor: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8' width='8px' height='8px'><circle cx='4' cy='4' r='4' fill='var(--svg-color)' opacity='.5'/></svg>") 4 4, auto}`

切换了一下,发现没有反应……

有反应才怪了吧!你都不需要判断一下主题是否切换了吗!

这个博客框架提供了一个自定义 hookuseTheme()来获取当前的主题颜色,我们就可以根据这个值是否发生变化来动态切换鼠标的颜色

const { theme } = useTheme()

//主题变了鼠标也得变颜色
useEffect(() => {
  const color = theme === 'light' ? 'black' : 'white'
  if (cursorRef.current) {
    //   fill='${color}',必须写单引号
    cursorRef.current.scr.innerHTML = `* {cursor: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8' width='8px' height='8px'><circle cx='4' cy='4' r='4' fill='${color}' opacity='.5'/></svg>") 4 4, auto}`
  }
}, [theme])

然后就可以了!

鼠标颜色异常 again

今天又发现了新的问题,在暗夜模式下,页面刷新后,鼠标的颜色会被重置为黑色(也就是默认状态),因为挂载时的代码并不会获取当前主题再进行判断

useEffect(() => {
  cursorRef.current = new Cursor()
}, [])

这一看多简单,封装下 changeColor 函数刷新后重新改变下就可以了

useEffect(() => {
  cursorRef.current = new Cursor()
  changeColor()
}, [])

但是 😅

image.png

问题不大,拿刚学的 useCallback 包一下,useCallback Hook 会返回一个记忆化的版本的  changeColor  函数,它只在  theme  变化时改变。因此当依赖项可以修改为 changeColor,changeColor 变了说明 theme 就变了

import { useCallback, useEffect, useRef } from 'react'

// ...

const changeColor = useCallback(() => {
  const color = theme === 'light' ? 'black' : 'white'
  if (cursorRef.current) {
    cursorRef.current.scr.innerHTML = `* {cursor: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8' width='8px' height='8px'><circle cx='4' cy='4' r='4' fill='${color}' opacity='.5'/></svg>") 4 4, auto}`
  }
}, [theme])

useEffect(() => {
  changeColor()
}, [changeColor])

useEffect(() => {
  cursorRef.current = new Cursor()
  changeColor()
}, [changeColor])

这下,即使在黑夜模式下刷新也会获取到正确的颜色,正当我准备提代码时:

image.png

这样写每次 change 都是 new 一个 Cursor 啊!

问题不大。。。。再来次逻辑判断。。。。。考虑的还是太少了!

useEffect(() => {
  if (!cursorRef.current) {
    cursorRef.current = new Cursor()
  }
  changeColor()
}, [changeColor])

随机图片固定

封面图是从picsum.photos/搞的,只要传入picsum.photos/200/300,输入图片尺寸就给你随机请求一张图片

但是同一 url 的图片是相同的,也很好解决,picsum.photos/200/300?ran…随便传个参数就行

图片加载异常

开发环境看着可美了一看线上环境轻轻破防了。。。。我图呢我这么大个图呢 😅

既然是线上才会出问题那八成是 webpack 有点毛病,看一下配置

1709548108135.png

哦原来是路径配错了。。。。我的叫 images。。。。那确实是打包不了。。。。。

但是图片作为静态文件保存的话确实很麻烦,图片多了打包体积也会变大,请求的话还得搞个云,结果在 github 上发现了很天才的主意

上传到掘金!