选择JS / jQuery事件需要帮助

时间:2011-01-04 17:01:36

标签: javascript jquery events

我所拥有的是一个基于jQuery的小脚本,用于灰度图像。

它有效,但我选择会触发它的事件有一个大问题。 我需要它只是在加载图像时自动触发。现在,这个:

imgObj.ready

在IE浏览器中完美运行,在Firefox中每次刷新都是赌博,在Safari / Chrome / Opera中根本没有。

然而:

imgObj.click

在所有浏览器中都很棒,但我需要它自动发生,而不需要点击。 (或者使用模拟点击,但我没有成功,任何人都知道如何?)

最后这个:

imgObj.load

工作“太好” - 它适用于所有浏览器,但不断重复执行该功能 - 我尝试将一个变量放在一个函数中,使其只执行一次,但它不起作用,。 load继续重新执行。

对于这篇长篇文章感到抱歉,非常感谢阅读 - 下面是完整的代码。

    var imgObj = $('#image'); 

        imgObj.click(function(){

            var imgObj = document.getElementById('image');

            if($.browser.msie){
                grayscaleImageIE(imgObj);
            } else {
                imgObj.src = grayscaleImage(imgObj);
            }           
        });

    function grayscaleImageIE(imgObj)
    {
        imgObj.style.filter = 'progid:DXImageTransform.Microsoft.BasicImage(grayScale=1)';
    }

    function grayscaleImage(imgObj)
    {


        var canvas = document.createElement('canvas');
        var canvasContext = canvas.getContext('2d');

        var imgW = imgObj.width;
        var imgH = imgObj.height;
        canvas.width = imgW;
        canvas.height = imgH;

        canvasContext.drawImage(imgObj, 0, 0);
        var imgPixels = canvasContext.getImageData(0, 0, imgW, imgH);

        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;
            }
        }

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

2 个答案:

答案 0 :(得分:4)

这个怎么样?

imgObj.one('load',function(){

        var imgObj = document.getElementById('image');

        if($.browser.msie){
            grayscaleImageIE(imgObj);
        } else {
            imgObj.src = grayscaleImage(imgObj);
        }           
    });

答案 1 :(得分:0)

你试过吗

$(document).ready(function(){ 

    var imgObj = $('#image'); 
    if($.browser.msie){
       grayscaleImageIE(imgObj);
    } else {
       imgObj.src = grayscaleImage(imgObj);
    }     
});