Javascript知识汇总------面向对象手写弹窗插件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>弹窗组件</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        button {
            margin: 10px;
        }
        .myAlert {
            position: absolute;
            border: 1px solid #ccc;
            z-index: 2;
            background: #fff;
        }
        .title {
            background: blue;
            color: #fff;
            padding: 10px;
            overflow: hidden;
        }
        .title .close {
            float: right;
            border: 2px silid #000;
            cursor: pointer;
        }
        .myAlert .content {
            padding: 10px;
        }
        #mark {
            position: absolute;
            background: rgba(0,0,0,.5);
            z-index: 1;
            top: 0;
            left: 0;
        }
    </style>
</head>
<body>
    <button id="btn1">居中弹窗</button>
    <button id="btn2">右下角弹窗</button>
    <button id="btn3">遮罩弹窗</button>
    <div id="mark"></div>
    <!-- <div class="myAlert">
        <div class="title"><span>我是标题</span><span class="close">X</span></div>
        <div class="content">我是内容我是内容我是内容我是内容我是内容</div>
    </div> -->
</body>
<script>
    (function (global){
        function MyAlert(json){
            this.setting = {
                ele : this,
                width: 300,
                height: 400,
                closeBtn : true,
                content : ‘我是内容‘,
                title: ‘默认‘,
                dir : ‘center‘
            };
            extend(this.setting,json);
            this.alertEle = null;
            this.init();
        }
        MyAlert.prototype.blog = {};
        MyAlert.prototype.init  = function (){
            this.blog[this.setting.iNow] == undefined ? this.blog[this.setting.iNow] = true:null;
            if( this.blog[this.setting.iNow] ){
                this.creatAlert();
                this.setting.closeBtn ? this.closeFn() : null;
                if(this.setting.mark){
                    this.setMark();
                }
                this.blog[this.setting.iNow] = false;
            }
        };
        MyAlert.prototype.creatAlert = function (){
            this.alertEle = document.createElement(‘div‘),
                alertEleHtml = ‘‘;
            this.alertEle.className = ‘myAlert‘;

            alertEleHtml += ‘<div class="title">‘
            alertEleHtml += ‘<span>‘+ this.setting.title +‘</span><span class="close">X</span>‘;
            alertEleHtml += ‘</div><div class="content">‘+this.setting.content+‘</div>‘;
            this.alertEle.innerHTML += alertEleHtml
            document.body.appendChild(this.alertEle);
            this.setdata();
        };
        MyAlert.prototype.setdata = function (){
            this.alertEle.style.width = this.setting.width + ‘px‘;
            this.alertEle.style.height = this.setting.height + ‘px‘;
            switch (this.setting.dir){
                case ‘center‘:
                    this.alertEle.style.left = (document.documentElement.clientWidth - this.setting.width)/2 + ‘px‘;
                    this.alertEle.style.top = (document.documentElement.clientHeight - this.setting.height)/2 + ‘px‘;
                break;
                case ‘right‘:
                    this.alertEle.style.right = 0 + ‘px‘;
                    this.alertEle.style.bottom = 0 + ‘px‘;
                break;
            }
        }
        MyAlert.prototype.closeFn = function (){
            var This = this;
            this.alertEle.getElementsByClassName(‘close‘)[0].onclick = function (){
                document.body.removeChild(This.alertEle);
                if(This.markEle){
                    document.body.removeChild(This.markEle);
                }
                This.blog[This.setting.iNow] = true;
            }
        };
        MyAlert.prototype.setMark = function (){
            this.markEle = document.createElement(this.markEle);
            var markEle = document.body.appendChild(this.markEle);
            markEle.id = ‘mark‘;
            markEle.style.width = document.documentElement.clientWidth + ‘px‘;
            markEle.style.height = document.documentElement.clientHeight + ‘px‘;
        }
        function extend(obj1,obj2){
            for(var attr in obj2){
                obj1[attr] = obj2[attr];
            }
        }
        global.MyAlert = MyAlert;
    })(this)
</script>
<script>
    var aBtn = document.getElementsByTagName(‘button‘);
    aBtn[0].onclick = function (){
        var alert1 = new MyAlert({
            ele : this,
            width: 300,
            height: 400,
            closeBtn : true,
            content : ‘我是内容,哈哈哈哈哈‘,
            title: ‘登陆‘,
            dir : ‘center‘,
            iNow : 0
        });
    }
    aBtn[1].onclick = function (){
        var alert1 = new MyAlert({
            ele : this,
            width: 200,
            height: 100,
            closeBtn : true,
            content : ‘公告内容‘,
            title: ‘公告‘,
            dir : ‘right‘,
            iNow : 1
        });
    }
    aBtn[2].onclick = function (){
        var alert1 = new MyAlert({
            ele : this,
            width: 300,
            height: 400,
            closeBtn : true,
            content : ‘遮罩‘,
            title: ‘公告‘,
            dir : ‘right‘,
            iNow : 2,
            mark : true
        });
    }
</script>
</html>
 

原文地址:https://www.cnblogs.com/iwzyuan/p/8758832.html

时间: 2024-11-06 19:09:45

Javascript知识汇总------面向对象手写弹窗插件的相关文章

基于vue手写tree插件那点事

目录 iview提供的控件 手写控件 手写控件扩展 手写控件总结 # 加入战队 微信公众号 主题 Tree树形控件在前端开发中必不可少,对于数据的展示现在网站大都采取树形展示.因为大数据全部展示出来对于用户来说是不友好的.今天我们自己手写一个Tree插件. iview提供的控件 iview已经很成熟了,如果说我写的控件和iview提供的控件谁更好,那肯定是选择iview , 手写控件只是为了更好的了解vue父子组件之间的通信的. 请读者还是不要拿我的控件和iview或者其他第三方的去对比.下面我

Javascript知识汇总------手写jq轮播图插件(2018-04-23 17:16)

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" con

Javascript知识汇总------获取构造函数名的方法和字符串处理方法

一.构造函数名称获取 每一个对象都有constructor属性 每一个对象的constructor 属性描述的是其构造函数 function Fn(){} var obj = new Fn(); console.log( obj.constructor === Fn ); // true 对象的constructor属性描述的就是其构造函数 下面代码所用的obj对象就是在此处创建的 1. 利用字符串截取获取构造函数名称 //利用字符串截取获取 var str = ''+obj.construct

js手写日历插件

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>日历</title> <style> table {

wex5 实战 手写签名与上传

之前做过一个物流演示模块,有一个功能没做完,就是收件人收货后,可以手写签名并上传,替代传统纸张的签名.今天终于做完了. 一 效果演示: 后台图片上传成功 二 设计思路: 运用canvas插件jq-signature,制作手写签名,并通过二进制流方式上传图片 三 代码实现: 1 .下载引入插件jq-signature 手写签名插件,网上有很多,经过多种插件的逐步尝试,只有插件jq-signature达到了我想要的效果; 原因有二:1,支持手机触摸,web,鼠标.其它有的不支持手机触摸. 2,直接转

手写js面向对象选项卡插件

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>无缝滚动</title>    <style type="text/css">        body,ul{margin: 0;padding: 0;}        li{list-style: none;}  

javascript常用知识汇总

javascript这个语言庞大而复杂,我用了三年多了,还是皮毛都不会.从刚开始的jquery,到后来的es6,每天都在学习,每天都在忘记. 1.禁止手机虚拟键盘弹出 在开发适配手机的页面时,出现了这么一个现象,我用了input标签,点击弹出一个选择框,就是那种picker组件,在手机上点击就会出现虚拟键盘,这个必须去掉.第一种是为input加入readonly属性,第二种用js代码的document.activeElement.blur() 123 $("#datePicker").

vue10行代码实现上拉翻页加载更多数据,纯手写js实现下拉刷新上拉翻页不引用任何第三方插件

vue10行代码实现上拉翻页加载更多数据,纯手写js实现下拉刷新上拉翻页不引用任何第三方插件/库 一提到移动端的下拉刷新上拉翻页,你可能就会想到iScroll插件,没错iScroll是一个高性能,资源占用少,无依赖,多平台的javascript滚动插件.iScroll不仅仅是 滚动.它可以处理任何需要与用户进行移动交互的元素.在你的项目中包含仅仅4kb大小的iScroll,你的项目便拥有了滚动,缩放,平移,无限滚动,视差滚动,旋转功能.iScroll的强大毋庸置疑,本人也非常欢迎大家使用iScr

JavaScript正則表達式知识汇总

Js 正則表達式知识汇总 正則表達式: 1.什么是RegExp?RegExp是正則表達式的缩写.RegExp 对象用于规定在文本中检索的内容. 2.定义RegExp:var +变量名=new RegExp(); 3.RegExp 对象有 3 个方法: 1)test()检索字符串中的指定值,返回值是true或false. var p1=new Reg("e"); document.write(Reg.test("welcome to China!")); 2)exec