转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。
原文出处: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全部代码如下:

<html>
<title>HTML/CSS/JS Playground</title>
<link rel="stylesheet" href='./bootstrap.min.css' /> <body>
<style>
textarea {
background-color: black;
color: white;
width: 600px;
height: 350px;
} iframe {
width: 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吧:

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“框。

结论

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

下载源码演示包

打造属于自己的 HTML/CSS/JavaScript 实时编辑器的更多相关文章

  1. Brackets - 强大免费的开源跨平台Web前端开发工具IDE (HTML/CSS/Javascript代码编辑器)

    Brackets 是一个免费.开源且跨平台的 HTML/CSS/JavaScript 前端 WEB 集成开发环境 (IDE工具).该项目由 Adobe 创建和维护,根据MIT许可证发布,支持 Wind ...

  2. [转载]Brackets - 强大免费的开源跨平台Web前端开发工具IDE (HTML/CSS/Javascript代码编辑器)

    http://brackets.io/ Brackets 是一个免费.开源且跨平台的 HTML/CSS/JavaScript 前端 WEB 集成开发环境 (IDE工具).该项目由 Adobe 创建和维 ...

  3. 购书网站前端实现(HTML+CSS+JavaScript)

    购书+阅读静态网页设计与实现 一.主页设计HTML 1.效果展示及实现 2.完整代码 二.主页样式布局CSS 三.空间功能实现Javascript 主要功能 Javascript完整代码: 总结 购书 ...

  4. html css javascript 加载的顺序

    html /css /javascript 这三者的加载顺序影响整个页面的加载速度.而加载速度的快慢直接影响pv(访问量),而且会影响经济收入.在大网站中,可能打开速度快一秒,一年能多带来上亿的收入. ...

  5. Sublime Text插件:HTML+CSS+JAVASCRIPT+JSON快速格式化[转]

    今天在github上乱逛,无意间找到victorporof分享的htmlpretty插件,特做推荐: 先看看他是怎么描述htmlpretty的: This is a Sublime Text 2 an ...

  6. html+css+javascript实现列表循环滚动示例代码

    使用html+css+javascript实现列表循环滚动,设置时间定时,在规定的时间内替换前一个节点的内容,具体示例如下,感兴趣的朋友可以参考下 说明:设置时间定时,在规定的时间内替换前一个节点的内 ...

  7. HTML+CSS+JAVASCRIPT 总结

    1. HTML 1: <!doctype html> 2: <!-- This is a test html for html, css, javascript --> 3: ...

  8. Umbraco(3) - CSS & Javascript(翻译文档)

    原文地址:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/umbraco3css-javascript/ CSS & Jav ...

  9. 原创的基于HTML/CSS/JavaScript的层级目录树

    之前参加过一些基于HTML/CSS/JavaScript的项目,当在页面中需要生成一颗目录树时,总是首先想着网上有没有现成的生成树的源代码,比如dtree.zthee,或者使用一些javascript ...

随机推荐

  1. Kafka源码分析及图解原理之Broker端

    一.前言 https://www.cnblogs.com/GrimMjx/p/11354987.html 上一节说过,任何消息队列都是万变不离其宗都是3部分,消息生产者(Producer).消息消费者 ...

  2. .Net基础篇_学习笔记_第七天_随机数的产生

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  3. java树形结构工具类

    一.树形结构数据一般都是以子父id的形式存在数据库中,查询的时候只是带有子id和parent_id的List集合 并不是树形结构,所以我们现在要将普通的List集合转换为树结构数据(本工具类扩展操作树 ...

  4. 字节输出流OutputStream

    1.OutputStream是输出字节流的超类. import java.io.File; import java.io.FileOutputStream; import java.io.IOExce ...

  5. python语言程序设计部分习题

    第二章 python程序实例解析 程序练习题 2.1   实例1的修改,采用eval(input(<提示内容>))替换现有输入部分,并使输出的温度值为整数. vv 2.2 汇率兑换程序.按 ...

  6. 为什么Java进程使用的RAM比Heap Size大?

    Java进程使用的虚拟内存确实比Java Heap要大很多.JVM包括很多子系统:垃圾收集器.类加载系统.JIT编译器等等,这些子系统各自都需要一定数量的RAM才能正常工作. 当一个Java进程运行时 ...

  7. MOOC web前端开发笔记(一)

    网站和网页 网站 互联网上用于展示特定内容的相关网页的集合. 网页 网站中的一页,一个网站中的网页通过"超链接"的方式被组织在一起. 主页 进入网站看到的第一个网页,主页的文件名通 ...

  8. 使用gdb调试c++程序

    上篇(使用c++开发跨平台程序)说到,我不怕造东西,我怕的是造出来的东西,如果出了问题,我却不知道原因.所以调试分析是一个重要的手段. C++调试是一个复杂的活.虽然大部分调试可以通过IDE在开发期间 ...

  9. SpringBoot之整合Mybatis(增,改,删)

    一,在上一篇文章SpringBoot之整合Mybatis中,我们使用spring boot整合了Mybatis,并演示了查询操作.接下来我们将完善这个示例,增加增,删,改的功能. 二,改动代码 1.修 ...

  10. Flutter学习笔记(27)--数据共享(InheritedWidget)

    如需转载,请注明出处:Flutter学习笔记(27)--数据共享(InheritedWidget) InheritedWidget是Flutter中非常重要的一个功能型组件,它提供了一种数据在widg ...