这是我从.click(function { loadBox(url); });
按钮上调用的函数:
var loadBox = function(url) {
var mask = $('#mask');
var box = $('#box');
$(mask).fadeTo(600, 0.8).promise().done(function() {
var winH = $(window).height();
var winW = $(window).width();
var boxH = winH * 0.6;
var boxW = winW * 0.8;
$(box).css({
width: boxW + 'px',
height: boxH + 'px',
top: ((winH - boxH) / 2) + 'px',
left: ((winW - boxW) / 2) + 'px'
});
$(box).load(url).promise().done(function () {
$(box).slideDown(300);
});
$(mask).click(function() {
if($(':animated').length)
return false;
$(this).hide();
$(box).hide();
});
});
}
#mask
/$(mask)
是一个<div>
仅用作叠加层的容器,
#box
/$(box)
是另一个<div>
加载*.php页面的容器,$(box).load(url)...
其中url类似于/pages/player.php?match_id=1&player_id=15
.
到目前为止,它似乎正在起作用,只有一件小事让我感到不安,关于:
$(box).load(url).promise().done(function () {
$(box).slideDown(300);
});
我有一张桌子,里面有不同的球员,当你点击一个球员的名字#box
时,屏幕中央会弹出一个球员的名字,里面有player.php
那个球员的持有信息。
但是如果#box
之前加载了一些其他玩家的信息,框将首先显示 ( $(box).slideDown(300);
),然后它的内容会发生变化 - 所以在加载新信息之前,您会看到其他玩家的信息大约半秒。
我以为<function>.promise().done(...
会等到<function>
- 在我的情况下.load(url)
完成,然后才执行.done(function { });
范围内的所有内容,还是我不正确?
在显示using之前等到.load(url)
呼叫完成的正确方法是什么?$(box)
.slideDown()