2

如果我使用 camanJS 在我的图像上应用过滤器,它一切正常,但是当我单击第二个过滤器时,它需要返回到原始图像并将其应用到该图像上,但目前它会将第二个过滤器放在仍然存在的图像上上面有第一个过滤器。

这是我的 html 部分:

<table>
        <tr>
            <td><div id="photo"><canvas id="photoCanvas" width="500" height="500">Uw browser ondersteund geen canvas</canvas></div></td>
            <td><div id="filterContainer">
                    <h4>Please select your photo effect.</h4>
                    <ul id="filters">
                        <li> <a href="#" id="normal">Normal</a> </li>
                        <li> <a href="#" id="vintage">Vintage</a> </li>
                        <li> <a href="#" id="lomo">Lomo</a> </li>
                        <li> <a href="#" id="clarity">Clarity</a> </li>
                        <li> <a href="#" id="sinCity">Sin City</a> </li>
                        <li> <a href="#" id="sunrise">Sunrise</a> </li>
                        <li> <a href="#" id="pinhole">Pinhole</a> </li>
                    </ul>
                </div></td>
        </tr>
    </table>

我创建了一个带有 id photoCanvas 的画布,用于显示图像,并且我有一个包含不同过滤器的列表,如果单击它们会触发以下 javascript 部分:

$(function() {
Caman("#photoCanvas", "./images/183411_1871156496150_3955828_n.jpg", function () {
    this.render();
});

var filters = $('#filters li a');
//    originalCanvas = $('#canvas'),
//    photo = $('#photo');   

filters.click(function(e){

    e.preventDefault();

    var f = $(this);

    if(f.is('.active')){
        // Apply filters only once
        return false;
    }

    filters.removeClass('active');
    f.addClass('active');
    // Listen for clicks on the filters
    var effect = $.trim(f[0].id);

    Caman("#photoCanvas", "images/183411_1871156496150_3955828_n.jpg", function () {
        // If such an effect exists, use it:
        if( effect in this){
            this[effect]();
            this.render();
        }
    });
});
});

我试图告诉程序它需要使用特定的图像来应用过滤器,但它一直在堆叠过滤器。

我该如何解决这个问题,这样它就不会堆叠所有的过滤器,而是将图像重置为原始图像,然后应用新的过滤器?

4

1 回答 1

12

您可以简单地执行以下操作:

更改这部分代码(实际上您应该只添加一行):

YOUR CODE:

Caman("#photoCanvas", "images/183411_1871156496150_3955828_n.jpg", function () {
    // If such an effect exists, use it:
    if( effect in this){
        this[effect]();
        this.render();
    }
});

HOW YOU NEED TO CHANGE IT:

Caman("#photoCanvas", "images/183411_1871156496150_3955828_n.jpg", function () {
    // If such an effect exists, use it:
    if( effect in this){
        //NOTE THIS IS THE LINE THAT I ADD FOR YOU:
        this.revert();
        this[effect]();
        this.render();
    }
});

Hope now it works cool:))

Please let me know:)

Best Dinuz

于 2013-06-11T22:05:40.547 回答