当前位置: 首页 > news >正文

网站开发常用小图片ps做网站需注意

网站开发常用小图片,ps做网站需注意,如何做静态网页,城建设投资公司网站系统简介 : 该系统为 react TS tailwindcss photo-sphere-viewer 的响应式 VR360 项目, 上传图片后可实现手动旋转 3D 图片,还包含了 6 贴图立方体展示和 6 贴图动态展示 目前为单图切换模式 全部页面概览 这是单面VR页面的代码(gif展示页面) import React, { useRef, u…

系统简介 : 该系统为 react + TS + tailwindcss + photo-sphere-viewer 的响应式 VR360 项目, 上传图片后可实现手动旋转 3D 图片,还包含了 6 贴图立方体展示和 6 贴图动态展示

目前为单图切换模式

全部页面概览

这是单面VR页面的代码(gif展示页面)

import React, { useRef, useState, useEffect } from 'react'
import { Viewer } from 'photo-sphere-viewer'
import 'photo-sphere-viewer/dist/photo-sphere-viewer.css'import { PlusOutlined } from '@ant-design/icons'
import { Image, Upload } from 'antd'
import type { GetProp, UploadFile, UploadProps } from 'antd'type FileType = Parameters<GetProp<UploadProps, 'beforeUpload'>>[0]const getBase64 = (file: FileType): Promise<string> =>new Promise((resolve, reject) => {const reader = new FileReader()reader.readAsDataURL(file)reader.onload = () => resolve(reader.result as string)reader.onerror = error => reject(error)})export default function VrUploader () {const [selectedFileUrl, setSelectedFileUrl] = useState('')const [confirmedImageUrl, setConfirmedImageUrl] = useState('')const viewerRef = useRef<HTMLDivElement | null>(null)const viewerInstance = useRef<Viewer | null>(null)const [previewOpen, setPreviewOpen] = useState(false)const [previewImage, setPreviewImage] = useState('')const [fileList, setFileList] = useState<UploadFile[]>([])const handlePreview = async (file: UploadFile) => {if (!file.url && !file.preview) {file.preview = await getBase64(file.originFileObj as FileType)}setPreviewImage(file.url || (file.preview as string))setPreviewOpen(true)}const handleChange: UploadProps['onChange'] = ({ fileList: newFileList }) => {// 始终只保留最后一张图片const latestFileList = newFileList.slice(-1)setFileList(latestFileList)if (latestFileList.length > 0) {const file = latestFileList[0].originFileObj as Fileconst url = URL.createObjectURL(file)setSelectedFileUrl(url)} else {setSelectedFileUrl('')setConfirmedImageUrl('')}}const uploadButton = (<button style={{ border: 0, background: 'none' }} type='button'><PlusOutlined /><div style={{ marginTop: 8 }}>上传</div></button>)const handleConfirm = () => {if (selectedFileUrl) {setConfirmedImageUrl(selectedFileUrl)}}const handleCancel = () => {setFileList([])setSelectedFileUrl('')setConfirmedImageUrl('')// 销毁 Viewer 实例并清空引用if (viewerInstance.current) {viewerInstance.current.destroy()viewerInstance.current = null}}const [isRetote, setIsRetote] = useState(false) // 是否旋转const handleRetote = () => {setIsRetote(prev => {const newState = !previf (viewerInstance.current) {if (newState) {viewerInstance.current.startAutorotate()} else {viewerInstance.current.stopAutorotate()}}return newState})}useEffect(() => {if (confirmedImageUrl && viewerRef.current) {if (viewerInstance.current) {viewerInstance.current.setPanorama(confirmedImageUrl)} else {viewerInstance.current = new Viewer({container: viewerRef.current, //必---html元素信息panorama: confirmedImageUrl, //必---图片路径description: '<p>This is a description.</p>'})}}}, [confirmedImageUrl])return (<div className='p-4 cursor-pointer'><div className='bg-gray-100 flex items-center justify-center w-100'><div className='min-w-[70%]'><h2 className='text-2xl font-bold mb-4 mt-4'><p>单图上传</p><p>VR 生成(photo-sphere-viewer)</p></h2><div className='grid grid-cols-2 md:grid-cols-3 gap-4 mb-4'><Uploadaction='https://660d2bd96ddfa2943b33731c.mockapi.io/api/upload'listType='picture-card'fileList={fileList}onPreview={handlePreview}onChange={handleChange}>{fileList.length >= 8 ? null : uploadButton}</Upload>{previewImage && (<ImagewrapperStyle={{ display: 'none' }}preview={{visible: previewOpen,onVisibleChange: visible => setPreviewOpen(visible),afterOpenChange: visible => !visible && setPreviewImage('')}}src={previewImage}/>)}</div>{/* 按钮区域 */}<div className='flex w-full justify-between'><buttononClick={handleConfirm}disabled={!selectedFileUrl}className={`px-4 py-2 rounded-md text-white ${selectedFileUrl? 'bg-blue-600 hover:bg-blue-700': 'bg-gray-400 cursor-not-allowed'}`}>生成 VR</button><buttononClick={handleRetote}className={`px-4 py-2 rounded-md text-white bg-green-600 hover:bg-green-700`}>{!isRetote ? '开始巡检' : '停止巡检'}</button><buttononClick={handleCancel}className={`px-4 py-2 rounded-md text-white bg-red-600 hover:bg-red-700`}>重置图片</button></div>{/* VR区域 */}<divclassName='h-[50vh] w-full bg-black mt-6 rounded overflow-hidden mb-6'ref={viewerRef}>{!selectedFileUrl && (<p className='text-white p-4'>请上传一张比例为2:1 / 圆形图</p>)}</div></div></div></div>)
}

完整代码 : GitHub - hyy20000804/Img-to-VR: 响应式图片转VR系统

http://www.dtcms.com/a/408764.html

相关文章:

  • 中国建设银行有哪些招聘网站旅游网站建设要求
  • 长清网站建设价格公司网站建设怎么选择
  • 苏州无锡市住房和城乡建设局网站网页设计风格
  • 苏州高端网站建设机构网站建设先有域名然后呢
  • 如何注册网站免费注册网络安全十大公司
  • 大同市建设工程招标投标网站有什么公司做网站好
  • 企业站官方网站常州手机网站开发
  • 郑州高端网站建设团队centos 部署wordpress
  • 网页设计网站方案网店装修教程免费模板
  • 湘潭市建设网站wordpress先页面再首页
  • 网站站内logo怎么做长沙哪家网站公司
  • 电子商务网站建设考试简答题平台网站怎么做seo
  • 网站页面设计具体步骤wordpress媒体库在哪个文件夹
  • 济源网站维护百度账号登录官网
  • 网站编辑前端可以做吗兰州最好的互联网公司
  • 网站开发和浏览器兼容问题wordpress 免费摄影主题
  • 南宁隆安网站建设网络运营
  • 网站一定要备案郑州航海路网站建设
  • 一般网站建设的流程图注册一个公司一年费用
  • 如何删除网站后台的文章上海网站建设的企
  • 培训人员网站建设公司有必要建设网站吗
  • 吉林省交通建设质量监督站网站聊城大学附属小学规划建设
  • 站酷的网址汕头企业做网站
  • 做彩票网站能挣到钱吗台州建网站公司
  • 咸阳做网站价格课件ppt免费下载
  • 响应式布局网站建设盐城网站建设0515icp
  • 做查询快递单号的网站多少钱四川省建设行业数据共享平台官网
  • 网站制作内容文案怎样加入好大夫网站做医生
  • 网站开发asp.net昆明网站建设昆明
  • 上海高端网站开发站霸网络推广普通话手抄报模板