123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- /**
- * aui-popup.js
- * @author 流浪男
- * Licensed under the MIT license.
- * http://www.opensource.org/licenses/mit-license.php
- */
- (function( window, undefined ) {
- "use strict";
- var auiPopup = function() {
- };
- var isShow = false;
- auiPopup.prototype = {
- init: function(params,callback){
- this.frameBounces = params.frameBounces;
- this.location = params.location;
- this.buttons = params.buttons;
- this.maskDiv;
- this.popupDiv;
- var self = this;
- self.open(params,callback);
- },
- open: function(params,callback) {
- var buttonsHtml='',locationClass = 'aui-popup-top';
- var self = this;
- if(self.popupDiv){
- self.close();
- return;
- }
- if(!self.maskDiv){
- self.maskDiv = document.createElement("div");
- self.maskDiv.className = "aui-mask";
- document.body.appendChild(self.maskDiv);
- }
- switch (self.location) {
- case "top":
- locationClass = 'aui-popup-top';
- break;
- case "top-left":
- locationClass = 'aui-popup-top-left';
- break;
- case "top-right":
- locationClass = 'aui-popup-top-right';
- break;
- case "bottom":
- locationClass = 'aui-popup-bottom';
- break;
- case "bottom-left":
- locationClass = 'aui-popup-bottom-left';
- break;
- case "bottom-right":
- locationClass = 'aui-popup-bottom-right';
- break;
- default:
- locationClass = 'aui-popup-top';
- break;
- }
- self.popupDiv = document.createElement("div");
- self.popupDiv.className = "aui-popup "+locationClass;
- self.popupDiv.innerHTML = '<div class="aui-popup-arrow"></div><div class="aui-popup-content"></div>';
- document.body.appendChild(self.popupDiv);
- if(self.buttons && self.buttons.length){
- buttonsHtml += '<ul class="aui-list aui-list-noborder">';
- for(var i = 0; i < self.buttons.length;i++){
- buttonsHtml += '<li class="aui-list-item aui-list-item-middle">';
- buttonsHtml += '<div class="aui-list-item-label-icon"><img src="'+self.buttons[i].image+'"></div>';
- buttonsHtml += '<div class="aui-list-item-inner">'+self.buttons[i].text+'</div>';
- buttonsHtml += '</li>';
- }
- buttonsHtml += '</ul>';
- }
- document.querySelector(".aui-popup .aui-popup-content").insertAdjacentHTML('beforeend', buttonsHtml);
- var actionsheetHeight = document.querySelector(".aui-popup").offsetHeight;
- self.maskDiv.classList.add("aui-mask-in");
- self.popupDiv.classList.add("aui-popup-in");
- self.popupDiv.addEventListener("touchmove", function(event){
- event.preventDefault();
- })
- self.maskDiv.addEventListener("touchmove", function(event){
- event.preventDefault();
- })
- if(typeof(api) != 'undefined' && typeof(api) == 'object' && self.frameBounces){
- api.setFrameAttr({
- bounces:false
- });
- }
- var popupButtons = document.querySelectorAll(".aui-popup .aui-list-item");
- if(popupButtons && popupButtons.length > 0){
- setTimeout(function(){
- self.maskDiv.onclick = function(){self.close();return;};
- for(var ii = 0; ii < popupButtons.length; ii++){
- (function(e){
- popupButtons[e].onclick = function(){
- if(self.buttons[e].value){
- var _value = self.buttons[e].value;
- }else{
- var _value = null;
- }
- if(callback){
- callback({
- buttonIndex: e+1,
- buttonTitle: this.textContent,
- buttonValue: _value
- });
- };
- self.close();
- return;
- }
- })(ii)
- }
- }, 350)
- }
- },
- close: function(){
- var self = this;
- if(typeof(api) != 'undefined' && typeof(api) == 'object' && self.frameBounces){
- api.setFrameAttr({
- bounces:true
- });
- }
- if(self.popupDiv){
- var actionsheetHeight = self.popupDiv.offsetHeight;
- self.popupDiv.classList.add("aui-popup-out");
- self.maskDiv.style.opacity = 0;
- setTimeout(function(){
- if(self.maskDiv){
- self.maskDiv.parentNode.removeChild(self.maskDiv);
- }
- self.popupDiv.parentNode.removeChild(self.popupDiv);
- self.maskDiv = self.popupDiv = false;
- }, 300)
- }
- }
- };
- window.auiPopup = auiPopup;
- })(window);
|