ajax - ajax成功响应后如何调整颜色框的大小
问题描述
通常为了使颜色框根据内容调整它的大小,我使用这个片段:
$('#colorbox').colorbox({
onComplete: function () {
$(this).colorbox.resize();
}
});
但是这次它不起作用,当我在 ajax 函数中尝试同样的事情时,在成功响应之后:
$.ajax({
data:number,
dataType: "json",
type:"POST",
url : "payment/request1",
cache: false,
success: function (response) {
console.log(response);
if(response === true){
$.colorbox({html:'<div id="paymentblock"><div><h2 style="color:#444;">Open app in your phone</h2></div><div style="text-align:center;"><p>Payment with '+number+'</p><img src="/images/giphy.gif"></div>'});
$('#edit-commerce-payment-payment-details-number').css('background','#fff').val('');
$('#colorbox').colorbox({
onComplete: function () {
$(this).colorbox.resize();
}
});
}else{
$.colorbox({html:'<div id="paymentblock"><div><h2 style="color:#444;">An error occurred</h2></div><div style="text-align:center;"><p>Kontakta oss.</p></div>'});
$('#colorbox').colorbox({
onComplete: function () {
$(this).colorbox.resize();
}
});
}
}
});
结果是颜色框以太小的尺寸打开,并且没有调整大小以适应内容。我究竟做错了什么?
解决方案
我创建了一个自定义函数,用于在加载内容后、调整浏览器窗口大小后或在移动设备上,在有效改变浏览器窗口宽度的方向更改后调整颜色框的大小。
现代网页设计必须处理广泛变化的浏览器宽度,尤其是手机和平板电脑上的用户如此之多,因此您加载的内容应该是响应式的,从大约 320 像素宽度开始。然后,让颜色框大小由可用的浏览器宽度以及出于美学原因的最大合理大小来确定。
这包含在每个页面底部的 javascript 文件中:
/* Colorbox resize function */
var resizeTimer;
var resizeColorBox = function() {
if (resizeTimer) clearTimeout(resizeTimer);
resizeTimer = setTimeout(function() {
if ($("#cboxOverlay").is(":visible")) {
$.colorbox.resize({maxWidth:"400px",width:"95%"});
}
}, 300);
};
// Resize Colorbox when resizing window or changing mobile device orientation
$(window).resize(resizeColorBox);
window.addEventListener("orientationchange", resizeColorBox, false);
然后,colorbox函数本身有几个参数需要正确设置。请注意,我将 closebutton 设置为 false,因为我的 HTML 内容包含一个调用 colorbox 关闭函数的关闭按钮。
$.colorbox({
width:"95%",
maxWidth:400,
maxHeight:"95%",
speed:300,
closeButton:false,
onComplete : function() {
$(this).colorbox.resize({width:"95%",maxWidth:400});
$(window).trigger("resize");
},
html:'Your HTML Here'
});
因此,您的代码只需要在加载 AJAX 内容后调用 resizeColorBox() 函数就可以了。此外,它还可以处理其他调整大小的情况。
[编辑] 如果你真的需要调整到内部内容的宽度,那么 resize 函数应该首先获取内部内容的容器 div 的宽度,然后调整到该宽度(可能加上颜色框填充的宽度等) . 在这种情况下,调整大小功能将更符合以下原则:
var resizeColorBox = function() {
var w = $('content_container').width() + padding_w;
var h = $('content-container').height() + padding_h;
if (resizeTimer) clearTimeout(resizeTimer);
resizeTimer = setTimeout(function() {
if ($("#cboxOverlay").is(":visible")) {
$.colorbox.resize({width:w, height:h});
}
}, 300);
};
推荐阅读
- url - 通过 URL 调用时具有不同的下拉值
- javascript - 在javascript中切片一个字符串
- reactjs - 如何在 Cloud9 上运行从头开始的 React 应用程序?
- macos - Macintosh 说文字转语音:新声音不能接受音素代码?
- zsh - 如何在 iterm 中区分 zsh 和 ssh 终端?
- python - 如何修复通过 pip install 安装 pystan 时弹出的这个错误?
- powerquery - Power Query 从联接查询的结果表中选择列
- c# - 在第二个反斜杠之后,我将使用什么正则表达式来删除所有内容?
- python - ValueError:时间数据 '07-24-2018 16:40: 0' 与格式 '%m-%d-%Y %H:%M:%S' 不匹配(匹配)
- ios - 为添加到存储驱动器的任何新内容设置默认文件路径