Light12306/Web12306/js/ui/widget.js
2014-08-26 21:29:58 +08:00

112 lines
2.7 KiB
JavaScript

define(function (require, exports) {
var mask = $('<div id="mask"></div>');
var maskCallback = [];
var unmaskCallback = [];
var maskEleCount = 0;
document.body.appendChild(mask[0]);
//当动画完成后,如果没有显示的必要,那么就移除它。
//这里没有考虑没有如果没有这个事件触发的情况
mask.on("transitionend", function () {
var cb = null;
if (!mask.hasClass("final")) {
mask.hide();
while (cb = unmaskCallback.shift())
cb.call(mask);
} else {
while (cb = maskCallback.shift())
cb.call(mask);
}
});
//将当前对象置于居中的位置,并允许以指定方式做便宜
var centerEle = function (e, offsety) {
var width = e.width();
var height = e.height();
offsety = offsety || 20;
e.css("margin-left", "-" + (width / 2) + "px");
e.css("margin-top", "-" + (height / 2 + offsety) + "px");
if (!e.hasClass("float-dialog"))
e.addClass("float-dialog");
};
var maskScreen = exports.mask = function (callback) {
if (mask.hasClass("final")) {
if (callback) callback();
return;
}
if (callback)
maskCallback.push(callback);
var cb = null;
while (cb = unmaskCallback.shift())
cb.call(mask);
mask.height(document.body.scrollHeight + "px");
mask.show();
mask.height();
mask.addClass("final");
};
var unmaskScreen = exports.unmask = function (callback) {
if (!mask.hasClass("final")) {
callback && callback();
return;
}
if (callback)
maskCallback.push(callback);
var cb = null;
while (cb = maskCallback.shift())
cb.call(mask);
mask.removeClass("final");
};
exports.showFloatDialog = function (ele, callback) {
if (ele.attr("data-masked")) {
if (callback)
callback();
return;
}
maskEleCount++;
centerEle(ele);
ele.attr("data-masked", 1);
ele.css("opacity", "0");
maskScreen();
ele.show();
ele.animate({ opacity: '1', "margin-top": "+=20px" }, 'fast', 'linear', callback);
ele.trigger("openDialog");
};
exports.hideFloatDialog = function (ele, callback) {
if (!ele.attr("data-masked")) {
if (callback) callback();
return;
}
ele.removeAttr("data-masked");
maskEleCount--;
ele.animate({ opacity: '0', "margin-top": "-=20px" }, 'fast', 'linear', function () {
ele.hide();
if (!maskEleCount)
unmaskScreen(callback);
});
ele.trigger("closeDialog");
};
//监听文档级别事件,显示悬浮窗
$(document).on("refreshDialog.widget", function () {
var e = $(this);
var height = e.height();
e.animate({ top: "-" + (height / 2) + "px" }, 'fast', 'linear');
});
$(document).on("click.widget", ".float-dialog .cancel-button", function () {
exports.hideFloatDialog($(this).closest(".float-dialog"));
});
});