美文网首页让前端飞
js中用单例模式创建一个弹窗

js中用单例模式创建一个弹窗

作者: 顾川眉 | 来源:发表于2017-10-11 17:28 被阅读0次

历史

在开发中,动态创建一个弹层(暂且命名为box)是很常见的需求。因为如果在html中始终渲染这些box,代价可能会比较高,如果是纯文字还好,复杂点的涉及到ajax,图片,那就不太好了。然而如果每次用户一个动作(click或者mouseover)就动态创建一个box,移出就删除box,那么效率也不算很高,需要频繁绘制dom,性能不好。那么,如何比较高效、完美地创建一个弹窗呢?本文演示了用单例模式来创建。

演示

一个createWindow方法,用于创建box:

createWindow函数立即执行,返回了一个匿名函数,匿名函数中保持了createWindow闭包中对div的引用,若div已经存在,则直接返回div,如果不存在,才会重新创建。然后监听按钮事件,只需切换display状态就好了。

完整demo代码

<!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>Document</title>
    <style>
        .common-box {
            background: rgb(233, 90, 90);
            width: 100px;
            height: 100px;
            overflow: hidden;
        }
    </style>
</head>

<body>
    <button id="btn1">
        点我创建新窗口
    </button>
    <button id="hide">
        点我隐藏
    </button>
    <script>
        const btn1 = document.querySelector('#btn1');
        const createWindow = (() => {
            let div;
            return (words) => {
                if (!div) {
                    console.log('重新创建');
                    div = document.createElement('div');
                    div.innerHTML = words || '我是默认的语句';
                    div.className = 'common-box';
                    div.style.display = 'none';
                    document.body.appendChild(div);
                }
               
                return div;
            }
        })();

        btn1.addEventListener('click', ()=>{
            let box = createWindow(`我是文字  ${Date.now()}`);
            box.style.display = 'block';
        }, false);
        
        //隐藏
        document.querySelector('#hide').addEventListener('click', ()=>{
            document.querySelector('.common-box').style.display = 'none';
        }, false);
    </script>
</body>

</html>

相关文章

  • js中用单例模式创建一个弹窗

    历史 在开发中,动态创建一个弹层(暂且命名为box)是很常见的需求。因为如果在html中始终渲染这些box,代价可...

  • 单例模式、发布订阅、观察者模式、迭代器模式

    单例模式 例如页面有一个modal弹窗,无论哪个页面每次打开弹窗,其实都可以用同一个弹窗实例,不需要多次创建 代码...

  • 【设计模式】创建型设计模式汇总

    创建型设计模式汇总 1. 单例模式 1.1 单例模式的定义 一个类只允许创建一个对象或实例。 1.2 单例模式的作...

  • JS 高级 07

    单粒(例)模式: 一个类创建出来的对象都是同一个对象 类:类似于构造函数 JS单例: JS没有类的概念,限定一个...

  • 创建型模式——单例模式

    单例模式简介 单例模式是java创建型模式之一,主要作用是创建唯一对象。 单例模式特点:1.单例类只有一个实例。2...

  • 设计模式与架构02 -- 单例模式,工厂模式

    单例模式 单例模式是最简单的设计模式之一,属于创建型模式,它提供了一种创建对象的最佳方式; 单例模式只涉及到一个单...

  • 单例模式

    单例模式 js中单例模式的实现非常多,原理都是建立一个闭包,然后保存之前创建的对象,如果对象存在的话,就直接把存在...

  • 单例模式

    什么是单例模式? 一个类只允许创建一个实例,那个类就是单例类。这个模式就是单例模式。单例模式实现方式:饿汉式:实现...

  • 前端开发工程师必备系列-几个简单的JS单例模式

    前端开发工程师必备系列-几个简单的JS单例模式 JavaScript单例模式 1. 单例模式 单例模式(Singl...

  • 单例模式 ,简单工厂,抽象工厂

    1.单例模式 如果一个类始终只能创建一个实例,则这个类成为单例类,这种设计模式称为单例模式 使用单例模式的优势: ...

网友评论

    本文标题:js中用单例模式创建一个弹窗

    本文链接:https://www.haomeiwen.com/subject/gfnwyxtx.html