用JavaScript控制雪花位置、速度和透明度,结合requestAnimationFrame实现流畅下雪效果;雨滴需模拟斜向拖尾与溅射反馈;需校准时间戳应对移动端RAF节流。

用 CSS + JavaScript 实现轻量级下雪效果
纯 CSS 无法生成真实物理运动的雪花,必须靠 JS 控制位置、大小、飘落速度和透明度变化。主流做法是动态创建 雨滴视觉上是斜线快速下坠,但直接用 CSS 在 iOS Safari 或部分安卓浏览器中,用户手指触碰屏幕瞬间, 把任意文章或文档内容转换成精美的全屏翻页 HTML 演示文件(幻灯片风格)。当用户发来一篇文章、文档链接、Markdown 内容、或粘贴的文本,并且希望生成演示用的 HTML 时触发。支持任意内容来源:iWiki 链接、KM 链接、本地文件路径、直接粘贴的文本。生成的 HTML 文件保存到本地工作区,并通过企微直接发送给用户。触发词示例:帮我把这篇文章做成PPT、转成演示文档、生成HTML幻灯片、做个演示、转成可以演示的格式、article to deck、make a slide。requestAnimationFrame 驱动动画,避免 setInterval 带来的卡顿或掉帧。top: -10px,随机 left 值Math.random() 控制大小(width/height 在 2–6px)、不透明度(0.5–1)、水平偏移幅度(模拟风)top > window.innerHeight,还要考虑滚动——应以 getBoundingClientRect().bottom 判定是否离开视口
removeChild() 清理已移出的节点,而非隐藏(display: none 仍占 DOM)下雨效果比下雪更难做对的三个点
transform: skewY() 或倾斜 div 会导致边缘锯齿且难以控制密度;真正可用的方案是 SVG 线段或 canvas 绘制,但最简方案仍是 JS +
top,要同时更新 left(模拟风速),例如 left += wind * speed
opacity: 0.3 → 中段 0.8 → 消失前 0,否则像硬编码的直线transform: scale(0.8) 后立刻重置),否则显得悬浮兼容性陷阱:移动端 touchstart 会中断 requestAnimationFrame
requestAnimationFrame 可能被暂停 100–300ms,导致雪花/雨滴「卡住一帧」。这不是 bug,而是浏览器为优化触摸响应做的主动节流。
timestamp,计算实际间隔,动态调整位移增量(deltaY = speed * (now - lastTime) / 16)touchmove 默认行为会影响滑动,所以只在 touchstart 时临时设 body.style.touchAction = 'none',动画帧结束后立刻恢复直接可用的最小化代码片段(无依赖)
getBoundingClientRect()
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










