Sfoglia il codice sorgente

a11y(能量沙盘): canvas 补 role=img+动态 aria-label,粒子层 aria-hidden(修复 WCAG 1.1.1)

Agnes Agent 2 settimane fa
parent
commit
af3491d879
1 ha cambiato i file con 14 aggiunte e 4 eliminazioni
  1. 14 4
      cfc-frontend/components/wuxing-sandbox.vue

+ 14 - 4
cfc-frontend/components/wuxing-sandbox.vue

@@ -18,11 +18,11 @@
   <view class="sandbox-star" v-if="!isPreview" :style="{height: starHeight}">
     <view class="star-glow-bg"></view>
 
-    <!-- Canvas 2D 五行星图 -->
-    <canvas id="starCanvas" type="2d" style="width:100%;height:100%;position:absolute;top:0;left:0;z-index:1"></canvas>
+    <!-- Canvas 2D 五行星图(绘制五边形+五维能量,读屏以 aria-label 替代非文本图形,修复 WCAG 1.1.1) -->
+    <canvas id="starCanvas" type="2d" role="img" :aria-label="starAriaLabel" style="width:100%;height:100%;position:absolute;top:0;left:0;z-index:1"></canvas>
 
-    <!-- Canvas 粒子动画覆盖层 -->
-    <canvas id="flowCanvas" type="2d" style="width:100%;height:100%;position:absolute;top:0;left:0;z-index:1;pointer-events:none"></canvas>
+    <!-- Canvas 粒子动画覆盖层(纯装饰,读屏忽略) -->
+    <canvas id="flowCanvas" type="2d" aria-hidden="true" style="width:100%;height:100%;position:absolute;top:0;left:0;z-index:1;pointer-events:none"></canvas>
 
     <!-- Canvas 点击感应层 -->
     <view class="canvas-tap-area" @click="onCanvasTap"></view>
@@ -437,6 +437,16 @@ export default {
       return all
       // all = [心->顶, 身->右, 智->右下, 富->左下, 行->左]
     },
+    /** 星图读屏文本替代(修复 WCAG 1.1.1:canvas 无文本替代);preview 模式不画星图,返回空串 */
+    starAriaLabel: function() {
+      if (this.isPreview) return ''
+      var dims = this.sortedDimensions || []
+      var parts = dims.map(function(d) {
+        return (d.name || '') + ' ' + (d.energy || 0)
+      })
+      var overall = this.overallScore || 0
+      return '五维能量星图:' + parts.join('、') + ',综合 ' + overall
+    },
     /** 底部线性维度条(规格 §4.2):身 -> 智 -> 富 -> 行 -> 心 */
     linearDimensions: function() {
       var out = []