我正在使用 jQuery 的Jcrop插件进行照片处理。我终于让它在 Firefox 和 IE8 中成功运行,但在 Chrome 和 Safari 中遇到了一些奇怪的行为。
Jcrop代码
var api;
$(window.load(function() {
var orimg = $('#image1');
//Create Image to get dimensions of full size photo
var pic = $('<img>').attr('src', orimg.attr('src')).css('display', 'none').appendTo('#form1');
var h = pic.height();
var w = pic.width();
//set defaults for jcrop
var opt = {
aspectRatio: 1,
onSelect: storeCoords,
onChange: storeCoords,
trueSize: [w, h], //actual size of pic vs. styled size on page
bgColor: '#EEEEEE',
bgOpacity: .7,
setSelect: [150, 150, 50, 50]
};
$('#crop_button').click(function() {
//initialize jcrop
api = $.Jcrop(orimg, opt);
});
$('#cancel_button').click(function() {
api.destroy();
});
});
function storeCoords(c) {
$('#X').val(c.x);
$('#Y').val(c.y);
$('#W').val(c.w);
$('#H').val(c.h);
}
最初我只是认为在storeCoords
调用函数时它没有存储坐标。但是,我将以下代码添加到storeCoords
函数中以查看发生了什么:
var msg = '';
$.each(c, function(index, value) {
msg += index + ':' + value + ' ';
});
$('#debug_output').html(msg + '<br />');
在 Firefox 和 IE 中,它会输出裁剪框每次调整大小/移动的坐标。在 Chrome/Safari 中(使用该onChange:
属性时),我得到了一行正确的数据,但随后它继续用零覆盖该数据。
- x:50 y:50 x2:150 y2:150 w:100 h:100
- x:50 y:50 x2:150 y2:150 w:100 h:100
- x:0 y:0 x2:0 y2:0 w:0 h:0 x:0 y:0
- x2:0 y2:0 w:0 h:0 x:0 y:0 x2:0 y2:0
- w:0 h:0 x:0 y:0 x2:0 y2:0 w:0 h:0
- x:0 y:0 x2:0 y2:0 w:0 h:0
单独使用该onSelect:
属性会产生全零(Chrome/Safari)
所以我不知道他们为什么要调用/覆盖这些值。
编辑
我已经更新了要使用的代码,$(function(){})
而不是$(window).load(function(){})
并且遇到了相同的结果。我已经建立了一个产生相同结果的演示页面。我不确定这是 Jcrop 的错误还是我正在做的事情。它仅在我指定trueSize
属性时发生。插件的非缩小版可以在这里查看。