为了账号安全,请及时绑定邮箱和手机立即绑定

打造属于自己的 HTML/CSS/JavaScript 实时编辑器

转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。

目前市面上已经有很多类似的平台和方案了,类似像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 class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="./jquery.js"></``script``>

<``script class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="./bootstrap.min.js"></``script``>

<``script class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="./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“框。

结论

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

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消