zoukankan      html  css  js  c++  java
  • 打造自己的 HTML/CSS/JS 编辑器

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。
    原文出处:https://blog.bitsrc.io/build-an-html-css-js-playground-64c62133746d

    目前市面上已经有很多类似的平台和方案了,类似像jsfiddle、CodePen、Storybook这样的平台,这些平台可以让我们在浏览器中创建代码并直接执行,无需单独在我们本地创建项目,所以当你在测试一段代码时,这些平台可能会为你提供一些帮助。

    本篇文章是我们 “如何创建____编辑器” 系列中的第一篇,后续可能还会包括:

    • 创建一个Angular编辑器
    • 创建一个React编辑器
    • … 

    在本文中,我们将学习如何创建一个基本的 HTML/CSS/JS 编辑器。

    让我们立即开始吧

    首先,创建一个项目文件夹,例如:“js_editor“

    创建index.html 和 editor.js 文件

    现在,我们创建一个HTML,CSS和JS的选项卡,每个选项卡包含了一个文本框,一个文本框用于HTML、另一个用于CSS、最后一个用于JS。我们将使用iframe来呈现所有的HTML、CSS、JS。Iframe是一个创建新浏览器实例的html标记,它可以在其中呈现所有你自定义的代码效果,使用上就像你直接在浏览器中看到的效果是一样的。

    现在,废话不多说,index.html全部代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    <html>
    <title>HTML/CSS/JS Playground</title>
    <link rel="stylesheet" href='./bootstrap.min.css' />
     
    <body>
        <style>
            textarea {
                
                color: white;
                 600px;
                height: 350px;
            }
             
            iframe {
                 400px;
                height: 350px
            }
        </style>
        <div class="container">
            <h3>HTML/CSS/JS Playground</h3>
            <div class="row">
                <div class="col-12">
                    <ul id="myTab" class="nav nav-tabs">
                        <li class="active"><a href="#html" data-toggle="tab"> HTML</a></li>
                        <li><a href="#css" data-toggle="tab">CSS</a></li>
                        <li><a href="#js" data-toggle="tab">JS</a></li>
                    </ul>
                    <div id="myTabContent" class="tab-content">
                        <div class="tab-pane fade in active" id="html">
                            <p>
                                <textarea style="float:left" id="htmlTextarea"></textarea>
                            </p>
                        </div>
                        <div class="tab-pane fade" id="css">
                            <p>
                                <textarea style="float:left" id="cssTextarea"></textarea>
                            </p>
                        </div>
                        <div class="tab-pane fade" id="js">
                            <p>
                                <textarea style="float:left" id="jsTextarea"></textarea>
                            </p>
                        </div>
                    </div>
                </div>
                <div class="col-12">
                    <div>
                        <iframe id="iFrame"></iframe>
                    </div>
                </div>
            </div>
     
        </div>
     
    </body>
    <script src="./jquery.js"></script>
    <script src="./bootstrap.min.js"></script>
    <script src="./editor.js"></script>
     
    </html>

    在其中,为了使选项卡功能更容易实现一点,我用到了bootstrap.min.js,bootstrap.min.css和jquery.js来帮助我。

    现在,让我们继续丰富editor.js吧:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    const getEl = id => document.getElementById(id)
     
    const iFrame = getEl('iFrame').contentWindow.document
    const htmlTextArea = getEl('htmlTextarea')
    const cssTextArea = getEl('cssTextarea')
    const jsTextArea = getEl('jsTextarea')
     
    document.body.onkeyup = function() {
        iFrame.open()
        iFrame.writeln(
            htmlTextArea.value +
            '<style>' +
            cssTextArea.value +
            '</style>' +
            '<script>' +
            jsTextArea.value +
            '</script>'
        )
        iFrame.close()
    }

    我们有一个函数getEl,它通过Dom的id来获取元素,下面我们得到iframe的contentwindow.document。 然后,我们分别创建HTML、CSS、JS textarea的实例,并获得内容。

    我们监听了body元素的keyup 事件,如果其子元素输入任意内容,将会触发对函数的调用,然后通过writeln写入Dom,通过获取这些内容,即能在相应的标签中加入合适的内容。

    开始使用编辑器

    好的,经过简单的几行代码,我们的编辑器已经初具雏形,请在浏览器中加载index.html。在这,我们可以在相应的选项卡中输入相应的代码,右侧的iframe上即可完整呈现你设置的HTML、CSS和JS。

    可以通过下面的gif看到,我是如何添加ID为“but“的按钮,然后设置样式,并在按钮上添加click事件并弹出”yes“框。

     

    结论

    制作一个属于自己的编辑器非常简单,我也在文末提供了本文使用的项目地址,如果有任何疑问或建议,欢迎提出,谢谢!

    下载源码演示包

  • 相关阅读:
    websocket在线测试工具
    短信线上发送错误,线下成功
    nginx添加stream模块1.20
    sort 的使用
    实验、进程的同步与互斥——生产者消费者
    实验、可变分区存储管理系统模拟 —— 最先适应分配算法
    test
    c++的大数阶乘算法
    C#解析JSON字符串总结
    C++ 查看单个类对象模型利用Vs开发者命令提示工具
  • 原文地址:https://www.cnblogs.com/IT-Evan/p/12575749.html
Copyright © 2011-2022 走看看