2

最新バージョンのjquery.jcropを使用しています。画像に対してjcrop()を呼び出すと、トリミングは機能しますが、コールバックは呼び出されません。これにより、後で使用するためにjcrop_apiを設定できなくなります。具体的には、画像を変更できるようにしたいので、destroy()メソッドが必要です。

function setJCrop() {
    //Set image for cropping
    jQuery('#preview').Jcrop( {
        minSize : [126, 126],
        setSelect : [ 0, 0, 126, 126 ],
        //onChange: updateMeasurements,
        onSelect: updateMeasurements,
        aspectRatio: 1
    }, function() {
        jcrop_api = this;  //callback not being called
    } );
}

これは、jQueryready関数の次の呼び出しに切り替えたときに発生し始めました。

jQuery(document).ready(function($) {
4

2 に答える 2

2

Justinのコードは、ドキュメントに書かれていることとほぼ同じです。しかし、IE6,7,8のAPIを使用して画像を再構築する場合は、一度実行するとフォールオーバーします。なんで?IEに問題があるからです。

APIを起動するためのより互換性のある方法は、次のようになります。

スクリプトの最も外側の部分でAPIを定義します。

var jcrop_api;

次に、APIを開始する必要がある場合、たとえば同じページで更新した後、これを行います(この行は、IEやその他の奇妙なブラウザーを満足させるものです)マスターページでクロッパーが使用されることがあるため、2つのタグを使用しますそして私はそれを例えばだけ残しました。また、オプションは設定していませんが、必要に応じて設定できます。

jcrop_api = $.Jcrop($('#SourceImage, #body_SourceImage'), {});

次に、画像ごとにクロッパーを開始できます

       jcrop_api.setOptions({
            boxWidth: 500,
            onSelect: updateCoords,
            minSize: [thisImage.Min.Width, thisImage.Min.Height],
            aspectRatio: thisImage.AspectRatio  //1.3 for example
        });
        jcrop_api.setImage(uploadLocation + fileName);

重要なのは、トリミングが終了したら、APIを破棄して、やり直す必要があるということです。繰り返しますが、すべてのブラウザを満足させるためです。

 jcrop_api.destroy();
于 2012-05-01T16:16:13.967 に答える
0

jcrop_apiこのように、最初にJcrop呼び出しのスコープ外で変数を宣言するようにしてください。リストされているコードは、単に変数を割り当てるだけです。それでもコールバックが実行されているかどうか疑わしい場合はalert()、そこに入れてテストしてください。

var jcrop_api;

function setJCrop() {
    //Set image for cropping
    $('#preview').Jcrop( {
        minSize : [126, 126],
        setSelect : [ 0, 0, 126, 126 ],
        //onChange: updateMeasurements,
        onSelect: updateMeasurements,
        aspectRatio: 1
    },function(){
      jcrop_api = this;
    } );
}
于 2012-04-28T08:26:07.263 に答える