Javascript jCrop无法在某些浏览器上首次初始化裁剪

Javascript jCrop无法在某些浏览器上首次初始化裁剪,javascript,php,jquery,html,jcrop,Javascript,Php,Jquery,Html,Jcrop,我一直在尝试用jCrop和PHP创建简单的头像更改/裁剪/上传功能。Chrome和Opera上的一切都很完美,但Safari、Firefox和InternetExplorer(都是最新版本)上的一切都失败了。所以问题就在这里——当我尝试更改我的头像时,裁剪是在Chrome和Opera上初始化的,看起来是这样的: 当我尝试在Firefox、Safari或Internet Explorer上执行同样的操作时,会发生以下情况: 所以我的实现非常简单,我只是使用HTML5 FormData API使用所

我一直在尝试用jCrop和PHP创建简单的头像更改/裁剪/上传功能。Chrome和Opera上的一切都很完美,但Safari、Firefox和InternetExplorer(都是最新版本)上的一切都失败了。所以问题就在这里——当我尝试更改我的头像时,裁剪是在Chrome和Opera上初始化的,看起来是这样的:

当我尝试在Firefox、Safari或Internet Explorer上执行同样的操作时,会发生以下情况:

所以我的实现非常简单,我只是使用HTML5 FormData API使用所选图像进行ajax调用,然后PHP处理请求,生成一个临时文件并返回我显示并尝试裁剪的Base64编码图像。当我的ajax调用获得成功响应时,我只需执行以下操作:

initializeCropping: function() {
        var _this = this;

            this.image.Jcrop({
                onSelect: function(coords) {
                    _this.trackCoordinates(coords);
                },
                bgColor: 'black',
                bgOpacity: .4,
                minSize: [300, 300],
                setSelect: [ 0, 0, 300, 300 ],
                aspectRatio: 1,
                boxWidth: 310,
                boxHeight: 310
            }, function() { _this.jCropApi = this; });
    }
(“this.image”是对已创建图像对象的jQuery选择器的引用) 在初始化jCrop之前,我还尝试使用javascript设置一些超时,但结果是一样的。。有什么想法吗?先谢谢你!:)


编辑:只有在第二次选择相同的图像时才有效…

如果我理解正确,我想我也遇到过同样的问题

尝试在每次完成裁剪时调用此函数,或者如果他关闭jcrop时执行裁剪或不执行裁剪。在我的例子中,我进行了一个ajax调用,以在模式中显示图像,然后允许用户使用jcrop,在保存、取消和转义时,我调用了这个destrocRopData()函数

function destroyCropData() {
        debugger;
        var prevDim = window.jcropVar;
        prevDim.destroy();
        $("#txtHeight").val("");
        $("#txtWidth").val("");
        $("#txtXpos").val("");
        $("#txtYpos").val("");
    }
并尝试将其值保存在一个全局变量中,以生成代码

initializeCropping: function() {
    var jcrop_api;

        this.image.Jcrop({
            onSelect: function(coords) {
                _this.trackCoordinates(coords);
            },
            bgColor: 'black',
            bgOpacity: .4,
            minSize: [300, 300],
            setSelect: [ 0, 0, 300, 300 ],
            aspectRatio: 1,
            boxWidth: 310,
            boxHeight: 310
        }, function() { jcrop_api = this; window.jcropVar = jcrop_api;});
}

希望这就是你想要的。抱歉,如果这不是您所期望的

事实上我已经解决了。css有一个问题,只有Opera和Chorme处理它。图像的大小和高度是固定的,然后jCrop的框属性就不起作用了。无论如何,谢谢你的帮助。

但是为什么我需要存储全局变量,而我希望它们只在该范围内工作?在这种情况下,你不需要全局变量,但是如果必须清除旧坐标的函数不在该范围内,那么我想我们应该使用全局变量。好的,我将坐标保存在JavaScript对象中,而不是DOM中,每次通过
trackCoordinates(coords)
方法初始化裁剪时,坐标都会被替换。我还试图破坏jCrop,但它在某些浏览器上无法工作。