define(function (require, exports) { var mask = $('
'); 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); console.log("call mask.") maskScreen(function () { console.log("mask callback"); ele.css("opacity", "0"); 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")); }); });