qiaowei | f044a74 | 2019-07-10 16:04:20 +0800 | [diff] [blame^] | 1 | /** |
| 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); |