练习3. 对话框控件

对话框的UI组件

  1. 对话框的中心默认在屏幕正中,当对话框显示时,屏幕滚动时,对话框始终保持位置固定在屏幕正中,不随屏幕滚动而变化位置;或者禁止页面在有对话框出现时滚动;
  2. 当对话框显示时,点击对话框以外的部分,关闭对话框;
  3. 可以实现一个半透明的遮罩来挡住对话框外的部分;
  4. 提供函数显示和关闭对话框;
  5. 对话框的窗口大小可以是一个默认固定值,也可以是随内容变化而自适应变化,也可以是通过接口参数进行调整;

要求:

  1. 改写为query的实现代码;
  2. 封装为全部动态模式,即点击按钮自动创建对话框,而不是将html代码写在html文件中;

HTML代码

<button class="toggle">展示/隐藏</button>
<div class="modal hide" id="modal">
    <div class="overlay-mask" id="overlay-mask"></div>
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close"><span aria-hidden="true">×</span></button>
                <h4 class="modal-title">这是一个浮动层</h4>
            </div>
            <div class="modal-body">
                <p>这是一个浮出层</p>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-primary modal-func" data-dismiss="modal">确定</button>
                <button type="button" class="btn btn-default modal-cancel">取消</button>
            </div>
        </div>
        <!-- /.modal-content -->
    </div>
    <!-- /.modal-dialog -->
</div>

CSS代码

body {
    height: 100%;
}

.overlay-mask {
    position: absolute;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
    z-index: 15;
    cursor: pointer;
}
.hide {
    display: none!important;
}

.modal {
    position: fixed;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    z-index: 10;
    overflow: hidden;
    -webkit-overflow-scrolling: touch;
    outline: 0;
    /* width: 600px; */
    margin: 0 auto;
    display: flex;
    height: 100%;
    /* border: 1px solid red; */
    justify-content: center;
    align-items: center;
}

.modal-open .modal {
    overflow-x: hidden;
    overflow-y: auto;
}

.modal-dialog {
    position: relative;
    width: auto;
    margin: 10px;
    width: 600px;
    z-index: 20;
}

.modal .close {
    float: right;
    font-size: 21px;
    font-weight: 700;
    line-height: 1;
    color: #000;
    text-shadow: 0 1px 0 #fff;
    filter: alpha(opacity=20);
    opacity: .2;
}

.modal-content {
    position: relative;
    background-color: #fff;
    -webkit-background-clip: padding-box;
    background-clip: padding-box;
    border: 1px solid #999;
    border: 1px solid rgba(0, 0, 0, .2);
    border-radius: 6px;
    outline: 0;
    -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
    box-shadow: 0 3px 9px rgba(0, 0, 0, .5)
}

.modal-backdrop {
    position: fixed;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    z-index: 1040;
    background-color: #000
}

.modal-backdrop .fade {
    filter: alpha(opacity=0);
    opacity: 0
}

.modal-backdrop .in {
    filter: alpha(opacity=50);
    opacity: .5
}

.modal-header {
    min-height: 16.43px;
    padding: 15px;
    border-bottom: 1px solid #e5e5e5
}

.modal-header .close {
    margin-top: -2px
}

.modal-title {
    margin: 0;
    line-height: 1.42857143
}

.modal-body {
    position: relative;
    padding: 15px
}

.modal-footer {
    padding: 15px;
    text-align: right;
    border-top: 1px solid #e5e5e5
}

.modal-footer .btn+.btn {
    margin-bottom: 0;
    margin-left: 5px
}

.modal-footer .btn-group .btn+.btn {
    margin-left: -1px
}

.modal-footer .btn-block+.btn-block {
    margin-left: 0
}

.modal-scrollbar-measure {
    position: absolute;
    top: -9999px;
    width: 50px;
    height: 50px;
    overflow: scroll
}

JS代码

window.onload = function() {
  var data = {
    title: '这是测试标题',
    content: '这是测试里的内容',
    type: 'default',
    func: function() {
      console.log("2333");
    },
  };
  modal(data);

  function modal(data) {
    var config = data;
    console.log(data);
    var modalBox = {
      modalConfig: {
        title: config.title || '默认标题', // modal标题
        content: config.content || '这是默认的内容', // modal内容
        //type: config.type, // modal类型
        func: config.func || 0, // 其他处理方法
      },
      //modal显示/隐藏
      toggle: function() {
        var modal = document.getElementById("modal");
        console.log('show');
        if (modal.className.indexOf('hide')) {
          modal.className = 'modal';
        } else {
          modal.className = 'modal hide';
        }
      },
      init: function() {
        var that = this;
        var modal = document.getElementById("modal");
        //写入配置
        document.querySelector(".modal-title").innerText = that.modalConfig.title;
        document.querySelector(".modal-body").innerText = that.modalConfig.content;
        document.querySelector(".modal-title").innerText = that.modalConfig.title;
        //监听事件
        document.querySelector(".toggle").addEventListener('click', function() {
          that.toggle();
        }, false);

        //遮罩层隐藏
        document.querySelector("#overlay-mask").addEventListener('click', function() {
          document.getElementById("modal").className = 'modal hide';

        }, false);
        //取消事件
        document.querySelector(".modal-cancel").addEventListener('click', function() {
          document.getElementById("modal").className = 'modal hide';
        }, false);

        document.querySelector(".modal-func").addEventListener('click', function() {
          //如果没有指定处理函数
          if (that.modalConfig.func == 0) {
            document.getElementById("modal").className = 'modal hide';
          } else {
            that.modalConfig.func();
            document.getElementById("modal").className = 'modal hide';
          }
        }, false);
      }

    }
    return modalBox.init();
  }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,417评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,921评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,850评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,945评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,069评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,188评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,239评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,994评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,409评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,735评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,898评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,578评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,205评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,916评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,156评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,722评论 2 363
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,781评论 2 351

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,907评论 25 707
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,068评论 4 62
  • 今天下班很晚,回家做好饭,吃好给两个宝贝洗好澡,已经快八点半了,打开微信又看到有几个自己喜欢的微课,但是八点就已经...
    sunny视界阅读 273评论 2 7
  • 老李手帐阅读 428评论 0 51
  • 文丨朋友如天 ❤️01 和往常的周末一样,我和羽辰一前一后走进城堡酒店,这是我们两个人的浪漫约定。 我们的爱虽然见...
    朋友如天阅读 2,237评论 58 72