zoukankan      html  css  js  c++  java
  • javascript基于对象的弹出框封装

    先睹为快,移动端:戳这里,打开页面后点击投票查看效果。PC端测试直接切换body的overflow属性:hidden和auto一样可以,比下面相对简化,又有人说这样偶尔不行。。如果你知道优缺点欢迎给出。。。。

    说明:1、DOM元素必须,2、弹出框样式:必须,3、弹出框逻辑必须,4、如何使用,需要的时候直接调用:promptObj.init(msg),msg:弹出框的提示信息,不传默认是:請問你想幹嘛?

    封装很简单,关键就是弹出框弹出后如何阻止页面继续滚动,经过测试目前没问题,关于指出问题。缺点:暴露在全局的对象

    1、必须的DOM元素,放在BODY尾部

    <!-- 自定义alert框 -->
            <div id="prompt_box">
                <div class="prompt_mask">
                    <p>友情提示:</p>
                    <h2 id="prompt_title" class="prompt_title"></h2>
                    <span id="prompt_btn">確 認</span>
                </div>
            </div>

    2、DOM元素的样式表

    /*
    * @Author: wangjianfei
    * @Date:   2017-05-26 17:24:39
    * @Last Modified by:   wangjianfei
    * @Last Modified time: 2017-05-26 19:33:57
    */
    *{
        margin: 0;
        padding: 0;
        list-style: none;
        border: 0;
        box-sizing: border-box;
        outline: 0;
        -webkit-tap-highlight-color: transparent;
    }
    #prompt_box{
        position: fixed;
        width: 100%;
        height: 100%;
        left: 0;
        top: 0;
        bottom: 0;
        background: rgba(0, 0, 0, .5);
        display: none;
        z-index: 30;
    }
    .prompt_title{
        text-align: center;
        color: #565CB2;
        margin-top: .5rem;
    }
    .prompt_mask p{
        width: 100%;
        height: 1rem;
        color: #fff;
        line-height: 1rem;
        background: #565CB2;
        padding-left: .3rem;
        font-size: .4rem;
    }
    .prompt_mask{
        width: 7.4rem;
        height: 4.2rem;
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        background: #fff;
        border-radius: .1rem;
        overflow: hidden;
    }
    
    #prompt_btn{
        display: block;
        background: #565CB2;
        color: #fff;
        width: 1.5rem;
        height: .8rem;
        line-height: .8rem;
        text-align: center;
        margin: 0 auto;
        margin-top: .8rem;
        border-radius: .1rem;
        font-size: .3rem;
        cursor: pointer;
    }

    3、弹出的逻辑

    /*
    * @Author: wangjianfei
    * @Date:   2017-05-26 18:08:36
    * @Last Modified by:   wangjianfei
    * @Last Modified time: 2017-05-27 10:22:26
    */
    
    'use strict';
    var promptObj={
        // 1、弹出框ID
        promptBox:null,
        // 2、提示信息的元素ID
        infoItem:null,
        // 3、确认按钮ID
        promptBtn:null,
        // 4、提示信息具体内容,没传就默认是:請問你想幹嘛?
        tipsMsg:null,
        // 5、是PC还是手机:true为PC,false为手机端,用于阻止弹出框弹出后页面是否可以滚动
        isPC:true,
        // 6、初始化对象
        init:function(msg){
            //1、 指定元素
            this.promptBox=document.getElementById("prompt_box");
            this.infoItem=document.getElementById("prompt_title");
            this.promptBtn=document.getElementById("prompt_btn");
            // 2、是否是PC
            this.platform();
            // 3、显示弹出框 promptBtn
            this.showPrompt(msg);
        },
        // 7、设备判断
        platform:function(){
            var _this=this;
            var userAgentInfo = navigator.userAgent;
            var Agents = ["Android", "iPhone",
                        "SymbianOS", "Windows Phone",
                        "iPad", "iPod"];
            for (var v = 0; v < Agents.length; v++) {
                if (userAgentInfo.indexOf(Agents[v]) > 0) {
                    _this.isPC= false;
                    break;
                }
            }
        },
        // 8、隐藏弹出框
        hidePrompt:function(){
            promptObj.promptBox.style.display="none";
        },
        // 9、显示弹出框,并禁止页面继续
        showPrompt:function(msg){
            var _this=this;
            // console.log(_this.isPC);
            // 提示信息
            _this.tipsMsg=msg||"請問你想幹嘛?";
            _this.infoItem.innerHTML=_this.tipsMsg;
            _this.promptBox.style.display="block";
            _this.promptBtn.addEventListener("click", _this.hidePrompt);
            // 2、如果是PC端
            if(_this.isPC){
                // PC端弹出框弹出后阻止页面滚动
                var top=-1;
                var scrollTop = document.documentElement.scrollTop||window.pageYOffset||document.body.scrollTop;
                _this.promptBox.addEventListener("mouseenter", function(){
                    top=scrollTop;
                    // console.log(top);
                });
                _this.promptBox.addEventListener("mouseleave", function(){
                    top=-1;
                });
                window.addEventListener("scroll",function(event){
                    event.preventDefault();
                    // console.log(scrollTop);
                    if(top!==-1){
                        document.body.scrollTop=scrollTop;
                        window.pageYOffset=scrollTop;
                        document.documentElement.scrollTop=scrollTop;
                        // console.log(scrollTop);
                    }
                });
            // 3、如果是移动端
            }else{
                // 移动端阻止弹出层弹出时候页面的滚动
                _this.promptBox.addEventListener("touchmove", function(event){
                    // 阻止彈出後頁面的滚动
                    event.preventDefault();
                });
            }
        }
    }
    // promptObj.init();
  • 相关阅读:
    3.K均值算法
    2.机器学习相关数学基础
    机器算法第一次作业
    语法制导的语义翻译
    算符优先分析
    自下而上语法分析
    LL(1)文法的判断,递归下降分析程序
    消除左递归
    DFA最小化,语法分析初步
    词法分析程序的设计与实现
  • 原文地址:https://www.cnblogs.com/-walker/p/6911940.html
Copyright © 2011-2022 走看看