Files
mini-viewer/pages/viewer/viewer.wxml
T
2026-09-29 01:50:11 +08:00

115 lines
4.2 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<view class="page">
<!-- ===== 预览区 ===== -->
<view class="stage" id="stageBox">
<canvas
id="spineCanvas"
class="stage-canvas"
type="webgl"
bindtouchstart="onTouchStart"
bindtouchmove="onTouchMove"
bindtouchend="onTouchEnd"
bindtouchcancel="onTouchEnd"
></canvas>
<!-- 空状态 -->
<view wx:if="{{status === 'idle'}}" class="stage-mask">
<view class="empty-icon">🎬</view>
<view class="empty-title">Spine 画面预览</view>
<view class="empty-sub">小程序版本可支持 Spine 4.2 导出的 .skel / .atlas / .png</view>
<view class="empty-tip">先把 .skel / .atlas / 图片发到「文件传输助手」,再在下方一次选中即可;文件只在本地解析,不会上传</view>
</view>
<!-- 加载中 -->
<view wx:if="{{status === 'loading'}}" class="stage-mask">
<view class="empty-icon">⏳</view>
<view class="empty-sub">{{statusText}}</view>
</view>
<!-- 出错 -->
<view wx:if="{{status === 'error'}}" class="stage-mask">
<view class="empty-icon">⚠️</view>
<view class="empty-title error">加载失败</view>
<view class="empty-sub">{{errorMsg}}</view>
</view>
<!-- 右上角信息徽标 -->
<view wx:if="{{status === 'ready'}}" class="stage-badge">{{info}}</view>
</view>
<!-- ===== 控制面板 ===== -->
<view class="sheet">
<!-- 画布下方:手势提示 + 缩放 -->
<view wx:if="{{status === 'ready'}}" class="tool-row">
<view class="tool-hint">单指拖动平移 · 双指捏合缩放</view>
<view class="zoom-group">
<view class="zoom-btn" bindtap="zoomOut">-</view>
<text class="zoom-val">{{scalePercent}}%</text>
<view class="zoom-btn" bindtap="zoomIn">+</view>
<view class="zoom-reset" bindtap="resetView">重置</view>
</view>
</view>
<!-- 已选文件 -->
<view wx:if="{{pickedCount}}" class="section">
<view wx:if="{{pickedCount}}" class="chips">
<view wx:for="{{pickedFiles}}" wx:key="id" class="chip chip-{{item.kind}}">
<text class="chip-dot"></text>
<text class="chip-name">{{item.name}}</text>
</view>
</view>
<view wx:if="{{missingText}}" class="missing">{{missingText}}</view>
</view>
<!-- 播放 -->
<view wx:if="{{animations.length}}" class="section">
<view class="section-head">
<view class="section-title">播放</view>
<picker class="anim-picker" mode="selector" range="{{animations}}" value="{{animIndex}}" bindchange="onAnimChange">
<view class="select">
<text class="select-label">{{animations[animIndex]}}</text>
<text class="select-arrow">▾</text>
</view>
</picker>
</view>
<view class="segment">
<view class="seg {{playing ? 'on' : ''}}" bindtap="togglePlay">{{playing ? '⏸ 暂停' : '▶ 播放'}}</view>
<view class="seg {{loop ? 'on' : ''}}" bindtap="toggleLoop">🔁 循环</view>
<view class="seg {{premultiplied ? 'on' : ''}}" bindtap="togglePremultiplied">✨ 预乘</view>
</view>
</view>
<!-- 参数 -->
<view wx:if="{{animations.length}}" class="section">
<view class="section-title">参数</view>
<view class="param">
<text class="param-name">速度</text>
<slider
class="param-slider"
min="0.1" max="3" step="0.1" value="{{speed}}"
activeColor="#f2353b" backgroundColor="#2c2c35" block-color="#f2353b" block-size="16"
bindchange="onSpeedChange"
/>
<text class="param-val">{{speed}}x</text>
</view>
</view>
<!-- 选择文件:固定放在最下面,随时能重新选 -->
<view class="section pick-section">
<view class="pick-row">
<view wx:if="{{pickedCount}}" class="clear-btn" bindtap="clearFiles">清空已选</view>
<button class="pick-btn" bindtap="chooseFiles">
<text class="pick-text">{{pickedCount ? '重新选择文件' : '选择文件'}}</text>
</button>
</view>
<view class="pick-sub">可一次选中多个文件 · .skel / .atlas / .png</view>
</view>
</view>
</view>