写点什么

优酷暗黑模式(七):暗黑模式的技术支撑 Weex & H5

  • 2020-02-27
  • 本文字数:1140 字

    阅读完需:约 4 分钟

优酷暗黑模式(七):暗黑模式的技术支撑 Weex & H5

在本文中,我们会介绍优酷 App 的 Weex 和 H5 页面是如何尽可能复用 Native 端的实现方案,实现暗黑模式的。

一、适配原理

对于 Weex 和 H5 页面的暗黑模式支持,我们考虑了几种方案。


第一种方案,只提供视觉模式查询能力,由具体页面的开发同学来控制效果;


第二种方案,建立 JavaScript 版本的公共资源库和设计标准化体系;


第一种方案过于简单,难以对最终页面呈现结果做统一管控;


第二方案又比较重,需要较长的时间成本。


我们的最终的方案是:Native/Weex/H5 具体页面的开发都统一按照视觉标准化定义的 DesignToken 进行开发,这样同一套设计体系可以复用到不同的渲染方式。Native 容器在加载 Weex 或 H5 页面时,将当前的色值表传给 JavaScript 侧;JavaScript 侧不用关心当前所处的视觉模式,只需要读取色值表并设置到页面组件。


Weex/H5 页面实现暗黑模式的架构图:



Weex/H5 的实际使用场景一般是作为活动的承载页,内容的落地页,和跨应用业务的交互页。但不论是哪种,都是嵌入在整个原生页面交互链路上的。所以我们把 Native 当作是 Weex/H5 容器的运行环境,Native 触发动态页面的渲染时,我们会将色板从色彩管理器中取出,传递给 JavaScript 侧,然后借由 JavaScript 侧影响最终的视觉效果呈现。

1. Weex 页面的适配

Weex 渲染流程图:


2. H5 页面的适配

H5 渲染流程图:



色彩管理器向 JS 传递的色板数据


{    "cb_1":"rgba(36,165,255,0)",    "cb_2":"rgba(0,179,250,0)",    "cb_3":"rgba(25,69,121,0)",    "cd_1":"rgba(0,0,0,1)",    "cg_1":"rgba(28,32,41,0)",    ......    "ykn_belt":"rgba(37,37,43,0)",    "ykn_blackNavigationBar":"rgba(29,29,33,0)",    "ykn_elevatedPrimaryBackground":"rgba(37,37,43,0)",    "ykn_elevatedPrimaryGroupedBackground":"rgba(37,37,43,0)",    "ykn_elevatedSecondaryBackground":"rgba(37,37,43,0)",    "ykn_elevatedSecondaryGroupedBackground":"rgba(51,51,55,0)",    "ykn_elevatedTertiaryBackground":"rgba(66,66,69,0)"}
复制代码


通过这样的技术方案,我们最终达成了同一份业务代码,自动适配系统的视觉模式。无论是 Weex 页面还是 H5 页面,最终的视觉效果是和 Native 页面保持和谐统一的。

二、页面视觉效果

以下是 Weex/H5 页面最终呈现的视觉效果:

1. H5 页面视觉效果

H5 页面的普通模式:



H5 页面的暗黑模式 :


2. Weex 页面视觉效果

Weex 页面的正常模式:



Weex 页面的暗黑模式:



作者简介


涵父,阿里文娱无线开发专家。


相关阅读


优酷暗黑模式(一):是什么、为什么、如何落地?


优酷暗黑模式(二):如何建立设计语言标准化管理体系


优酷暗黑模式(三):暗黑模式设计指南


优酷暗黑模式(四):设计标准化的技术实现


优酷暗黑模式(五):暗黑模式的技术实现策略


优酷暗黑模式(六):暗黑模式的技术支撑 iOS


2020-02-27 10:002083

评论

发布
暂无评论
发现更多内容

【愚公系列】2022年10月 Go教学课程 032-结构体方法继承

愚公搬代码

10月月更

Kubernetes的pod

急需上岸的小谢

10月月更

2022-10-17:特殊的二进制序列是具有以下两个性质的二进制序列: 0 的数量与 1 的数量相等。 二进制序列的每一个前缀码中 1 的数量要大于等于 0 的数量。 给定一个特殊的二进制序列 S,以

福大大架构师每日一题

算法 rust 福大大

你有真正的享受过闲暇吗?

暮春零贰

成长 时间管理 10月月更

搞一搞明白Vitepress的文档渲染基础

小鑫同学

前端 markdown vite markdown-it 10月月更

JS模块化—CJS&AMD&CMD&ES6-前端面试知识点查漏补缺

loveX001

JavaScript

元宇宙的当下与未来

CECBC

js事件循环与macro&micro任务队列-前端面试进阶

loveX001

JavaScript

聊聊运营活动的设计与实现逻辑

Java 架构 活动运营

始料未及-- 元宇宙传来好消息,全球轰动

CECBC

元宇宙持续火爆,这些问题值得思考和警惕

CECBC

作为码农,如何让35岁璀璨耀眼

南极仙翁

码农 生活随想 35岁危机 35岁焦虑 10月月更

2022年证券行业818理财节,量变开始转向质变

易观分析

证券 理财节

Java多线程 ThreadPoolExecutor-RejectedExecutionHandler拒绝执行策略

Yeats_Liao

后端 Java core 10月月更

搭建一套 gocd 的环境

lihui

CI/CD pipeline gocd

数字货币:影响深远的创新

CECBC

JS Array数组几个循环实用方法总结

MegaQi

JavaScrip 10月月更

Kubernetes的pod调度

急需上岸的小谢

10月月更

【一Go到底】第十八天---函数的注意事项

指剑

Go golang 10月月更

网络安全之等保2.0测评

网络安全学海

黑客 网络安全 信息安全 渗透测试 等保测评

Java多线程 ThreadPoolExecutor自定义线程池

Yeats_Liao

后端 Java core 10月月更

C++ | bool变量值在程序运行过程中自动篡改问题解决

中国好公民st

c++ 变量 10月月更

2022年中国小微普惠数字化进程专题分析

易观分析

小微金融

kubernetes的Controller

急需上岸的小谢

10月月更

元宇宙,是噱头还是创新?

CECBC

大数据入门学习框架

Lansonli

大数据 大数据学习框架 学习大数据

来自大厂 10+ 前端面试题附答案(整理版)

loveX001

JavaScript

用声网 Android UIKit 为实时视频通话应用添加自定义背景丨声网 SDK 教程

声网

视频 人工智能’ SDK 教程

Java多线程 CompletionService和ExecutorCompletionService

Yeats_Liao

后端 多线程 Java core 10月月更

Jenkins流水线(pipeline)实战之:从部署到体验

程序员欣宸

Java jenkins 10月月更

优酷暗黑模式(七):暗黑模式的技术支撑 Weex & H5_移动_阿里巴巴文娱技术_InfoQ精选文章