对每个应用结果,保持覆盖

Apply results on each, keeps overriding

我正在使用 color-thief js 获取 div 中每个图像的颜色。我正在尝试遍历每个并检索颜色。这很好用。在我的控制台中,它显示了每张图片的颜色。

我有一些额外的代码可以将 RGB 格式的结果转换为 HEX。这在控制台中也可以正常工作。我的结果是每张图片的十六进制颜色。

当我尝试将 HEX 应用于 div 时,我总是得到最后一种颜色。

我明白发生了什么,循环不断超越自身,因此返回最后一种颜色。我只是不知道如何防止这种情况,并且在每个循环中将颜色应用于 div.

$(window).load(function() {
  var color_thief = new ColorThief();

  $('.thumbnail-image-link img').each(function() {
    var dominant_color = color_thief.getPalette(this, 2);

    // Converts RGB to HEX
    function componentToHex(c) {
      var hex = c.toString(16);
      return hex.length == 1 ? "0" + hex : hex;
    }

    function rgbToHex(r, g, b) {
      return "#" + componentToHex(r) + componentToHex(g) + componentToHex(b);
    }

    var colorOne = rgbToHex(dominant_color[0][0], dominant_color[0][1], dominant_color[0][2]);
    console.log("Hex One " + colorOne);

    var colorTwo = rgbToHex(dominant_color[1][0], dominant_color[1][1], dominant_color[1][2]);
    console.log("HEX Two " + colorTwo);

    //This is where my issue is
    $(".section").css('background', colorOne);

  });
});

编辑:添加了 HTML 代码。 编辑 2:取出额外的 div 以避免混淆。

基本上,我需要在每个 .section 循环时添加背景颜色。

Loop Start //depending how many images the for.each returns.
 -container -> value from loop 1 results
 -container -> value from loop 2 results
 -container -> value from loop 3 results
 -container -> value from loop 4 results
Loop End

再次感谢!

在您的 $('.thumbnail-image-link img').each 循环中,通过定义 each 回调的第一个参数来保存您正在迭代的当前元素的索引。然后你可以使用 .eq 到 select 正确的 .section 元素,并设置它的 CSS:

$('.thumbnail-image-link img').each(function(i) {

然后

$(".section").eq(i).css('background', colorOne);