blob: 82b97a13ae6f6965db26416c3d55dca7fc305cd0 [file] [log] [blame]
qiaoweif044a742019-07-10 16:04:20 +08001/**
2 * aui-actionsheet.js
3 * @author 流浪男
4 * Licensed under the MIT license.
5 * http://www.opensource.org/licenses/mit-license.php
6 */
7(function( window, undefined ) {
8 "use strict";
9 var auiActionsheet = function() {
10 };
11 var isShow = false;
12 auiActionsheet.prototype = {
13 init: function(params,callback){
14 this.frameBounces = params.frameBounces;
15 this.title = params.title;
16 this.buttons = params.buttons;
17 this.cancelTitle = params.cancelTitle;
18 this.destructiveTitle = params.destructiveTitle;
19 this.maskDiv;
20 this.actionsheetDiv;
21 var self = this;
22 self.open(params,callback);
23 },
24 open: function(params,callback) {
25 var titleHtml='',buttonsHtml='',destructiveHtml='',cancelHtml='',btnHtml='';
26 var self = this;
27 if(self.actionsheetDiv || (!self.title && !self.buttons && !self.cancelTitle && !self.destructiveTitle))return;
28 if(!self.maskDiv){
29 self.maskDiv = document.createElement("div");
30 self.maskDiv.className = "aui-mask";
31 document.body.appendChild(self.maskDiv);
32 }
33 self.actionsheetDiv = document.createElement("div");
34 self.actionsheetDiv.className = "aui-actionsheet";
35 document.body.appendChild(self.actionsheetDiv);
36 if(self.title){
37 titleHtml = '<div class="aui-actionsheet-title aui-border-b aui-font-size-12">'+self.title+'</div>';
38 }
39 if(self.buttons && self.buttons.length){
40 for(var i = 0; i < self.buttons.length;i++){
41 if(i == self.buttons.length-1){
42 buttonsHtml += '<div class="aui-actionsheet-btn-item">'+self.buttons[i]+'</div>';
43 }else{
44 buttonsHtml += '<div class="aui-actionsheet-btn-item aui-border-b">'+self.buttons[i]+'</div>';
45 }
46 }
47 }
48 if(self.destructiveTitle){
49 destructiveHtml = '<div class="aui-actionsheet-btn-item aui-border-t aui-text-danger">'+self.destructiveTitle+'</div>';
50 }else{
51 var destructiveHtml = '';
52 }
53 if(self.title || (self.buttons && self.buttons.length)){
54 btnHtml = '<div class="aui-actionsheet-btn">'+titleHtml+''+buttonsHtml+''+destructiveHtml+'</div>';
55 }
56 if(self.cancelTitle){
57 cancelHtml = '<div class="aui-actionsheet-btn"><div class="aui-actionsheet-btn-item">'+self.cancelTitle+'</div></div>';
58 }
59 self.actionsheetDiv.insertAdjacentHTML('beforeend', btnHtml+cancelHtml);
60 var actionsheetHeight = document.querySelector(".aui-actionsheet").offsetHeight;
61 self.maskDiv.classList.add("aui-mask-in");
62 self.actionsheetDiv.style.webkitTransform = self.actionsheetDiv.style.transform = "translate3d(0,0,0)";
63 self.actionsheetDiv.style.opacity = 1;
64 self.actionsheetDiv.addEventListener("touchmove", function(event){
65 event.preventDefault();
66 })
67 self.maskDiv.addEventListener("touchmove", function(event){
68 event.preventDefault();
69 })
70 if(typeof(api) != 'undefined' && typeof(api) == 'object' && self.frameBounces){
71 api.setFrameAttr({
72 bounces:false
73 });
74 }
75 var actionsheetButtons = document.querySelectorAll(".aui-actionsheet-btn-item");
76 if(actionsheetButtons && actionsheetButtons.length > 0){
77 setTimeout(function(){
78 self.maskDiv.onclick = function(){self.close();return;};
79 for(var ii = 0; ii < actionsheetButtons.length; ii++){
80 (function(e){
81 actionsheetButtons[e].onclick = function(){
82 if(callback){
83 callback({
84 buttonIndex: e+1,
85 buttonTitle: this.textContent
86 });
87 };
88 self.close();
89 return;
90 }
91 })(ii)
92 }
93 }, 350)
94 }
95 },
96 close: function(){
97 var self = this;
98 if(typeof(api) != 'undefined' && typeof(api) == 'object' && self.frameBounces){
99 api.setFrameAttr({
100 bounces:true
101 });
102 }
103 if(self.actionsheetDiv){
104 var actionsheetHeight = self.actionsheetDiv.offsetHeight;
105 self.actionsheetDiv.style.webkitTransform = self.actionsheetDiv.style.transform = "translate3d(0,"+actionsheetHeight+"px,0)";
106 self.maskDiv.style.opacity = 0;
107 setTimeout(function(){
108 if(self.maskDiv){
109 self.maskDiv.parentNode.removeChild(self.maskDiv);
110 }
111 self.actionsheetDiv.parentNode.removeChild(self.actionsheetDiv);
112 self.actionsheetDiv = self.maskDiv = false;
113 }, 300)
114 }
115 }
116 };
117 window.auiActionsheet = auiActionsheet;
118})(window);