Задать вопрос

Как изменить цвет фона div по среднему цвету из картинки?

JS код
const getAverageColor = (img) => {
  
			const max = 10;
			const {naturalWidth: iw, naturalHeight: ih} = img;
			const ctx = document.createElement`canvas`.getContext`2d`; 
			const sr = Math.min(max / iw, max / ih);
			const w = Math.ceil(iw * sr);
			const h = Math.ceil(ih * sr);
			const a = w * h;
		  
			img.crossOrigin = 1;
			ctx.canvas.width = w;
			ctx.canvas.height = h;
			ctx.drawImage(img, 0, 0, w, h);
		  
			const data = ctx.getImageData(0, 0, w, h).data;
			let r = g = b = 0;
		  
		  	for (let i=0; i<data.length; i+=4) {
		    	r += data[i];
		    	g += data[i+1];
		    	b += data[i+2];
		  	}

		  	r = ~~(r/a);
		  	g = ~~(g/a);
		  	b = ~~(b/a);

		  	return {r, g, b};
		};

		const setBgFromAverage = (img) => {
	  		img.addEventListener("load", () => {
	    	const {r,g,b} = getAverageColor(img);
	    	img.style.backgroundColor = `rgb(${r},${g},${b})`;
	  	});
	};

	document.querySelectorAll('#lots').forEach(setBgFromAverage);


html код
<div class="lots">
		<div class="lots-img">
			<img id="lots" src="../img/lots/1.webp">
		</div>
		<div class="lots-money">
			<h1>300₽</h1>
			<span>/ 1 шт.</span>
		</div>
		<div class="lots-name">M.2 NVMe PCI-E4.0/3.0</div>
		<div class="lots-transfer"><img src="../img/icons/avito.svg"> Avito</div>
		<div class="white-button">Снять с продажи</div>
	</div>

	<div class="lots">
		<div class="lots-img">
			<img id="lots" src="../img/lots/2.png">
		</div>
		<div class="lots-money">
			<h1>2500₽</h1>
			<span>/ 1 шт.</span>
		</div>
		<div class="lots-name">Стабилизатор напряжения Ресанта С500</div>
		<div class="lots-transfer"><img src="../img/icons/avito.svg"> Avito</div>
		<div class="white-button">Снять с продажи</div>
	</div>


Код работает но меняет цвет у img а нужно в div.lots как этого добиться?
  • Вопрос задан
  • 234 просмотра
Подписаться 2 Простой 6 комментариев
Решения вопроса 1
blackangelada
@blackangelada Автор вопроса
Да, спасибо, получилось сделать) может кому пригодится
let parents = img.closest('.lots');
parents.style.backgroundColor = `rgb(${r},${g},${b},0.12)`;
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы