使用动态背景轻松增强您的网站设计!(2)
背景
在上一篇《如何实现一个高科技的官网(一)》中我们探索了网站的整体设计,并讨论了网站视觉呈现和用户体验。
我们最初的内部设计倾向于简约,因此我们开始探索增强整体设计美感的方法。这一探索促成了以下实施。
网站网址:https://infinilabs.com/
如果您有兴趣创建动态背景,本文将指导您从头开始构建具有视觉吸引力且功能齐全的企业网站!
技术堆栈
为什么选择 Next.js?
动态背景解决方案
动态背景可以显著增强视觉吸引力。以下是常见的解决方案:
如何选择?
动态背景代码实现
下面是使用 WebGL 创建动态背景组件的示例,支持 React 和 Tailwind CSS。
1.创建GlobalBackground.tsx:
'use client'
import dynamic from 'next/dynamic'
import { Suspense, useEffect, useState } from 'react'
import { Layout } from './Layout'
const ShaderGradient = dynamic(() => import('shadergradient').then((mod) => mod.ShaderGradient), { ssr: false })
const View = dynamic(() => import('./View').then((mod) => mod.View), {
  ssr: false,
  loading: () => (
    
    
  ),
})
export default function GlobalBackground() {
  const defaultProps: any = {
    control: "props",
    animate: "on",
    brightness: 1.2,
    cDistance: 3.6,
    cameraZoom: 1,
    color1: "#0600B8",
    color2: "#9000E3",
    color3: "#0B004F",
    // embedMode: "off",
    envPreset: "city",
    // gizmoHelper: "hide",
    grain: "off",
    lightType: "3d",
    reflection: 0.1,
    shader: "defaults",
    type: "waterPlane",
    uSpeed: 0.2,
    uTime: 0,
    wireframe: false,
    zoomOut: false,
    toggleAxis: false,
  }
  const [suspenseWebgl, setSuspenseWebgl] = useState(false)
  useEffect(() => {
    const canvas = document.createElement("canvas");
    const gl = canvas.getContext("webgl") || canvas.getContext("experimental-webgl");
    if (gl) {
        console.log('The browser does support WebGL')
        setSuspenseWebgl(true)
    } else {
      console.log('The browser does not support WebGL')
    }
  }, []);
  return (<>
      {suspenseWebgl ? 
        
          
             
         
        : null}
    >)
}2.创建Layout.tsx:
'use client'
import { useRef } from 'react'
import dynamic from 'next/dynamic'
const Scene = dynamic(() => import('./Scene'), { ssr: false })
const Layout = ({ children }: any) => {
  const ref = useRef()
  return (
    
      {children}
       3.创建Scene.tsx:
'use client'
import { ShaderGradientCanvas } from 'shadergradient'
import { Canvas } from '@react-three/fiber'
import { Preload } from '@react-three/drei'
import tunnel from 'tunnel-rat'
const r3f = tunnel()
export default function Scene({ ...props }) {
  // Everything defined in here will persist between route changes, only children are swapped
  return (
    
      {/* @ts-ignore */}
       
  )
}4.创建View.tsx:
'use client'
import { forwardRef, Suspense, useImperativeHandle, useRef } from 'react'
import { OrbitControls, PerspectiveCamera, View as ViewImpl } from '@react-three/drei'
import tunnel from 'tunnel-rat'
const r3f = tunnel()
const Three = ({ children } : any) => {
  return {children} 
}
export const Common = ({ color }: any) => (
  
    {color &&  
)
const View = forwardRef(({ children, orbit, ...props }: any, ref) => {
  const localRef = useRef(null)
  useImperativeHandle(ref, () => localRef.current)
  return (
    <>
      
      
        
          {children}
          {orbit &&  
       
    >
  )
})
View.displayName = 'View'
export { View } 5. 在 app/page.tsx 中使用背景组件:
import GlobalBackground from "@/components/GlobalBackground";
export default function Home() {
  return (
    <>
      6.安装依赖项:
pnpm add @react-three/drei @react-three/fiber shadergradient tunnel-rat
这些步骤可让您实现高性能、响应式的动态背景。根据您的特定需求调整背景类型和交互,让您的网站更具吸引力!
演示
分享
如果你想要配置自己的动态效果,请访问 shadergradient.co 进行自定义,设置完成后将生成的参数复制到 `GlobalBackground.tsx` 的 `defaultProps` 中,即可制作出属于你自己的动态背景。
参考
奖金
**INFINILabs**致力于为开发者和企业提供优质开源工具,活跃科技生态,在维护“analysis-ik”、“analysis-pinyin”等国产热门工具的同时,持续推动优质开源产品的发展。
最近开源的产品和工具:
在 GitHub 上查找所有这些开源项目:https://github.com/infinilabs
如果您给予我们**Star🌟**的支持,我们将不胜感激!