CropperJS getCroppedCanvas() 在第二次初始化时返回 null

Tom*_*mov 3 javascript jquery cropperjs

该方法在就绪事件中被调用。在第一次调用时它有效。当模态关闭时,我正在破坏cropper - cropper.destroy()。第二次打开模态后,裁剪器再次初始化,但这次cropper.getCroppedCanvas()返回null

let cropper = new Cropper(image, {
                dragMode: 'move',
                aspectRatio: ratio,
                restore: false,
                guides: false,
                center: false,
                highlight: false,
                cropBoxMovable: false,
                cropBoxResizable: false,
                toggleDragModeOnDblclick: false,
                ready: function () {

                    modal.find(".save").on("click", function () {
                        console.log(cropper.getCroppedCanvas())
                        cropper.getCroppedCanvas().toBlob(function (blob) {
                            let formData = new FormData()
                            formData.append("croppedImage", blob)

                            jQuery.ajax({
                                method: "post",
                                url: "index.php?option=com_image_slideshows&task=slideshow.saveCroppedImage",
                                data: formData,
                                processData: false,
                                contentType: false
                            })
                            .done(function (response) {
                                modal.modal("hide")
                            })
                        })
                    })

                    cropper.crop()
                }
            })
Run Code Online (Sandbox Code Playgroud)

在模态关闭时会发生这种情况:

modal.on("hidden.bs.modal", function () {
                cropper.destroy()
                jQuery("#cropper-modal .modal-body").html(
                    jQuery("<img>", {
                        id: "image",
                        "class": "cropper-hidden"
                    })
                )

            })
Run Code Online (Sandbox Code Playgroud)

小智 5

我的猜测是您最初设置的cropper变量:

let cropper = new Cropper(...)

第二次仍然在您的就绪函数中被引用。我会首先尝试确保在调用cropper.destroy() 之后将cropper 变量设置为null。

您还可以尝试通过访问在就绪函数中访问正确的 Cropper 实例this.cropper,例如:

ready: function () {
  modal.find(".save").on("click", function () {
    console.log(this.cropper.getCroppedCanvas());
  }
}
Run Code Online (Sandbox Code Playgroud)