打造屬於自己的 HTML/CSS/JavaScript 實時編輯器

来源:https://www.cnblogs.com/powertoolsteam/archive/2019/10/21/11712204.html
-Advertisement-
Play Games

轉載請註明出處:葡萄城官網,葡萄城為開發者提供專業的開發工具、解決方案和服務,賦能開發者。原文出處:https://blog.bitsrc.io/build-an-html-css-js-playground-64c62133746d 目前市面上已經有很多類似的平臺和方案了,類似像jsfiddle、 ...


轉載請註明出處:葡萄城官網,葡萄城為開發者提供專業的開發工具、解決方案和服務,賦能開發者。
原文出處: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“框。

 

結論

製作一個屬於自己的編輯器非常簡單,我也在文末提供了本文使用的項目地址,如果有任何疑問或建議,歡迎提出,謝謝!

 

下載源碼演示包


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 如今web開發中,無限載入是必需的一項功能,尤其是在移動端開發中,一個列表往往預設只載入10條,想看更多只能逐漸往下翻頁。那麼今天就看看如何在Vue-Cli中實現這個功能。 當前找到兩個插件 1 element-ui的infiniteScroll無限滾動(適合vue2,vue3) infiniteS ...
  • 1. 對象的定義 註意: 原型鏈中聲明屬性將會多個實例共用,而構造函數不會 對象的繼承 1. 對象的繼承 之 對象冒充繼承 註意: 對象冒充繼承的方法 只能 繼承對象的構造函數的屬性和方法,不能 繼承原型鏈中的函數和方法 2. 對象的繼承 之 原型鏈繼承 註意:原型鏈繼承的方法 可以 繼承對象的構造 ...
  • 本文導讀 HTML中的元素可分為兩種類型:塊級元素和行級元素。這些元素的類型是通過文檔類型定義(DTD)來指明。塊級元素:顯示在一塊內,會自動換行,元素會從上到下垂直排列,各自占一行,如p,ul,form,div等標簽元素。行內元素:元素在一行內水平排列,高度由元素的內容決定,height屬性不起作 ...
  • 方法解釋: 通過wx.previewImage預覽圖片時,會出現格式為png預覽背景為黑色時,圖片查看不清楚,能過下麵的方法轉化為白色底,方便查看 1、先用wx.getImageInfo 下載圖片到本地,並且獲取圖片的信息; 2、將圖片畫入canvas,並生成臨時圖片地址; 3、將canvas生成的 ...
  • 主要特性 使用 開發小程式,你將在小程式技術體系的基礎上獲取到這樣一些能力: 徹底的組件化開發能力:提高代碼復用性 完整的 開發體驗 方便的 數據管理方案:方便構建複雜應用 快捷的 構建機制:自定義構建策略、開發階段 hotReload 支持使用 npm 外部依賴 使用 命令行工具 vue cli ...
  • table屬性中,設置 :default-sort="{prop:'time', order:'descending'}" 1. prop為排序列,order為排列順序 2. 多級對象屬性,寫法如 :default-sort="{prop:'baseInfo.time', order:'descen ...
  • 使用vue init webpack 你的項目名稱初始化一個vue的項目 安裝依賴 npm install vue-resource http-proxy-middleware vuex koa 在項目的main.js中引入並註冊下載的依賴 在main.js中引入vue-resource並註冊到vu ...
  • 組件之全局組件 //註意:需要在Vue實例化之前註冊全局組件,使用Vue.component("組件名",{ template: }) Vue.component("show name",{ template:` ViavaCos ` }) var vm = new Vue({ el:' app', ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...