import { View, Text, Image } from '@tarojs/components' import { useState, useRef } from 'react' import Taro from '@tarojs/taro' import { Template } from '../../store/types' import './index.css' interface TemplateCardProps { template: Template onClick: (template: Template) => void } export default function TemplateCard({ template, onClick }: TemplateCardProps) { const [splitPosition, setSplitPosition] = useState(50) // 分割线位置百分比 const [isDragging, setIsDragging] = useState(false) const [containerInfo, setContainerInfo] = useState(null) const containerRef = useRef(null) const handleClick = () => { if (!isDragging) { onClick(template) } } // 获取容器信息 const getContainerInfo = () => { return new Promise((resolve) => { const query = Taro.createSelectorQuery() query.select('.merged-image-container').boundingClientRect((rect) => { if (rect) { setContainerInfo(rect) resolve(rect) } }).exec() }) } // 处理触摸开始 const handleTouchStart = async (e: any) => { e.stopPropagation() setIsDragging(true) // 获取容器信息用于后续计算 await getContainerInfo() } // 处理触摸移动 const handleTouchMove = (e: any) => { if (!isDragging || !containerInfo) return e.stopPropagation() const touch = e.touches[0] if (!touch) return // 计算触摸点相对于容器的位置 const touchX = touch.clientX - containerInfo.left const percentage = Math.max(10, Math.min(90, (touchX / containerInfo.width) * 100)) setSplitPosition(percentage) } // 处理触摸结束 const handleTouchEnd = (e: any) => { e.stopPropagation() setTimeout(() => setIsDragging(false), 100) // 延迟重置,避免触发点击 } return ( {/* 合成对比图片区域 */} {/* 左半部分 - 原图的左半部分 */} {/* 右半部分 - 效果图的右半部分 */} {/* 可拖拽的分割线 */} {/* 动态标签 */} 原图 效果 {/* 模板信息 */} {template.name} {template.description} {template.tags.map((tag, index) => ( {tag} ))} {template.creditCost}积分 ) }