blob: fe26259ba8be42922ec7bed221a307ad0687e1da [file] [log] [blame]
qiaoweif044a742019-07-10 16:04:20 +08001/**
2 * aui-popup.js
3 * @author 流浪男
4 * @todo more things to abstract, e.g. Loading css etc.
5 * Licensed under the MIT license.
6 * http://www.opensource.org/licenses/mit-license.php
7 */
8(function( window, undefined ) {
9 "use strict";
10 var auiPopup = function() {
11 this._init();
12 };
13 var CLASS_MASK = "aui-mask",
14 CLASS_MASK_IN = 'aui-mask-in',
15 CLASS_MASK_OUT = 'aui-mask-out',
16 CLASS_POPUP = 'aui-popup',
17 CLASS_POPUP_IN = 'aui-popup-in',
18 CLASS_POPUP_OUT = 'aui-popup-out',
19 CLASS_POPUP_FOR = 'aui-popup-for';
20 var __MASK = '.'+CLASS_MASK,
21 __MASK_IN = '.'+CLASS_MASK_IN,
22 __MASK_OUT = '.'+CLASS_MASK_OUT,
23 __POPUP = '.'+CLASS_POPUP,
24 __POPUP_IN = '.'+CLASS_POPUP_IN,
25 __POPUP_OUT = '.'+CLASS_POPUP_OUT;
26 var popupStatus = false;
27 auiPopup.prototype = {
28 _init: function() {
29 var self = this;
30 var _btn = document.querySelectorAll("["+CLASS_POPUP_FOR+"]");
31 if(_btn){
32 for(var i=0;i<_btn.length;i++){
33 _btn[i].setAttribute("tapmode", "");
34 _btn[i].onclick = function(e){
35 var popupId = this.getAttribute(CLASS_POPUP_FOR);
36 var popupDom = document.getElementById(popupId);
37 if(popupDom){
38 if(popupDom.className.indexOf(CLASS_POPUP_IN) > -1 || document.querySelector(__POPUP_IN)){
39 self.hide(popupDom);
40 }else{
41 self.show(popupDom);
42 }
43 }else{
44 return;
45 }
46 }
47 }
48 }
49 },
50 show: function(el){
51 var self = this;
52 if(el.className.indexOf(CLASS_POPUP_IN) > -1 || document.querySelector(__POPUP_IN)){
53 self.hide(el);
54 return;
55 }
56 if(popupStatus) return;
57 if(!document.querySelector(__MASK)){
58 var maskHtml = '<div class="aui-mask"></div>';
59 document.body.insertAdjacentHTML('beforeend', maskHtml);
60 }
61 el.style.display = "block";
62 setTimeout(function(){
63 document.querySelector(__MASK).classList.add(CLASS_MASK_IN);
64 el.classList.add(CLASS_POPUP_IN);
65 popupStatus = true;
66 }, 10)
67 document.querySelector(__MASK).addEventListener("touchstart", function(event){
68 event.preventDefault();
69 self.hide(el);
70 })
71 el.addEventListener("touchmove", function(event){
72 event.preventDefault();
73 },false)
74 },
75 hide: function(el){
76 if(!popupStatus) return;
77 document.querySelector(__MASK).classList.remove(CLASS_MASK_IN);
78 document.querySelector(__MASK).classList.add(CLASS_MASK_OUT);
79 if(!document.querySelector(__POPUP_IN))return;
80 document.querySelector(__POPUP_IN).classList.add(CLASS_POPUP_OUT);
81 document.querySelector(__POPUP_IN).classList.remove(CLASS_POPUP_IN);
82 setTimeout(function(){
83 if(!document.querySelector(__POPUP_OUT))return;
84 document.querySelector(__POPUP_OUT).style.display = "none";
85 document.querySelector(__POPUP_OUT).classList.remove(CLASS_POPUP_OUT);
86 if(document.querySelector(__MASK)){
87 document.querySelector(__MASK).parentNode.removeChild(document.querySelector(__MASK));
88 }
89 popupStatus = false;
90 }, 300)
91 }
92 };
93 window.auiPopup = auiPopup;
94})(window);