two_icons.h

  name="google_ads_frame" marginwidth="0" marginheight="0" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-5572165936844014&dt=1194442938015&lmt=1194190197&format=336x280_as&output=html&correlator=1194442937843&url=file%3A%2F%2F%2FC%3A%2FDocuments%2520and%2520Settings%2Flhh1%2F%E6%A1%8C%E9%9D%A2%2FCLanguage.htm&color_bg=FFFFFF&color_text=000000&color_link=000000&color_url=FFFFFF&color_border=FFFFFF&ad_type=text&ga_vid=583001034.1194442938&ga_sid=1194442938&ga_hid=1942779085&flash=9&u_h=768&u_w=1024&u_ah=740&u_aw=1024&u_cd=32&u_tz=480&u_java=true" frameborder="0" width="336" scrolling="no" height="280" allowtransparency="allowtransparency"> #define IDM_EXIT           100
#define IDM_TEST           200
#define IDM_ABOUT          301

LRESULT CALLBACK WndProc  (HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK About    (HWND, UINT, WPARAM, LPARAM);

<div aria-label="Mini Guide Event" class="MiniGuide-module_event-container__l0ARm"><div class="MiniGuideEventContainer-module_container__ZsATE"><div data-testid="playback-bar"><div class=""><div class="MiniGuideProgramInfo-module_top-section__Y1PkN"><div class="MiniGuideProgramInfo-module_airing-texts__tcazb"><p class="text-module_label-bold__M41Im">On Now</p><p class="text-module_label-bold__M41Im MiniGuideProgramInfo-module_airing-text__uo676">3:45AM</p></div><div class="MiniGuideProgramInfo-module_icons__REiHE"></div><p class="text-module_label__t7gPh MiniGuideProgramInfo-module_remaining-viewing-time__VRFbi"></p></div><h2 class="text-module_title-bold__FlvaL MiniGuideProgramInfo-module_program-title__DTcGi">This is BBC Two</h2></div></div><div data-testid="program-info" class="MiniGuideEventContainer-module_playback-bar__h4ooX"><div class="PlaybackBar-module_playback-bar-container__Y4QwP" role="slider" aria-valuemin="0" aria-valuemax="100" aria-valuenow="57" draggable="false" title="playback-bar"><div class="PlaybackBar-module_overflow-parent__74Zdz"><div class="PlaybackBar-module_live-time__7mcVw" title="live time progress" style="right: 43%;"></div><div class="PlaybackBar-module_watched-time__UV7Zr PlaybackBar-module_current-channel-watched__9cEOb" title="watched time progress" style="right: 43%;"></div></div></div></div><div data-testid="buttons"><div><div class="MiniGuideButtons-module_button-group-left__fAP17"><div class="ButtonWithIcon-module_button-container__BoLM5"><button aria-selected="false" data-testid="on-info-press" aria-label="Info" class="MiniGuideButtons-module_info-button__BBN3W ButtonWithIcon-module_button__JTAPF ButtonWithIcon-module_horizontal-button__U2gUS ButtonWithIcon-module_icon-left__O5mvl"><span class="ButtonWithIcon-module_button-icon-container__QW17d"><svg aria-label="Info & Episodes button" class="SVGSprite-module_svg__yApFJ ButtonWithIcon-module_icon__lumo4 Icon-module_xs__hTiPr" height="24" viewBox="0 0 24 24"><use xlink:href="#etv-icon-general-info"></use></svg></span><p class="text-module_nav-bold__jWQUN"><span>Info & Episodes</span></p></button></div><span class=""><div class="ButtonWithIcon-module_button-container__BoLM5"><button aria-selected="false" data-testid="on-restart-press" aria-label="Restart" class="MiniGuideButtons-module_restart-button__aYU5H ButtonWithIcon-module_button__JTAPF ButtonWithIcon-module_horizontal-button__U2gUS ButtonWithIcon-module_icon-left__O5mvl"><span class="ButtonWithIcon-module_button-icon-container__QW17d"><svg aria-label="Restart button" class="SVGSprite-module_svg__yApFJ ButtonWithIcon-module_icon__lumo4 Icon-module_xs__hTiPr" height="24" viewBox="0 0 24 24"><use xlink:href="#etv-icon-general-restart"></use></svg></span><p class="text-module_nav-bold__jWQUN"><span>Restart</span></p></button></div></span></div><div class="MiniGuideButtons-module_button-group-right__tVEBa"><div data-testid="on-subs-press" class="MiniGuideButtons-module_subs__Z2o2s"><div class="ButtonWithIcon-module_button-container__BoLM5"><button aria-selected="false" data-testid="button-elem" aria-label="Subtitles" class="MiniGuideButtons-module_squared-btn__Hm4nR ButtonWithIcon-module_button__JTAPF ButtonWithIcon-module_horizontal-button__U2gUS ButtonWithIcon-module_icon-left__O5mvl" aria-pressed="true"><span class="ButtonWithIcon-module_button-icon-container__QW17d"><svg aria-label="undefined button" class="SVGSprite-module_svg__yApFJ ButtonWithIcon-module_icon__lumo4 Icon-module_xs__hTiPr" height="24" viewBox="0 0 24 24"><use xlink:href="#etv-icon-airing-s_circled_enabled"></use></svg></span></button></div></div><div data-testid="on-ad-press"><div class="ButtonWithIcon-module_button-container__BoLM5"><button aria-selected="true" data-testid="button-elem" aria-label="Audio Description" class="MiniGuideButtons-module_squared-btn__Hm4nR ButtonWithIcon-module_focus__yRt-m ButtonWithIcon-module_button__JTAPF ButtonWithIcon-module_horizontal-button__U2gUS ButtonWithIcon-module_icon-left__O5mvl" aria-pressed="false" data-focused="true"><span class="ButtonWithIcon-module_button-icon-container__QW17d"><svg aria-label="undefined button" class="SVGSprite-module_svg__yApFJ ButtonWithIcon-module_icon__lumo4 Icon-module_xs__hTiPr" height="24" viewBox="0 0 24 24"><use xlink:href="#etv-icon-airing-ad_circled"></use></svg></span></button><p class="text-module_label-bold__M41Im ButtonWithIcon-module_button-title-tooltip__m9ABw ButtonWithIcon-module_button-tooltip-visible__pB1ra">Audio Description</p></div></div></div></div></div></div></div>
最新发布
10-23
你提供的是一段 **HTML 结构代码**,看起来是某个电视或流媒体平台(如 BBC iPlayer)的“迷你节目指南”组件(Mini Guide),其中包含一个 **播放进度条(Playback Bar)**,用于显示当前节目的播放进度。 你的问题是: > 如何从这段 HTML 中提取并理解“**进度条如何显示当前进度**”? 我们将逐层解析这个结构,并说明它是**如何通过 CSS 和 ARIA 属性来展示当前播放进度的**。 --- ## ✅ 一、整体结构分析 ```html <div aria-label="Mini Guide Event" class="..."> <!-- 节目信息 --> <div data-testid="playback-bar">...</div> <!-- 播放进度条 --> <div data-testid="program-info" class="..."> <div class="PlaybackBar-module_playback-bar-container__Y4QwP" role="slider" aria-valuemin="0" aria-valuemax="100" aria-valuenow="57" title="playback-bar"> <div class="PlaybackBar-module_overflow-parent__74Zdz"> <!-- 实时直播位置 --> <div class="PlaybackBar-module_live-time__7mcVw" style="right: 43%;"></div> <!-- 已观看部分 --> <div class="PlaybackBar-module_watched-time__UV7Zr ..." style="right: 43%;"></div> </div> </div> </div> <!-- 控制按钮 --> <div data-testid="buttons">...</div> </div> ``` --- ## ✅ 二、关键点:进度条是如何显示“当前进度”的? ### 🔹 1. 使用 `aria-valuenow="57"` 表示当前进度为 57% ```html role="slider" aria-valuemin="0" aria-valuemax="100" aria-valuenow="57" ``` - 这些是 **WAI-ARIA 标准属性**,用于辅助技术(如屏幕阅读器)理解这是一个可交互的滑块控件。 - 当前值为 `57`,表示节目已播放了总时长的 **57%**。 - 即使没有可见文字,盲人用户也能听到:“播放进度条,当前值 57,最大 100”。 ✅ **这是语义化的方式表达“当前进度”** --- ### 🔹 2. 使用 CSS 的 `style="right: 43%;"` 控制视觉进度 ```html <div class="PlaybackBar-module_live-time__7mcVw" style="right: 43%;"></div> <div class="PlaybackBar-module_watched-time__UV7Zr" style="right: 43%;"></div> ``` #### 📌 关键逻辑: - 进度条是从右向左增长的(使用 `right: xx%` 而不是 `left` 或 `width`) - `right: 43%` 表示该元素距离右边有 43% 的空间 → 所以左边占用了 **57%** - 因此: - `right: 43%` ⟶ 已播放 = `100% - 43% = 57%` - 对应 `aria-valuenow="57"` 💡 所以: > **视觉上的进度 = `100% - right值`** 这通常是因为设计上希望进度条跟随“剩余时间”向左收缩,比如直播回看中,“live edge”在最右端,已看内容向左延伸。 --- ### 🔹 3. 双层进度指示(可能用途不同) | 元素 | 含义 | |------|------| | `.live-time` | 显示“实时直播边缘”的位置(当前时间点) | | `.watched-time` | 用户已经观看的部分(可能支持拖动回顾) | 在这里两者都设置为 `right: 43%`,说明用户看到的就是实时画面,没有快退或跳过。 --- ## ✅ 三、还原成可读进度条示例(简化版) 我们可以基于此机制创建一个等效的自定义进度条: ```html <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8" /> <title>模拟 MiniGuide 进度条</title> <style> .playback-container { width: 100%; height: 10px; background-color: #e0e0e0; border-radius: 5px; position: relative; overflow: hidden; margin: 20px 0; } .progress-watched { position: absolute; top: 0; right: 43%; /* 控制未播放区域留白 */ height: 100%; left: 0; /* 占据左侧所有空间 */ background: #4caf50; border-radius: 5px; transition: right 0.3s ease; } .label { font-family: Arial, sans-serif; color: #333; } </style> </head> <body> <p class="label">当前播放进度:<strong>57%</strong></p> <div class="playback-container" role="slider" aria-valuemin="0" aria-valuemax="100" aria-valuenow="57"> <div class="progress-watched"></div> </div> <script> function setProgress(percent) { const right = 100 - percent; document.querySelector('.progress-watched').style.right = right + '%'; document.querySelector('[role="slider"]').setAttribute('aria-valuenow', percent); } // 示例更新 setTimeout(() => setProgress(80), 1000); </script> </body> </html> ``` > ✅ 此代码完全模仿原始行为:用 `right` 控制进度,配合 `aria-valuenow` 提供无障碍支持。 --- ## ✅ 四、总结:进度是如何显示的? | 方法 | 实现方式 | 是否推荐 | |------|----------|---------| | ✅ ARIA 属性 | `aria-valuenow="57"` | ✔️ 必须使用(无障碍) | | ✅ 视觉样式 | `style="right: 43%"` 来反向计算进度 | ✔️ 特殊布局可用 | | ✅ JavaScript 动态控制 | 修改 `right` 和 `aria-valuenow` | ✔️ 推荐封装函数 | | ❌ 文字标签缺失 | 没有直接显示 “57%” 字样 | ⚠️ 可改进用户体验 | --- ## ✅ 建议优化方向 如果要增强可访问性和用户体验,可以添加: ```css .progress-label { position: absolute; left: 8px; top: 50%; transform: translateY(-50%); color: white; font-size: 10px; pointer-events: none; } ``` 并在 `.progress-watched` 内部加入: ```html <span class="progress-label">57%</span> ``` 这样即使不懂 ARIA 的用户也能看到数字。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值