Javascript 以渐晕效果方式计算跨距不透明度

Javascript 以渐晕效果方式计算跨距不透明度,javascript,html,css,Javascript,Html,Css,我有一个具有七个日期跨度的flex容器。我希望中心日期跨度(标记为蓝色)的不透明度为1,并且从中心开始的每个后续跨度的不透明度都减小 我试图想出一个简单的算法,在一个不固定的日期范围内动态地完成这项工作 i、 e。 不透明度值 0.1,0.3,0.6,1,0.6,0.30.1 要获得此结果,请执行以下操作: 显然,在本例中,我有日期跨度的长度[7]和每次迭代的值[0,1,2…6]假设您的HTML结构如下,我们有: const nav=document.getElementById('nav

我有一个具有七个日期跨度的flex容器。我希望中心日期跨度(标记为蓝色)的不透明度为1,并且从中心开始的每个后续跨度的不透明度都减小

我试图想出一个简单的算法,在一个不固定的日期范围内动态地完成这项工作

i、 e。 不透明度值

0.1,0.3,0.6,1,0.6,0.30.1

要获得此结果,请执行以下操作:


显然,在本例中,我有日期跨度的长度[7]和每次迭代的值[0,1,2…6]

假设您的HTML结构如下,我们有:

const nav=document.getElementById('nav'))
常数maxOpacity=1
const divs=nav.queryselectoral('div'))
常数范围=最大不透明度/分段长度*2
常数不透明度=数组(divs.length).fill(1)
对于(变量i=0;i=1){
不透明度[i]=1
打破
}
不透明度[i]=res
}
为了{
div.style.opacity=不透明度[索引]
})
#导航{
背景:绿色;
显示器:flex;
弯曲方向:行;
证明内容:周围的空间;
}
#导航部{
颜色:白色;
}

项目1
项目2
项目3
项目4
项目5
项目6
项目7
项目8
项目9

假设您的HTML结构如下,我们有:

const nav=document.getElementById('nav'))
常数maxOpacity=1
const divs=nav.queryselectoral('div'))
常数范围=最大不透明度/分段长度*2
常数不透明度=数组(divs.length).fill(1)
对于(变量i=0;i=1){
不透明度[i]=1
打破
}
不透明度[i]=res
}
为了{
div.style.opacity=不透明度[索引]
})
#导航{
背景:绿色;
显示器:flex;
弯曲方向:行;
证明内容:周围的空间;
}
#导航部{
颜色:白色;
}

项目1
项目2
项目3
项目4
项目5
项目6
项目7
项目8
项目9

这里有一个小函数,它使用一些奇特的数学计算不透明度:

您只需传入
的计数和当前的索引即可

解释 首先,该函数将计算项目在从
0
1
的“刻度”上的位置。第一个为
0
,中间为
5
,最后一个为
1
。然后,该值将乘以π(
Math.PI
)。其结果将传递给
Math.sin
创建如下输出:


这里有一个小函数,它使用一些奇特的数学计算不透明度:

您只需传入
的计数和当前的索引即可

解释 首先,该函数将计算项目在从
0
1
的“刻度”上的位置。第一个为
0
,中间为
5
,最后一个为
1
。然后,该值将乘以π(
Math.PI
)。其结果将传递给
Math.sin
创建如下输出:

看到这些小箭头后,我想您希望在滚动父对象时动态设置这些不透明度。
我将向您展示两个想法,一个只使用CSS,另一个使用JavaScript(jQuery)

CSS唯一的方法:
  • 添加一个带有“点击槽”功能的渐变背景叠加DIV

/*QuickReset*/*{margin:0;框大小:border-box;}html,正文{高度:100%;字体:14px/1.4无衬线;}
.scrollWrapper{
位置:相对位置;
}
.卷轴包装器:之后{
内容:“;
位置:绝对位置;
宽度:100%;
高度:40px;/*仅覆盖.date文本的任何高度*/
排名:0;
左:0;
指针事件:无;/*单击鼠标左键*/
/* http://colorzilla.com/gradient-editor/#29dca4+0000000+50,29dca4+100和1+0,0+50,1+100*/
背景:-莫兹线性梯度(左,rgba(41220164,1)0%,rgba(0,0,0,0)50%,rgba(41220164,1)100%);/*FF3.6-15*/
背景:-webkit线性梯度(左侧,rgba(41220164,1)0%,rgba(0,0,0,0)50%,rgba(41220164,1)100%);/*Chrome10-25,Safari5.1-6*/
背景:线性梯度(向右,rgba(41220164,1)0%,rgba(0,0,0)50%,rgba(41220164,1)100%);/*W3C,IE10+,FF16+,Chrome26+,Opera12+,Safari7+*/
过滤器:progid:DXImageTransform.Microsoft.gradient(startColorstr='#29dca4',endColorstr='#29dca4',GradientType=1);/*IE6-9*/
}
.卷轴{
背景:#29DCA4;
溢出:隐藏;
溢出-x:滚动;
空白:nowrap;
}
.日期{
显示:内联块;
线高:65px;
利润率:0.15px;
颜色:#fff;
}
.日期:第一个孩子{左边距:50%;}
.日期:最后一个孩子{右边距:50%;}
.date b{color:#2D476A;}

10 2/15/2018
20 2/15/2019
30 2/15/2020
40 2/15/2021
50 2/15/2022
60 2/15/2023
70 2/15/2024
80 2/15/2025
90 2/15/2026
10 2/15/2027
20 2/15/2028
看到这些小箭头后,我想您希望在滚动父对象时动态设置这些不透明度。
我将向您展示两个想法,一个只使用CSS,另一个使用JavaScript(jQuery)

CSS唯一的方法:
  • 添加一个带有“点击槽”功能的渐变背景叠加DIV

/*QuickReset*/*{margin:0;框大小:border-box;}html,正文{高度:100%;字体:14px/1.4无衬线;}
.scrollWrapper{
位置:相对位置;
}
.卷轴包装器:之后{
内容:“;
位置:绝对位置;
宽度:100%;
高度:40px;/*仅覆盖.date文本的任何高度*/
排名:0;
左:0;
指针事件:无;/*单击鼠标左键*/
/* http://colorzilla.com/gradient-editor/#29dca4+0000000+50,29dca4+100和1+0,0+50,1+100*/
背景:-莫兹线性梯度(左,rgba(41220164,1)0%,rgba(0,0,0,0)50%,rgba(41220164,1)100%);/*FF3.6-15*/
背景:-webkit线性梯度(左,rgba(41220164,1)0%,rgba(0,0,0,0)50%
function getOpacity(length, index) {
  return Math.sin((1 / (length - 1) * index) * Math.PI);
}