纯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开发还是比较震撼的。后续会有更多的功能开发出来,各位敬请期待,有建议可以评论一下。

相关推荐
跟着珅聪学java2 小时前
React 菜鸟开发教程
react
前端的阶梯2 小时前
关于Trae、Cursor、Kiro AI的工具大比拼
ai编程·cursor
猫头虎8 小时前
MiniMax M2.1与GLM4.7的对比分析:哪个更强?
开源·prompt·aigc·开放原子·ai编程·ai写作·开源协议
星火飞码iFlyCode8 小时前
iFlyCode实践规范驱动开发(SDD):招考平台报名相片质量抽检功能开发实战
java·前端·python·算法·ai编程·科大讯飞
程序员码歌9 小时前
短思考第264天,每天复盘5分钟,胜过你盲目努力1整年(2)
前端·后端·ai编程
我家领养了个白胖胖1 天前
MCP模型上下文协议 Model Context Protocol & 百度地图MCP开发
java·后端·ai编程
陈佬昔没带相机1 天前
国产AI编程IDE的Plan模式,对比Cursor差别在哪?
ai编程
这是你的玩具车吗1 天前
转型成为AI研发工程师之路
前端·ai编程
和平hepingfly1 天前
Claude Code 效率翻倍指南:你可能错过的10个隐藏更新
ai编程