使用jQuery动画和服务器加载延迟的笨拙转换-改进方法?
我有一个预览工具,当用户选择一个方向时,重新布置屏幕,使其具有更宽(横向)或更高(纵向)的预览窗口,其中包含生成的图像 我希望发生的是使用jQuery动画和服务器加载延迟的笨拙转换-改进方法?,jquery,css,Jquery,Css,我有一个预览工具,当用户选择一个方向时,重新布置屏幕,使其具有更宽(横向)或更高(纵向)的预览窗口,其中包含生成的图像 我希望发生的是 用户选择新方向(例如横向) 他们看到一个加载的gif,比如500毫秒 当他们看到正在加载的gif时,预览窗口将调整到正确的尺寸 然后,新生成的图像将显示在预览面板中 下面是问题的核心部分PrintPreviewer对象的两个片段updatePreview()和resizePreviewWindow() 问题是这两个函数都试图使用css()方法将新的背景图像插
- 用户选择新方向(例如横向)
- 他们看到一个加载的gif,比如500毫秒
- 当他们看到正在加载的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");
}
}
}
我已经解决了一些问题,但我认为我是以一种相对迂回的方式解决的。我不想使用$.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");
});
});