javascript - 需要帮助选择 JS/jQuery 事件

标签 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();      
    }

最佳答案

这个怎么样?

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

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

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

关于javascript - 需要帮助选择 JS/jQuery 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4596265/

相关文章:

javascript - 针对所有 child 而不是仅针对一个 child

img src 的 JavaScript 变量?

javascript - 需要替代 jQuery ui 选项卡的 iframe

rest - 如何将应用程序从 Grails 2.1.2 迁移到 Grails 2.3.5?

c++ - 虚幻引擎 4 : C++ Delegate not being called

javascript - $_POST 的值始终是我的 <tr> 的最后一个值

javascript - 如何创建一个按钮来在表单中添加 URL 链接

Javascript 检测什么 Chrome 版本

javascript - ajax 在本地主机上不起作用

javascript - 如何使用 vanilla JS 有条件地阻止同一元素的事件处理程序?