css噪点效果及简单假进度条记录

前言

本文主要介绍一下css噪点效果及简单假进度条记录,最近阅读了张鑫旭的文章,发现了这两点,这两点真的让我自己实现确实需要查阅资料,本文简单的参考一下张大神的文章,同时也作为自己的积累。文章最后会放上参考文章地址,感兴趣的也可以去原文阅读。

CSS实现噪点效果

实现噪点的原理主要是应用了

 background: repeating-conic-gradient

在径向角度比较小的时候,中间区域的图形由于像素点不足,扭曲在了一起,背景区域就会出现随机点,主要是利用了这个特性。

那么实现黑白随机噪点主要运用了如下代码

.dot {
  width: 200px; height: 200px;
  background: repeating-radial-gradient(#000 0 0.0001%,#fff 0 0.0002%) 60% 60%/3000px 3000px, 
    repeating-conic-gradient(#000 0 0.0001%,#fff 0 0.0002%) 40% 40%/2000px 3000px;
  background-blend-mode: difference;
}

应用一:老照片效果

CSS整块文本溢出省略,ios手机不支持解决方案

前言

今天在移动端开发的时候,遇到一个块级文本省略ios手机无效的问题,这种问题形成的原因是什么呢?chrome里面是正常的,为啥ios里面不行?解决方案又是什么呢?

文本省略回顾

我很早很早之前的文章介绍了文本省略的方式,其中有一行和多行,请看:https://www.haorooms.com/post/css_common

文章的第十二条。

但是单行文本省略在如下结构里面,特别是在ios手机里面

Emoji表情处理二

前言

两个emoji表情可以拼接成一个emoji,这就给我们处理和截取字符串增加了难度,之前我有文章,截取emoji表情,具体可以看一下。

拼接规则如下:

👩 + ✈️ → 👩‍✈️
👨 + 💻 → 👨‍💻
👰 + ♂️ → 👰‍♂️
🐻 + ❄️ → 🐻‍❄️
🏴 + ☠️ → 🏴‍☠️
🏳️ + 🌈 → 🏳️‍🌈
👨 + 🦰 → 👨‍🦰 (有意思的是:发色是通过 ZWJ 组合基础 emoji 实现,而肤色则是用肤色修饰符实现)
👨🏻 + 🤝 + 👨🏼 → 👨🏻‍🤝‍👨🏼
👨 + ❤️ + 👨 → 👨‍❤️‍👨
👨 + ❤️ + 💋 + 👨 → 👨‍❤️‍💋‍👨
👨 + 👨 + 👧 → 👨‍👨‍👧
👨 + 👨 + 👧 + 👧 → 👨‍👨‍👧‍👧

正则零宽断言引发ios手机webview白屏问题讨论及解决

前言

正则表达式零宽断言,导致ios手机webview白屏问题,我也是头一次遇到,主要原因是一些零宽断言在iOS WebView中不被支持,编译报错直接引起手机白屏。解决办法主要是使用替代方案来支持。

零宽断言

chatgpt,madejourney(简称MJ),stable diffusion(简称SD),等智能AI的应用特别流行,我们看看chatgpt是如何定义零宽断言的。

零宽断言是正则表达式中的一种特殊语法,用于在匹配字符串时,指定一个位置,该位置前或后必须满足特定的条件。零宽断言不会消耗匹配的字符,因此也称为“零宽度”。

零宽断言分为向前零宽断言和向后零宽断言,分别用于指定当前位置之前或之后的条件。

向前零宽断言的语法为:(?<=pattern),其中pattern为一个正则表达式,表示当前位置之前必须匹配pattern才能继续匹配。

向后零宽断言的语法为:(?=pattern),其中pattern为一个正则表达式,表示当前位置之后必须匹配pattern才能继续匹配。

例如,正则表达式/(?<=hello)world/可以匹配字符串“helloworld”,但不会匹配“world”或者“hello world”。

零宽断言在正则表达式中非常有用,可以用于复杂的匹配场景,例如匹配特定格式的日期、时间、邮箱地址等。但是,零宽断言也可能会导致正则表达式性能下降,因此在使用时需要谨慎。

useGetState自定义hooks解决useState 异步回调获取不到最新值

前言

之前文章也有介绍给useState,包括手写一个useState,但是都没有介绍useState 异步回调获取不到最新值的问题,今天简单聊一聊。

setState 的两种传参方式

1、直接传入新值 setState(options);

const [state, setState] = useState(0);
setState(state + 1);

2、传入回调函数 setState(callBack);

const [state, setState] = useState(0);
setState((prevState) => prevState + 1); // prevState 是改变之前的 state 值,return 返回的值会作为新状态覆盖 state 值