/** * Created by wangjian on 16/1/20. */ define(['dojo/_base/declare', 'dijit/_WidgetBase', 'dojo/_base/lang', 'dojo/_base/html', 'dojo/on', 'dojo/mouse', 'dojo/_base/fx', 'dojo/topic', 'dojo/Evented' ], function(declare, _WidgetBase, lang, html, on, Mouse, baseFx, topic, Evented) { var ANIMATION_DURATION = 1000, AUTO_CLOSE_INTERVAL = 10000, STATE_HIDE = 0, STATE_SHOW = 1; return declare([_WidgetBase, Evented], { 'baseClass': 'jimu-appstate-popup', declaredClass: 'jimu.dijit.AppStatePopup', currentState: STATE_HIDE, timeoutHandler: undefined, constructor: function(params) { this.inherited(arguments); if('animationDuration' in params) { ANIMATION_DURATION = params.animationDuration; } if('autoCloseInterval' in params) { AUTO_CLOSE_INTERVAL = params.autoCloseInterval; } }, postCreate: function() { if(window.appInfo.isRunInMobile){ html.addClass(this.domNode, 'mobile'); } var header = html.create('div', { 'class': 'appstate-header' }); html.create('div', { 'class': 'appstate-title', innerHTML: this.nls.title }, header); var closeNode = html.create('div', { 'class': 'appstate-close' }, header); html.place(header, this.domNode); var labelNode = html.create('div', { 'class': 'appstate-tips', innerHTML: this.nls.restoreMap }); html.place(labelNode, this.domNode); this.own(on(labelNode, 'click', lang.hitch(this, function() { this.emit('applyAppState'); this.hide(); }))); this.own(on(closeNode, 'click', lang.hitch(this, function() { this.hide(); }))); this.own(on(this.domNode, Mouse.enter, lang.hitch(this, function() { this._timerStop(); }))); this.own(on(this.domNode, Mouse.leave, lang.hitch(this, function() { this._timerStart(); }))); }, show: function() { var animProperties; if(window.appInfo.isRunInMobile){ animProperties = { top: { start: -120, end: 0 } }; }else { animProperties = { bottom: { start: -100, end: 10 } }; } baseFx.animateProperty({ node: this.domNode, duration: ANIMATION_DURATION, properties: animProperties, onEnd: lang.hitch(this, function() { this.currentState = STATE_SHOW; }) }).play(); //wait for splash hide, when init topic.subscribe("splashPopupShow", lang.hitch(this, function () { this._timerStop(); })); topic.subscribe("splashPopupHide", lang.hitch(this, function () { this._timerStart(); })); this.timeoutHandler = setTimeout(lang.hitch(this, this.hide), AUTO_CLOSE_INTERVAL); }, hide: function() { if(this.currentState === STATE_HIDE) { return; } var animProperties; if(window.appInfo.isRunInMobile){ animProperties = { top: { start: 0, end: -120 } }; }else { animProperties = { bottom: { start: 10, end: -100 } }; } baseFx.animateProperty({ node: this.domNode, duration: ANIMATION_DURATION, properties: animProperties, onEnd: lang.hitch(this, function() { this.currentState = STATE_HIDE; html.setStyle(this.domNode, 'display', 'none'); }) }).play(); }, _timerStart: function () { if (this.currentState === STATE_SHOW && !this.timeoutHandler) { this.timeoutHandler = setTimeout(lang.hitch(this, this.hide), AUTO_CLOSE_INTERVAL); } }, _timerStop: function () { if (this.timeoutHandler) { clearTimeout(this.timeoutHandler); this.timeoutHandler = undefined; } } }); });