Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 使用css/scss或js动态实现的颜色效果不透明度/渐变?_Jquery_Css_Sass - Fatal编程技术网

Jquery 使用css/scss或js动态实现的颜色效果不透明度/渐变?

Jquery 使用css/scss或js动态实现的颜色效果不透明度/渐变?,jquery,css,sass,Jquery,Css,Sass,我正在着手建立我自己的动态手风琴,我希望每个标签看起来像图像。例如,每个都可以是带有div子项的标题标记或列表 手风琴将是动态的,用户可以随意添加更多的标签。顶层是同级元素,它们将有下拉的子元素(也是动态的) 我还没有找到一个解决方案,从第一个开始依次迭代每个兄弟姐妹的颜色,并在迭代时使颜色褪色或变亮 我自己的手风琴的想法是尽可能轻,这样就需要考虑。有谁能给我指出正确的方向 编辑 试图添加代码笔,但它不允许我。请参阅下面我的评论以获取链接。好的,这是我最好的。如果颜色越来越浅,最终会变成白色,对

我正在着手建立我自己的动态手风琴,我希望每个标签看起来像图像。例如,每个都可以是带有div子项的标题标记或列表

手风琴将是动态的,用户可以随意添加更多的标签。顶层是同级元素,它们将有下拉的子元素(也是动态的)

我还没有找到一个解决方案,从第一个开始依次迭代每个兄弟姐妹的颜色,并在迭代时使颜色褪色或变亮

我自己的手风琴的想法是尽可能轻,这样就需要考虑。有谁能给我指出正确的方向

编辑
试图添加代码笔,但它不允许我。请参阅下面我的评论以获取链接。

好的,这是我最好的。如果颜色越来越浅,最终会变成白色,对吗?所以,你的手风琴应该有有限的标签,最后一个可能的标签是白色的

我可能会创建一个指定色调的数组(从黄色到白色),然后在每次添加新选项卡时遍历该数组,以查找下一个未使用的颜色。我会给你一些代码,但因为我不知道你是如何创作这个手风琴的,我不能做太多

最好的方法是使用Javascript创建新的选项卡,并从数组中为它们动态添加颜色

此外,这里还有一个链接,指向一个非常有用的网站,该网站可以生成颜色并显示该颜色的一系列阴影:


祝你好运

好的,这是我最好的了。如果颜色越来越浅,最终会变成白色,对吗?所以,你的手风琴应该有有限的标签,最后一个可能的标签是白色的

我可能会创建一个指定色调的数组(从黄色到白色),然后在每次添加新选项卡时遍历该数组,以查找下一个未使用的颜色。我会给你一些代码,但因为我不知道你是如何创作这个手风琴的,我不能做太多

最好的方法是使用Javascript创建新的选项卡,并从数组中为它们动态添加颜色

此外,这里还有一个链接,指向一个非常有用的网站,该网站可以生成颜色并显示该颜色的一系列阴影:


祝你好运

别以为,有一个简单(动态)的css解决方案

使用JS,您可以在hsl中创建一个起始颜色,获得每行的行数和亮度行数,并将其添加为样式;)

e、 g

然后在你的行上迭代,降低/增加亮度+添加到元素中

在这里,您可以阅读并使用hsl:


Cheerio:)

别想,有一个简单(动态)的css解决方案

使用JS,您可以在hsl中创建一个起始颜色,获得每行的行数和亮度行数,并将其添加为样式;)

e、 g

然后在你的行上迭代,降低/增加亮度+添加到元素中

在这里,您可以阅读并使用hsl:


Cheerio:)

使用Jquery,我的方法如下:

//First start with a string to store the color whitout alpha
var color="rgba(180,125,255,";

function repaint() {
  //Know how many tabs you have and which is the % increment you need
  var all = $('.tab').length,
      total = 10/all;

  //Iterate over all elements and set the new color based on Index
  $('.tab').each(function(i){
    var opacity = (total*(all-i))/10,
        newTone = color+opacity+")";
    $(this).css('background-color',newTone)
  })
}
repaint()

您仍然有许多方法可以改进此代码,例如简化颜色输入以接受十六进制和其他值


片段演示
var color=“rgba(180125255)”;
函数重新绘制(){
var all=$('.tab')。长度,
总数=10/全部;
$('.tab')。每个(函数(i){
变量不透明度=(总计*(全部-i))/10,
纽通=颜色+不透明度+”;
$(this.css('background-color',newTone)
})
}
重画
$('button')。在('click')上,函数(e){
e、 预防默认值();
$('body')。附加(“”)
重画
})
.tab{
高度:40px;
}

添加选项卡

使用Jquery,我的方法如下:

//First start with a string to store the color whitout alpha
var color="rgba(180,125,255,";

function repaint() {
  //Know how many tabs you have and which is the % increment you need
  var all = $('.tab').length,
      total = 10/all;

  //Iterate over all elements and set the new color based on Index
  $('.tab').each(function(i){
    var opacity = (total*(all-i))/10,
        newTone = color+opacity+")";
    $(this).css('background-color',newTone)
  })
}
repaint()

您仍然有许多方法可以改进此代码,例如简化颜色输入以接受十六进制和其他值


片段演示
var color=“rgba(180125255)”;
函数重新绘制(){
var all=$('.tab')。长度,
总数=10/全部;
$('.tab')。每个(函数(i){
变量不透明度=(总计*(全部-i))/10,
纽通=颜色+不透明度+”;
$(this.css('background-color',newTone)
})
}
重画
$('button')。在('click')上,函数(e){
e、 预防默认值();
$('body')。附加(“”)
重画
})
.tab{
高度:40px;
}

添加选项卡

我花了一分钟调试我的答案,所以我迟到了。但我还是想和大家分享

css html
我花了一分钟来调试我的答案,所以我迟到了。但我还是想和大家分享

css html
哎哟为什么投反对票?没有投反对票,但你的问题不包括你试图解决的问题。我只是花了近一个小时寻找任何与之无关的东西,结果什么也没有找到。这是一个艰难的搜索:“在元素上动态迭代颜色??”。试试看,如果你发现了什么,我会留下深刻印象的。为什么投反对票?没有投反对票,但你的问题不包括你试图解决的问题。我只是花了近一个小时寻找任何与之无关的东西,结果什么也没有找到。这是一个艰难的搜索:“在元素上动态迭代颜色??”。试一试,如果你发现了什么,我会给你留下深刻印象。它的动态有无限的表。这是我正在进行的工作的链接。目前静态:一旦颜色变为白色,您的标签将不可见。所以,也许你应该重新考虑你的概念?即使我减轻了百分之二,我会得到50阴影。足够了。这一点都不成问题。没错,这就是我的观点。在你的第一条评论中,你说它有无限的标签。但是,现在你说你只需要50个。我同意你的第二个评论。只需将这50种颜色组成一个数组,并使用JS添加选项卡并设置其样式。ok mate。只要检查一下我标记的答案上的钢笔就行了。很好。很有活力
ul {
  list-style: none;
}

.accordian li {
  padding: 1rem;
  background-color: yellow
}
<ul class="accordian">
  <li class="entry" for="entry in Accordian.entries"><a href="${entry.value}">${entry.key}</a></li>
</ul>
function addAlphaChannel(e, alpha) {
  const oldBGColor = window.getComputedStyle( $(e)[0] , null).getPropertyValue('background-color')
  let r,g,b;
  [r,g,b] = oldBGColor.match(/\d+/g)
  const newBGColor = `rgba(${r}, ${g}, ${b}, ${alpha})`

  $(e).css({ 'background-color': newBGColor })
}

const Accordian = {
  entries: {
      a: '/a',
    'and b': '/b'
  }
}

const Exposed = { Accordian }

$('[for]').each((idx,e) => {
  let key, collection, carr, template
    [key, collection] = $(e).attr('for').split(' in ')
  carr = collection.split('.')
  collection = carr.reduce((o,i)=>o[i], Exposed)

  template = $(e).html()
  let inner, i, cnt
  cnt = Object.entries(collection).length
  Object.entries(collection).forEach((k, ix) => {
    i = {key:k[0], value:k[1]}
    inner = template
        .replace('${'+key+'.key'+'}', i.key, 'g')
        .replace('${'+key+'.value'+'}', i.value, 'g')
    inner = $(e).clone().html(inner)
    $(inner).appendTo($(e).parent())
      .removeAttr('for')
    addAlphaChannel(inner, (cnt-ix)/cnt)
  })
  $(e).remove()
})