我有一个预览工具 - 当用户选择方向时,重新布置屏幕以包含一个包含生成图像的更宽(横向)或更高(纵向)预览窗口。
我想要发生的是......
以下是来自PrintPreviewer对象的两个片段,它们是问题的核心,updatePreview()和resizePreviewWindow()。
问题是这两个函数都试图使用css()方法将新的背景图像插入到#preview区域。当我试图在resizePreviewWindow()的步骤中添加一个加载gif时,遗憾的是,加载器gif从未显示过。因此,我现在选择在下面暂时删除预览背景图像。我需要这样做,因为如果旧的bg图像保留在预览面板中,同时生成了新的(正确比例)图像,那么当resizePreviewWindow()函数完成其工作时,它看起来非常奇怪,大约200ms。
A)作为一种为用户切换方向的方法,这已经感觉相当笨重了。虽然这有效,但我觉得它可以做一些整理和干预,并且会很感激一些指导。
B)我希望在updatePreview()指向/ prints / preview服务器的时候能够使用加载gif吗?并在预览面板中显示,同时获取新生成的图像并将其流式传输到位。
var PrintPreviewer = {
init: function () {
var data = this.cleanForm();
this.updatePreview(data);
this.selectBoxUpdate();
this.changeColor();
this.changeTextarea();
this.changeStyle();
},
// removed some code for clarity
updatePreview: function (data) {
var preview = $('#preview')
preview.fadeIn('slow', function() {
preview.attr('preview-preface', '');
preview.css("background-image","url('/prints/preview?"+data+"')");
console.log(data);
});
},
//removed some code for clarity
resizePreviewWindow: function (elem) {
// when user selects new orientation put correct shape window
var prevSurr = $('#previewSurround');
var prev = $('#preview');
switch (elem.val())
{
case 'landscape':
prevSurr.removeClass("portrait square").addClass("landscape");
prev
.css({
"background-image": "none",
})
.animate({
height: "380px",
}, 100);
break;
case 'portrait':
prevSurr.removeClass("landscape square").addClass("portrait");
prev
.css({
"background-image": "none",
})
.animate({
height: "540px",
}, 100);
break;
case 'square':
prevSurr.removeClass("portrait landscape").addClass("square");
prev
.css({
"background-image": "none",
})
.animate({
height: "420px",
}, 100);
break;
default:
console.log("hi");
}
}
}
答案 0 :(得分:0)
我已经找到了我的问题的一些,但我认为我已经以相对迂回的方式完成了它。我不想使用$.ajax()
方法,但最终还是采取了预期的效果。但是,我只能在页面加载时使用加载GIF - 从不在用户自己启动updatePreview()函数时。仍然在寻找一个可靠的答案,为什么会这样。
var PrintPreviewer = {
init: function () {
var data = this.cleanForm();
this.updatePreview(data);
},
updatePreview: function (data) {
var preview = $('#preview')
var url = "/prints/preview?"+data
PrintPreviewer.loadContent(url);
},
loadContent: function(href) {
$.ajax({
url: href,
success: function (data) {
$("#preview")
.css("background-image","url('"+href+"')")
.attr('preview-preface', '');
}
});
},
// removed code for brevity
resizePreviewWindow: function (elem) {
// when user selects new orientation put correct shape window
var prevSurr = $('#previewSurround');
var prev = $('#preview');
switch (elem.val())
{
case 'landscape':
prevSurr.removeClass("portrait square").addClass("landscape");
prev
.css({
"background-image": "none",
})
.animate({
height: "380px",
}, 100);
break;
case 'portrait':
prevSurr.removeClass("landscape square").addClass("portrait");
prev
.css({
"background-image": "none",
})
.animate({
height: "540px",
}, 100);
break;
case 'square':
prevSurr.removeClass("portrait landscape").addClass("square");
prev
.css({
"background-image": "none",
})
.animate({
height: "420px",
}, 100);
break;
default:
console.log("hi");
}
}
}
$(document).ready(function() {
$('#preview').ajaxStart(function(){
$(this).addClass("loading").attr('preview-preface', '');
});
$('#preview').ajaxComplete(function(){
$(this).removeClass("loading");
});
});