• 实现一个弹窗的封装


    前言

       这是阿里春招实习在线编程的一道题目:

    用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对象的实例化,主要使用了原型+构造函数的方法构建对象。实现了公共方法的复用。如果有什么不好的地方,欢迎指出~

  • 相关阅读:
    [AX]AX2012开发新特性outer join中使用QueryFilter
    [AX]AX2012开发新特性表继承
    docker环境安装
    poj 3469
    poj 1187
    poj 1159
    poj 2135
    poj 1273
    poj 1458
    poj 1141
  • 原文地址:https://www.cnblogs.com/kasmine/p/6533318.html
Copyright © 2020-2023  润新知