實現一個彈窗的封裝


前言

   這是阿里春招實習在線編程的一道題目:

用js實現,彈窗彈出時需要有半透明的蒙層,位置需要根據彈窗的大小實現左右、垂直居中,對話框需要有標題欄(標題欄有關閉功能)、內容欄、操作按鈕欄,不能直接使用第三方UI庫。

回答完這道題目之后,我想說總結一下自己封裝的這個彈窗插件,只是簡單的完成了部分功能,具體完整的功能,可以自行再添加~

源代碼:Gist

演示地址:Demo

主要使用方法:

頁面HTML結構:

 1 <div class="modal" id='modal'>
 2     <div class="modal-dialog">
 3   <div class="modal-header">對話框標題<a href="#" class="close">×</a></div>
 4     <div class="modal-content">對話框的內容</div>
 5     <div class="modal-controller">
 6         <button class='btn-ok'>確定</button>
 7         <button class='bnt-close close'>取消</button>
 8     </div>
 9     </div>
10 </div>

js調用方法:

1 var modal=new Modal(document.getElementById('modal'));
2 // 說明 : 實例化彈窗插件
3 
4 function openModal(){
5     modal.open();
6 }
7 // 說明 :modal.close();關閉彈窗 

下面是詳細的腳本解釋:

 1 (function(window){
 2   // 使用構造函數方法 聲明一個Modal對象
 3   var Modal=function(ele){
 4         this.$el=ele;
 5         this.init();
 6     }
 7  // 在Modal的原型上實現close,open,init方法,實現方法的復用
 8     Modal.prototype.close=function(){
 9         this.$el.style.display='none';
10     }
11     Modal.prototype.open=function(){
12         this.$el.style.display='block';
13     }
14     Modal.prototype.init=function(){
15         var self=this;
16        // 綁定關閉按鈕點擊事件處理函數,檢索所有 帶 .close類名 的按鈕
17         if(this.$el.addEventListener){
18             this.$el.addEventListener('click',function(e){
19                 e.preventDefault();
20                 var target=e.target;
21                 var classNames=target.className.split(' ');
22                 if(classNames.indexOf('close')!==-1){
23                     self.close();
24                 }
25             },false);
26         }else if(this.$el.attachEvent){
27             this.$el.attachEvent('onclick',function(e){
28                     e=e||window.event;
29                 if(e.preventDefault){
30                     e.preventDefault();
31                 }else{
32                     e.returnValue=false;
33                 }
34                 var target=e.target||e.srcElement;
35                 var classNames=target.className.split(' ');
36                 if(classNames.indexOf('close')!==-1){
37                     self.close();
38                 }
39             });
40         }
41     }
42     window.Modal=Modal;
43 })(window);

結束語

  這個彈窗插件使用了閉包,避免的全局環境的污染,只是給全局環境添加了一個Modal對象,可實現任意多個Modal對象的實例化,主要使用了原型+構造函數的方法構建對象。實現了公共方法的復用。如果有什么不好的地方,歡迎指出~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM