html+css+js实现文本编辑器
简介:本文讲解,如何制作使用html+css+js实现一个好看的文本编辑器。
效果展示
当文本框聚焦的时候,就是显示textarea,然后是可编辑的,这个时候可以对文本框输入内容。
当失去文本框焦点的时候,那么就隐藏textarea,显示div,使用div来显示这个文本的内容,更加的专业。
代码分析
完整的代码:
<html lang="en"> <head> <meta charset="UTF-8"> <title>作文编辑器G</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous"> <style> body{ padding: 100px 200px; } .form-control{ min-height:500px; margin: 30px; border-color: skyblue; } #editor1 { height: 500px; display: inline-block; } #editor2 { display: none; } </style> </head> <body> <div id="editparent"> <!-- 编辑器控制按钮 --> <div id='editControls' style='text-align:center; padding:5px;'> <h1>作文编辑器</h1> </div> <!-- 编辑器可输入内容处 --> <!-- textarea负责文本内容的编辑--> <textarea id='editor1' class='form-control' contenteditable placeholder="在这里输入内容 英文缩写请用全称"></textarea> <!-- div负责文本内容的显示--> <div id="editor2" class='form-control' contenteditable > <h3></h3> </div> </div> <script src="https://cdn.acwing.com/static/jquery/js/jquery-3.3.1.min.js"></script> <script> // 默认文本聚焦的 var editor1 =document.getElementById("editor1"); editor1.focus(); var editor2 =document.getElementById("editor2"); var text1 = editor1.value; var text2 = editor2.value; // 当textarea失去焦点的时候 隐藏textarea 现实div editor1.onblur = function (){ editor1.style.display = 'none'; editor2.style.display = 'inline-block'; editor2.innerHTML = "<h3>" + editor1.value + "</h3>"; } // 当div获取焦点的时候 那么就隐藏div 显示textarea启动编辑功能 editor2.onfocus = function (){ editor1.style.display = ''; editor2.style.display = "none"; editor1.focus(); } console.log(text2) </script> </body> </html>
难点分析
- 首先是,如何让这个div的高度根据内容自适应,这里就需要用到min-height这个属性,这个属性就是给这个div盒子指定一个默认的最小大小,当这个大小大过这个最小值的时候,那么就高度根据内容自适应。
- 第二个难点就是聚焦和失去焦点的问题,这里就要好好的看一下我的js部分是怎么处理的,其实原理并不困难,先默认div隐藏,textarea获得焦点,然后了当div获得焦点的时候,textarea隐藏,当div失去焦点的时候,textarea显示,并且获取焦点。
- 第三个地方就是设置,当textarea失去焦点的时候把内容同步到div中去。
// 当textarea失去焦点的时候 隐藏textarea 现实div editor1.onblur = function (){ editor1.style.display = 'none'; editor2.style.display = 'inline-block'; editor2.innerHTML = "<h3>" + editor1.value + "</h3>"; } // 当div获取焦点的时候 那么就隐藏div 显示textarea启动编辑功能 editor2.onfocus = function (){ editor1.style.display = ''; editor2.style.display = "none"; editor1.focus(); }