2010-11-12 94 views
0

我有这段代码运行一个函数来将class =“gray”的彩色图像转换为灰度。JQuery如何在页面加载后运行

$(document).ready(function(){ 
    $('.gray').click(function(){ 
    this.src = grayscale(this.src); 
    }); 
}); 

function grayscale(img){   
var canvas = document.createElement('canvas'); 
var ctx = canvas.getContext('2d'); 

var imgObj = new Image(); 
imgObj.src = img; 

canvas.width = imgObj.width; 
canvas.height = imgObj.height; 

ctx.drawImage(imgObj, 0, 0); 

var imgPixels = ctx.getImageData(0, 0, canvas.width, canvas.height); 

for(var y = 0; y < imgPixels.height; y++){ 
     for(var x = 0; x < imgPixels.width; x++){ 
      var i = (y * 4) * imgPixels.width + x * 4; 
      var avg = (imgPixels.data[i] + 
         imgPixels.data[i + 1] + 
         imgPixels.data[i + 2] 
        )/3; 
      imgPixels.data[i] = avg; 
      imgPixels.data[i + 1] = avg; 
      imgPixels.data[i + 2] = avg; 
     } 
} 

ctx.putImageData(imgPixels, 0, 0, 0, 0, imgPixels.width, imgPixels.height); 
return canvas.toDataURL(); 
} 

该工程确定与点击功能,但我想要的是彩色图像变成灰色立即缩放页面加载之后,这样的功能必须在没有点击运行。这个怎么做?

+0

请说明,$(document).ready(〜)在页面加载时被调用,所以不知道还需要什么? – 2010-11-12 17:37:33

+0

document.ready等于页面加载或onload事件,无论放置在它下面执行...在服务器端代码完成后... – kobe 2010-11-12 17:38:34

+0

在eg。将只能运行点击功能(点击图片),但我需要它在页面加载后立即运行(无需点击图片)。 – jaclerigo 2010-11-12 17:42:45

回答

3

您可以用each替代click

+0

您的解决方案完美无缺。 – jaclerigo 2010-11-12 17:46:02

4
$(function() { 
    $('.gray').attr('src', grayscale($('.gray').attr('src'))); 
}); 
+0

请编辑它以使其易读 – 2010-11-12 17:51:49

0

传递给$函数作为DOM就绪

0
$(function() { 
    $('.gray').attr('src', function() { return grayscale(this.src); }); 
}); 

.attr()进行迭代,你(文件)。就绪被立即调用。 /欢呼

0

如果你想分配一个点击回调并立即运行,你可以发送点击事件到对象。 (选择器).trigger(“onclick”);