关于“如何获得页面上元素的背景色”这个奇葩的面试问题
来源:互联网 发布:2016年网络流行语大全 编辑:程序博客网 时间:2024/05/17 07:35
原题:https://gold.xitu.io/post/587dab348d6d810058d87a0a
我发现又是腾讯这种变态公司。垃圾!垃圾!垃圾!
简单的答案是基于CSSOM getComputedStyle()。当然这个不是面试官想要的答案。
所以你再想一想,实际上要考虑多个元素叠在一起的时候,以及背景色带透明度的情况下,alpha blending的问题。当然,CSS还有一个Blend Mode的新控制属性,不过可以不用管,无非是扩展了alpha blending的计算公式而已。
所以,如果知道元素下面的layer元素是谁,背景色多少,以及当然元素的getComputedStyle()返回的背景色,就可以用alpha blending算出最终的屏幕显示颜色。
真正有技术性的问题是:如何找到一个html元素下面一层layer的元素???
这个问题不简单。当然在简单的情况下,下面一层layer元素其实就是当前元素的parent。但是许多反常情况:
(1)硬件加速时,存在layer squashing的情况;
(2)存在floating元素显示在任意元素上方的情况——注意,floating里面的元素仍然照通常的parent逻辑
(3)考虑可能的CSS opacity控制
(4)z-index的情况下,如果一个元素不是显示在屏幕最顶端的,则它不存在所谓的“最终屏幕颜色”问题。但z-index处于顶端的元素,其下一层的layer元素显然需要从它的siblings兄弟节点中按z-index降序进行搜索,而且还要考虑intersect问题。
有没有一个方便的API,用来获得某个document坐标上最终显示的屏幕颜色呢?没有。CSSOM只能从layer RenderLayer/Object处获得信息,无法获取GraphicsLayer层的(更底层的对象要支持JS scripting的话,性能就成大问题了)。
那么,要没有一个方便的API,可以获得某个document坐标上HitTest命中的所有layer RenderLayer呢?应该是有的。当据我所知,还是没有。CSSOM本身是依附于DOM的,不能直接遍历RenderLayer的layer树。
代码?本人对这种藏有陷阱、摆大公司优越感的面试题甚为鄙视。比如说:写出求fibocci的2种算法?假如你只想到了递归和DP 2个版本,那肯定就完了。还有一个基于2*2矩阵乘法的O(lg n)算法。但是即使写出来了又有什么意义呢?
- 关于“如何获得页面上元素的背景色”这个奇葩的面试问题
- 关于POI设置背景色的问题
- body元素的背景色
- 关于盒子的背景色
- ios,关于“按住说话”这个按钮的一个奇葩问题
- 程序员奇葩面试的奇葩问题
- listbox选中元素的背景色
- 关于网页字体变大,无背景色问题的解决
- SecureCRT下如何解决vi背景色的问题
- 程序员面试的奇葩问题
- GridView的Item选中后,背景色会有变化,如何才能去除这个背景色呢,
- 关于JFrame的背景色设置????
- 关于Label的背景色透明
- 关于设置controller的背景色
- POI中关于背景色的使用
- 如何修改treeview的背景色
- 如何修改treeview的背景色
- 如何改变对话框的背景色?
- 从任何主机都能访问到服务器上的MySql的方法
- c++对一个5位数的任意整数,求出其降序数
- 7.取字符子串函数实现
- LeetCode 389. Find the Difference
- 细说typedf与#define用法以及异同点
- 关于“如何获得页面上元素的背景色”这个奇葩的面试问题
- Django读取Mysql数据并显示在前端
- 如何真正理解Static与Const
- default.prop中属性修改
- Web Front End Novice Day 2
- 怎样理解阻塞非阻塞与同步异步的区别
- 11. Container With Most Water \ 16. 3Sum Closest \ 15. 3Sum
- 深挖SpringMVC_03_DispatcherServlet/ContextLoaderListener
- 小波分析笔记一:小波产生的背景和历史