【发布时间】:2015-04-02 19:00:42
【问题描述】:
我一直希望在使用点击事件时更改图像的颜色。
我看到了这篇文章,第一个也是主要的对马克杯的回应非常好。
但是,我需要使用类而不是 ID,因为我需要更改多个图像的颜色。当我将代码更改为 getElementsByClassName 而不是 byID 时,它不再起作用。
我当然把 ID=mug 改成 class=mug。
我在代码中看不到任何其他会导致问题的地方,因此我们将不胜感激。
我不能在原版上发布,所以在这里添加。原文链接是: How to change color of an image using jquery
这是代码:
<img src="mug.png" id="mug" width="25%" height="25%" onload="getPixels(this)" />
<input type="text" id="color" value="#6491ee" />
<input type="button" value="change color" onclick="changeColor()">
<script type="text/javascript">
var mug = document.getElementById("mug");
var canvas = document.createElement("canvas");
var ctx = canvas.getContext("2d");
var originalPixels = null;
var currentPixels = null;
function HexToRGB(Hex)
{
var Long = parseInt(Hex.replace(/^#/, ""), 16);
return {
R: (Long >>> 16) & 0xff,
G: (Long >>> 8) & 0xff,
B: Long & 0xff
};
}
function changeColor()
{
if(!originalPixels) return; // Check if image has loaded
var newColor = HexToRGB(document.getElementById("color").value);
for(var I = 0, L = originalPixels.data.length; I < L; I += 4)
{
if(currentPixels.data[I + 3] > 0)
{
currentPixels.data[I] = originalPixels.data[I] / 255 * newColor.R;
currentPixels.data[I + 1] = originalPixels.data[I + 1] / 255 * newColor.G;
currentPixels.data[I + 2] = originalPixels.data[I + 2] / 255 * newColor.B;
}
}
ctx.putImageData(currentPixels, 0, 0);
mug.src = canvas.toDataURL("image/png");
}
function getPixels(img)
{
canvas.width = img.width;
canvas.height = img.height;
ctx.drawImage(img, 0, 0, img.naturalWidth, img.naturalHeight, 0, 0, img.width, img.height);
originalPixels = ctx.getImageData(0, 0, img.width, img.height);
currentPixels = ctx.getImageData(0, 0, img.width, img.height);
img.onload = null;
}
</script>
谢谢
【问题讨论】:
-
你用的是什么浏览器?
document.getElementsByClassName("mug")应该返回一个数组而不是单个对象 -
为我工作:ID:jsfiddle.net/d6fmjady 和
getElementsByClassName:jsfiddle.net/d6fmjady/1 -
感谢 Pawel,最后遗漏了所有重要的 [0]。但是,这仅返回第一张图像,正如预期的那样。仅将第二张图像更改为 [1],依此类推。我已经看过并看到我需要按照以下方式运行一些东西: var i;对于 (i = 0; i
标签: javascript colors