【发布时间】:2019-08-04 06:15:59
【问题描述】:
我需要一些关于数学/算法问题的帮助。 (你不需要知道 react-native 来解决它;只是一些数学)
我有一个带有线性渐变背景的 react-native 应用 从 rgb(24, 205, 246) 到 rgb(67, 33, 140)。
共有三个不同的文本项目,每个项目位于屏幕上不同的垂直(y 轴)位置。对于每个 Text 项,我希望其文本颜色对应于滚动时其当前 y 位置处的线性渐变背景的颜色。
这就是我想要的样子:https://imgur.com/a/8r5VcWN
我找到了一个使用 background-clip: Text 的解决方案,但不幸的是,它只适用于浏览器,不适用于手机。
经过一番研究,我决定使用 scrollview 中的 onscroll 方法,该方法将返回手机屏幕顶部的 y 位置。用户向下滑动时y位置增加,用户向上滑动时y位置减少。
这里有一些关于手机屏幕的信息:https://imgur.com/a/ui7AyY6。
我已经为每个 Text 项所做的是,它的颜色将调用函数调用 changeColor(Text item A's y position),它将获取 Text 项的 y 位置并返回适当的 rgb 颜色。
changeColor = bname => {
let topY = this.state.topY;
let color1 = Math.round(67 - topY / ((24 / 67) * 100));
let color2 = Math.round(33 + topY / ((33 / 205) * 30));
let color3 = Math.round(140 + topY / ((140 / 246) * 15));
return `rgb(${color1},${color2},${color3})`;
};
回想一下,线性渐变背景是从 rgb(24, 205, 246) 到 rgb(67, 33, 140)。我们最多可以分解三个不同的颜色部分:rgb(color1, color2, color3)。
我们以color1为例,color1的范围是24到67,手机屏幕的高度是0到677。
我的逻辑是使 rgb 和高度模拟相同?假设我们有两个变量:topY(向下滑动时增加;向上滑动时减少)和从 24 开始的 rgbVar。
滑动前:
topY : 0
rgbVar : 24
滑入中间时:
topY : 338.5
rgbVar:45.5
当滑到最后时:
topY : 667
rgbVar : 67
另外,由于 Text 项目位于不同的 Y 位置,所以我需要做一些数学运算并将其添加到计算中?
这是我目前所拥有的: https://snack.expo.io/@rex_rau/paranoid-toffee
对于Text item A,它有点能够更改为适当的颜色,但是,Text item B 和Text item C 没有区别(不是它们当前位置的适当颜色)。
我希望输出是这样的,当滑到中间时:
- 文本项 A 具有 rgb(45.5, 119, 193)
- 文本项 B 具有 rgb(50, 70, 173)
- 文本项 C 具有 rgb(55, 40, 153)
有人有解决这个问题的想法吗?或者其他方式来实现我想要的?
谢谢
【问题讨论】:
标签: javascript css algorithm react-native math