Files
TankIC/3DTank/docs/SettingsStyleTable.md

9.2 KiB
Raw Permalink Blame History

Settings Style Table(设置页校准)

来源:3dtank.com/play/static/js/unpacked/module_82347.js 的 SettingsComponentStyle / SettingsMenuComponentStyle / SettingsButtonsComponentStyle / GameSettingsStyle / DropDownStyle / CheckBoxComponentStyle / InputRangeComponentStyle。 方法:在无头页面中加载原包模块,patch module_37036 的 ld 捕获样式类,实例化样式类后逐个执行 duv_1[0] 样式函数,并用 recording style object 记录 rpf / gp8 调用。 配色:ColorPalette.md / Palette.kt,直接来自 C9i(E9i())构造器。

0. 页面外壳

  • 子页面复用主页 HEAD,只把左侧 VIP 区域替换成退出键;组队、等级、昵称/经验、Logo、货币、F11、退出都不变。
  • 不再使用独立 Breadcrumbs 顶栏。
  • 设置菜单顺序:游戏显示 / 战斗 / 画面 / 音效 / 操控 / 账户 / 安全。
  • 文案全部走 Translations i18n,语言下拉切换 Translations.LoadLocale 并重绘。

1. 页面骨架

原版字段 CSS
str.container(页面根) background:radial-gradient(#203040 0%, #03080D 100%); width:100%; height:100%; position:absolute; margin:0
blockContentOptions display:flex; flex-wrap:wrap; justify-content:flex-start; align-items:flex-start; width:72.25em; height:calc(100% - 8.5em); padding-top:4.5em; position:relative
scroll display:flex; flex-direction:column; width:46.875em; overflow-x:hidden; overflow-y:scroll; scrollbar-width:thin
settingsBlockOptions display:flex; flex-direction:column; width:46.875em; height:100%; padding:1.875em; padding-bottom:0; background:rgba(255,255,255,0.1); position:relative
containerBlock width:50.625em; height:100%; padding-left:2.625em
borderLineOption width:49.125em; height:0.063em; margin-left:-1.875em; margin-bottom:1.875em; background:rgba(255,255,255,0.1)
commonBlock display:flex; flex-direction:column; justify-content:flex-start; align-items:center; width:100%; height:auto
rowBlock display:flex; flex-direction:row; justify-content:space-between; align-items:center; width:100%; height:auto
textHeadlineOptions font:500 1.125em/normal BaseFontBold; text-transform:uppercase
dropDownTitle font:400 1em/normal BaseFontRegular; margin:0 0 1em
dropDown width:30.625em; margin-bottom:1.75em
slider width:31.25em

2. 左侧菜单

原版字段 CSS
slideMenuOptions display:flex; flex-direction:column; justify-content:center; width:18em; height:2.5em; background:linear-gradient(to right,#2E3235,rgba(46,50,53,0)); color:rgb(255,188,9); z-index:1; transition:all .1s ease-in-out; position:relative
yellowLineMenuOptions width:0.313em; height:2.5em; background:rgb(255,188,9); position:absolute; z-index:3
menuItemOptions display:flex; align-items:center; justify-content:flex-start; width:18em; height:5em; position:relative; z-index:4; cursor:pointer
menuItemOptions span font:500 1.125em/normal BaseFontBold; text-transform:uppercase; margin-left:1.875em; margin-top:0.1em; color:rgba(255,255,255,0.6)
activeItemOptions span color:white; transition:.5s

3. 底部按钮

原版字段 CSS
containerGroupButton display:flex; align-items:center; justify-content:flex-end; width:100%; height:3.125em; padding-bottom:1.875em; align-self:flex-end; background:transparent
buttonsWidthBackReset width:15.625em
buttonSaveLeave width:18.125em

4. 控件

原版类/字段 CSS
DropDownStyle 容器 width:100%; position:relative
DropDownStyle 按钮 display:flex; align-items:center; justify-content:space-between; min-width:4.375em; width:100%; height:3.125em; border:0.063em solid rgba(255,255,255,0.2); background:rgba(255,255,255,0.1); padding:0 0.875em; box-sizing:border-box
CheckBoxComponentStyle display:flex; align-items:center; justify-content:flex-start; width:100%; height:2.25em; margin-bottom:1.25em
设置页 Toggle Switch width:2.75em; height:1.5em; border:0.063em solid rgba(255,255,255,0.2); border-radius:6.25rem; background:rgba(118,255,51,0.25)(开)/ rgba(191,213,255,0.25)(关);knob 使用原版 correct.afad1b22.svg / incorrectCheck.1918884a.svg 圆形图标
DropDownStyle 菜单 min-width:18.25em; background:rgba(0,25,38,0.9); backdrop-filter:blur(3.125em); position:absolute; z-index:999; display:flex; flex-direction:column
DropDownStyle 选项 height:2.563em; min-height:2.563em; flex:0 0 2.563em; width:100%; display:flex; align-items:center; justify-content:flex-start; cursor:pointer;hover rgba(255,255,255,0.1);文字 margin:0 2.125em; font-size:0.9375em
下拉滚动 菜单 max-height:15.75em; overflow-y:auto; scrollbar-gutter:stable;选项固定高度,不参与 flex 收缩,超过上限后滚动
选中选项 color:rgb(162,255,106); background:rgba(255,255,255,0.1)
InputRangeComponentStyle display:flex; flex-direction:column; justify-content:space-between; align-items:flex-start; height:3.188em; min-height:3.188em; margin-bottom:1.75em
InputRangeComponentStyle label color:white; font-size:0.9375em; margin-top:0
InputRangeComponentStyle input -webkit-appearance:none; width:100%; height:0.563em; background:transparent; cursor:pointer
range track height:0.375em; background:transparent;进度用 linear-gradient(to right,#ffbc09 0%,#ffbc09 X%,rgba(255,255,255,0.1) X%,rgba(255,255,255,0.1) 100%)
range thumb width:1.875em; height:1em; border-radius:0.25em; background:rgb(255,188,9); margin-top:-0.3em
GameSettingsStyle.containerFormOptions display:flex; flex-direction:column; margin-left:0.9em; margin-bottom:1em
GameSettingsStyle.notificationText color:rgba(255,255,255,0.5); text-align:left

5. 当前仍为近似

  • 设置行的组合方式:已按 rowBlock / dropDownTitle / slider / CheckBoxComponentStyle 的尺寸重建,但原版每个设置项的具体子组件层级仍需继续展开。
  • 下拉选项弹层:已按 DropDownStyle + ContextMenuStyle 还原菜单/选项高度、背景、hover、选中色;使用 position:fixed + 控件 getBoundingClientRect(),宽度等于选择框、紧贴下沿,避免被设置面板滚动容器裁剪。
  • 菜单滑动条:当前按 index * 5em + 1.25em 计算,原版由组件状态计算 margin-top。
  • 部分设置项的分组/顺序仍以官方 key 和现有状态为准,后续可继续按原组件 render 树核对。

6. 原版组件定义位置

组件 / 样式 混淆版类 / 函数 位置
SettingsComponentStyle kNi module_82347.js:89525
SettingsMenuComponentStyle EMi module_82347.js:90329
SettingsButtonsComponentStyle UPi module_82347.js:89326
GameSettingsStyle BAi module_82347.js:88190
DropDownStyle J7t module_82347.js:34073
ContextMenuStyle(下拉菜单/选项) u7t module_82347.js:33638
CheckBoxComponentStyle QBi module_82347.js:92742
CheckBoxStyle(Toggle Switch) Z0t module_82347.js:33272
InputRangeComponentStyle EUi module_82347.js:92980
InputRangeComponentStyle-blockSoundVolume wUi module_82347.js:92880
InputRangeComponentStyle-range kUi module_82347.js:92930
滑杆进度渐变 hUi.tap module_82347.js:200507
SettingsComponentStyle-slider kNi.z1jp_1 module_82347.js:89620

ksc-130 是 SettingsComponentStyle-slider 的 Emotion 生成类名;当前实现直接使用 InputRangeComponentStyle-* / SettingsComponentStyle-slider 语义类名,并用 ksc-56 / ksc-57 标记标签与滑杆。

7. 真实 DOM 结构

滑杆:

<div class="InputRangeComponentStyle-blockSoundVolume SettingsComponentStyle-slider">
  <p>主音量<span class="ksc-56">(80%)</span></p>
  <div class="InputRangeComponentStyle-soundVolume">
    <input type="range" min="0" max="100" step="1"
           class="ksc-57 InputRangeComponentStyle-range" value="80">
  </div>
</div>

开关:

<div class="ksc-46">
  <div class="CheckBoxComponentStyle-oneSetting">
    <div class="CheckBoxStyle-checkbox">
      <label>
        <input type="checkbox" class="ksc-47" checked>
        <span class="ksc-62 -displayFlex"></span>
      </label>
    </div>
    <div class="ksc-63 -flexStartAlignCenter">
      <label>显示帧数和延迟</label>
    </div>
  </div>
</div>

当前实现已按这个结构输出;带描述的开关行增加 has-description 修饰类,让描述与标签对齐。

8. 本轮细节修正

  • 下拉列表不再设置 scrollbar-gutter;无溢出时不预留滚动条空间。
  • 选项数 > 6 时 overflow-y: scroll,否则 auto;选项固定高度 2.563em,不参与 flex 收缩。
  • 滑杆百分比 (xx%) 使用原版浅绿 rgb(162,255,106)。
  • 开关与文字之间增加 0.75em 间距。
  • 开关背景提高到 rgba(118,255,51,0.35) / rgba(191,213,255,0.35),更接近原版亮度。
  • 侧边栏选中文字改为 display:flex; align-items:center; height:100%,垂直居中。
  • .ms-top 只保留定位,不再叠加半透明背景;HEAD 背景由 HeadScreen.RootStyle 的原版渐变提供。