纯AI开发能做到什么地步 他心游 经典博客项目

源代码仓库

惜哉剑气疏/programs_0

重定向(CloudFlare部署,检查一下自己的网行不行)

他心游

开发过程经验

本项目用的是ChatGPT+VSCode内置AITRAE 开发。前者负责搭建总的项目结构,我们只需要给它对应的技术框架以及一些基本的功能它就可以自动的生成项目文件;后者就主要负责细化功能设置网页样式等等,你只需要输入你的需求它就可以自动识别项目文件进行更改。当然,你全程用TRAE写项目也是可以的,就是有时候会突然卡死或者应用不了;全程使用ChatGPT 就不太建议了,反正我用的时候它有时会吞掉我之前的功能代码,记忆性有点不行。当然,目前来看AI并不是万能的,有时候怎么改也改不对,除了保持耐心之外,我们还需要有一点看懂代码的基础,以便在AI改不动是我们自己上。

另外,我把之前写的两篇文章以及部分剑来小说放在了网站上,以后发的文章大概率也会在网站上更新,如果想看的话可以去我的网站换个心情。如果有机会的话,我以后会做个后端把我的一些实践项目放上来应用,比如一些模型什么的,有兴趣的不妨留个标记。

核心功能

1.主题切换

本项目使用了五个主题,分别是***【武侠水墨】、【赛博朋克】、【自然风光】、【泪如雨崩】、【这是我家】***。可以在右上角切换主题,改变观看体验:

这个纯黑白:

这个比较闪:

这个比较简约:

这个比较抑郁:

这个比较可爱:

还有一些细节各位可以自行探索。实现这个功能最重要的就是设置主题颜色的全局变量,其他组件的样式中调用这些颜色样式就可以了。

2.归档

只是一个下拉列表:

3.写文章

写文章界面是加了很多功能的,图中的功能按钮都可以在使用。另外为了方便,在CSDN中的写文章界面一键复制粘贴过来也是可以直接继承格式的(但是图片得一个个粘贴过来)。不过目前是只能我存在网站上,你们只能存在本地保存为JSON文件格式,以后估计也是我一个人发

4.关于

这个界面也比较简单,就一个主题轮播。

5.粒子

背景图之上会有一个个白点,会随着时间变化位置。在鼠标保持移动并且移动到粒子附近的时候,粒子会四散而开,,并且发亮(效果较弱)。

复制代码
// src/components/BackgroundParticles.jsx
import React, { useState, useEffect, useRef } from "react";

const BackgroundParticles = () => {
  const [mousePosition, setMousePosition] = useState({ x: -1000, y: -1000 });
  const [isMouseActive, setIsMouseActive] = useState(false);
  const containerRef = useRef(null);
  
  // 预计算粒子的动画参数,避免每次渲染重新计算
  const particles = useRef(
    Array.from({ length: 70 }, (_, i) => {
      const size = Math.random() * 4 + 4;
      const left = Math.random() * 100;
      const top = Math.random() * 100;
      const opacity = Math.random() * 0.5 + 0.5;
      const duration = Math.random() * 7 + 5; // 2-7秒,更快!
      const delay = Math.random() * 1; // 0-1秒延迟
      
      // 预计算动画关键帧的偏移量,确保每次渲染都一致
      const offsets = {
        x25: (Math.random() - 0.5) * 15,
        y25: (Math.random() - 0.5) * 15,
        x50: (Math.random() - 0.5) * 10,
        y50: (Math.random() - 0.5) * 10,
        x75: (Math.random() - 0.5) * 15,
        y75: (Math.random() - 0.5) * 15
      };
      
      return {
        id: i,
        size,
        left,
        top,
        opacity,
        duration,
        delay,
        offsets
      };
    })
  ).current;

  // 鼠标移动事件处理
  useEffect(() => {
    const handleMouseMove = (e) => {
      if (containerRef.current) {
        const rect = containerRef.current.getBoundingClientRect();
        // 转换为相对于容器的百分比坐标
        const xPercent = ((e.clientX - rect.left) / rect.width) * 100;
        const yPercent = ((e.clientY - rect.top) / rect.height) * 100;
        setMousePosition({ x: xPercent, y: yPercent });
        setIsMouseActive(true);
        
        // 重置鼠标活动状态
        clearTimeout(window.mouseTimeout);
        window.mouseTimeout = setTimeout(() => {
          setIsMouseActive(false);
          setMousePosition({ x: -1000, y: -1000 });
        }, 2000);
      }
    };

    window.addEventListener('mousemove', handleMouseMove);
    return () => {
      window.removeEventListener('mousemove', handleMouseMove);
      clearTimeout(window.mouseTimeout);
    };
  }, [containerRef]);

  return (
    <div 
      ref={containerRef}
      style={{ 
        position: "fixed", 
        top: 0, 
        left: 0, 
        width: "100vw", 
        height: "100vh", 
        zIndex: 0,
        overflow: "hidden",
        background: "transparent",
        margin: 0,
        padding: 0
      }}
    >
      {particles.map(particle => {
        // 计算粒子到鼠标的距离
        const dx = particle.left - mousePosition.x;
        const dy = particle.top - mousePosition.y;
        const distance = Math.sqrt(dx * dx + dy * dy);
        
        // 计算扰动强度(距离越近,扰动越强)
        const maxDistance = 10; // 扩大影响范围
        const isAffected = isMouseActive && distance < maxDistance;
        let scale = 1;
        let glowIntensity = 1;
        
        if (isAffected) {
          // 扰动强度随距离衰减
          const intensity = 1 - (distance / maxDistance);
          scale = 1 + intensity * 1.2; // 最大放大到2.2倍
          glowIntensity = 1 + intensity * 9; // 最大发光强度增加8倍
        }
        
        // 计算排斥偏移量
        let repulsionOffsetX = 0;
        let repulsionOffsetY = 0;
        
        if (isAffected) {
          const intensity = 1 - (distance / maxDistance);
          const angle = Math.atan2(dy, dx);
          const repulsionDistance = intensity * 8; // 大幅增强排斥距离
          repulsionOffsetX = Math.cos(angle) * repulsionDistance;
          repulsionOffsetY = Math.sin(angle) * repulsionDistance;
        }
        
        return (
          <div
            key={particle.id}
            style={{
              position: "absolute",
              width: `${particle.size}px`,
              height: `${particle.size}px`,
              left: `${particle.left}%`,
              top: `${particle.top}%`,
              background: "rgba(255, 255, 255, 0.8)",
              borderRadius: "50%",
              opacity: particle.opacity,
              pointerEvents: "none",
              zIndex: 0,
              boxShadow: `0 0 ${particle.size * 2 * glowIntensity}px rgba(255, 255, 255, ${0.8 * glowIntensity})`,
              // 基础浮动动画 + 鼠标扰动偏移
              transform: `scale(${scale})`,
              animation: `float${particle.id} ${particle.duration}s ease-in-out infinite`,
              animationDelay: `${particle.delay}s`,
              // 专门的排斥动画
              '--repel-x': `${repulsionOffsetX}px`,
              '--repel-y': `${repulsionOffsetY}px`,
              // 鼠标扰动效果 - 更快响应
              transition: 'transform 0.1s ease-out, box-shadow 0.1s ease-out',
            }}
          />
        );
      })}
      
      {/* CSS动画定义 - 使用预计算的固定值,并添加排斥效果 */}
      <style>
        {`
          ${particles.map(particle => `
            @keyframes float${particle.id} {
              0% {
                transform: translate(var(--repel-x, 0), var(--repel-y, 0)) translate(0, 0) scale(1);
              }
              25% {
                transform: translate(var(--repel-x, 0), var(--repel-y, 0)) translate(${particle.offsets.x25}px, ${particle.offsets.y25}px) scale(1.05);
              }
              50% {
                transform: translate(var(--repel-x, 0), var(--repel-y, 0)) translate(${particle.offsets.x50}px, ${particle.offsets.y50}px) scale(1);
              }
              75% {
                transform: translate(var(--repel-x, 0), var(--repel-y, 0)) translate(${particle.offsets.x75}px, ${particle.offsets.y75}px) scale(0.95);
              }
              100% {
                transform: translate(var(--repel-x, 0), var(--repel-y, 0)) translate(0, 0) scale(1);
              }
            }
          `).join('')}
        `}
      </style>
      
      {/* 调试信息 */}
      <div style={{
        position: "absolute",
        top: "10px",
        left: "10px",
        color: "white",
        background: "rgba(255,255,255,1)",
        padding: "5px 10px",
        borderRadius: "5px",
        fontSize: "12px"
      }}>
        快速动画 + 真正排斥效果
        {isMouseActive && " - 鼠标活跃中"}
      </div>
    </div>
  );
};

export default BackgroundParticles;

差不多就这么多了,第一次用AI开发还是比较震撼的。后续会有更多的功能开发出来,各位敬请期待,有建议可以评论一下。

相关推荐
皮卡丘不断更1 小时前
告别“金鱼记忆”:SwiftBoot v0.1.5 如何给 AI 装上“永久项目大脑”?
人工智能·系统架构·ai编程
JMchen1233 小时前
AI编程与软件工程的学科融合:构建新一代智能驱动开发方法学
驱动开发·python·软件工程·ai编程
全栈探索者5 小时前
@Component + struct = 你的新函数组件——React 开发者的鸿蒙入门指南(第 2 期)
react·harmonyos·arkts·前端开发·deveco studio·鸿蒙next·函数组件
心疼你的一切6 小时前
代码革命:CANN加速的AI编程助手实战
数据仓库·深度学习·aigc·ai编程·cann
kjkdd6 小时前
5. LangChain设计理念和发展历程
python·语言模型·langchain·ai编程
程序员老刘·20 小时前
Android Studio Otter 3 发布:日常开发选AS还是Cursor?
flutter·android studio·ai编程·跨平台开发·客户端开发
奔跑的呱呱牛1 天前
viewer-utils 图片预览工具库
javascript·vue·react
HetFrame1 天前
一种纯前端实现 Markdown 内容即时分享的思路
html·react·链接·markdown·工具
JMchen1231 天前
AI编程范式转移:深度解析人机协同编码的实战进阶与未来架构
人工智能·经验分享·python·深度学习·架构·pycharm·ai编程