背景

项目有个需求是 在textarea中编辑脚本并显示为代码风格样式,显示行号;

textarea显示行号

思路:

  1、监听textarea内容变化,执行一个change函数,解析内容里面有多少个换行符,根据换行符数量生成一个带行号的数组;

  2、通过css绝对定位将行号定位在textarea左侧

  3、滑动滚动条,计算滚动条滑动的距离,赋值给行号列的top

效果:

并且可随滚动条滚动,行号列跟着滚动:

代码:

<template>
<div class="container">
<div class="fatherOrder">
<div class="order" ref="order">
<p v-for="item in numArr" :key="item">{{item}}</p>
</div>
</div>
<textarea name="textarea" id="textarea" @scroll="scrollTextArea" v-model="value" @input="changeTextArea"></textarea>
</div>
</template>
<script>
export default {
data() {
return {
numArr:[],
value:`import something form 'com'\n\n public class A{\n super()\n}`
}
},
methods: {
scrollTextArea(e){
document.getElementsByClassName('order')[0].style.top = -e.target.scrollTop + 1 + 'px'
},
changeTextArea(){
this.numArr = []
let a = this.value
let c = a.split('\n')
for (let i = 1; i < c.length+1; i++) {
this.numArr.push(i)
}
}
},
mounted() {
document.getElementsByClassName('fatherOrder')[0].style.height = document.getElementById('textarea').offsetHeight - 2 + 'px'
this.changeTextArea()
}
};
</script>

显示代码风格

1 、网上查资料让textarea里面的文字变色的方案,但是只支持ie;

var oFont2=document.createElement("FONT");
var oText2=document.createTextNode('人民');
oFont2.style.color="#ff3322";
form1.topic.appendChild(oFont2);
oFont2.appendChild(oText2);

2、通过设置div + contenteditable='true' 将div变成可编辑的块,可以通过字符串replace方法给相应关键字增加颜色;但是无法监听change事件,无法得知里面内容改变后并通知出来;

3、后面尝试将 textarea 和  可编辑的div 定位在一个位置,设置textarea层级高于可编辑的div并将textarea隐藏,这样显示的是可编辑的div,实际上操作的是textarea;虽然可以做到修改textarea,通过字符串替换给关键字添加颜色,回显到可编辑的div上;但操作时鼠标不见了,被div覆盖了,无法选取div上的内容;

4、最终完美的解决方案还是引入了插件 ace-editor代码编辑器使用

效果如下:

给textarea添加行号,textarea使用代码风格的一些思考的更多相关文章

  1. 在Visual C++ 6.0中为代码添加行号

    由如上代码可知Visual C++ 6.0是没有行号的(新手代码不要在意,重点是没有行号),在编译报错的时候会发现其会指出在第几行错了,如果没有代码行号将很难找到它 为解决这个问题可以安装插件给Vis ...

  2. Winform DataGridView控件添加行号

      有很多种方法,这里介绍三种: A: 控件的RowStateChanged事件中添加,RowStateChanged事件是在行的状态更改(例如,失去或获得输入焦点)时发生的事件: e.Row.Hea ...

  3. python代码风格指南:pep8 中文翻译

    摘要 本文给出主Python版本标准库的编码约定.CPython的C代码风格参见​PEP7.本文和​PEP 257 文档字符串标准改编自Guido最初的<Python Style Guide&g ...

  4. 统一代码风格工具——editorConfig

    前面的话 在团队开发中,统一的代码格式是必要的.但是不同开发人员的代码风格不同,代码编辑工具的默认格式也不相同,这样就造成代码的differ.而editorConfig可以帮助开发人员在不同的编辑器和 ...

  5. python的PEP8 代码风格指南

    PEP8 代码风格指南 这篇文章原文实际上来自于这里:https://www.python.org/dev/peps/pep-0008/ 知识点 代码排版 字符串引号 表达式和语句中的空格 注释 版本 ...

  6. 团队协作统一vue代码风格,vscode做vue项目时的一些配置

    1. 安装Vetur 扩展 主要是用于让vscode能识别vue文件,对vue代码进行高丽处理,并且它内置了一些代码格式化的设置 2. 安装ESLint 如果你的项目已经开启了eslint规范, 再有 ...

  7. 微软BI 之SSIS 系列 - 通过 ROW_NUMBER 或 Script Component 为数据流输出添加行号的方法

    开篇介绍 上午在天善回答看到这个问题 - SSIS 导出数据文件,能否在第一列增加一个行号,很快就帮助解决了,方法就是在 SQL 查询的时候加一个 ROW_NUMBER() 就可以了. 后来想起在两年 ...

  8. bootstrap基础学习小记(二)排版、列表、代码风格、表格

    排版——标题.副标题.段落(正文文本).强调内容.粗体.斜体.强调相关的类.文本对齐 <!DOCTYPE HTML> <html> <head> <meta ...

  9. 在VIM中添加行号的方法

    VIM编辑器是可以显示行号的.但是,有时候我们需要在整个代码的行首添加行号.怎么实现呢?实现的方法有很多,这里就介绍我知道的一种吧. 在每行行首添加某个字符串 :%s/^/your_string/ 在 ...

  10. (eclipse)统一文件编码和代码风格

    前言 1>每个人的代码风格不一样,以至于代码各式各样,有习惯=号左右加空格的,有习惯不加的,此举有时还会影响svn提交代码 2>注释代码不一样,并且注释风格也不一样 统一文件编码和代码风格 ...

随机推荐

  1. P3574 [POI2014]FAR-FarmCraft (树形DP)

    这题直接贪心显然不可行. 考虑树形dp,用 \(f_i\) 表示到 \(i\) 人后,以 \(i\) 为根的所有人安装完的最短时间. 对于一个节点 \(u\), 假设拜访子节点的顺序为 \(v_1,v ...

  2. 五分钟,手撸一个简单的Spring容器

    工厂和Spring容器Spring是一个成熟的框架,为了满足扩展性.实现各种功能,所以它的实现如同枝节交错的大树一样,现在让我们把视线从Spring本身移开,来看看一个萌芽版的Spring容器怎么实现 ...

  3. 7 Englishi 词根

    1.跟直播,跟复习课,完成作业 2. 基础差加餐,听录播 3.如何听课 4.单词学习反复多次 如何记笔记 语块的汉语意思 单词的记忆方式和固定表达 俩种方式记忆单词 语块关联记忆 基础词根词缀(6节课 ...

  4. 真实感渲染:WebGPU介绍和使用光栅化管线绘制一个三角形

    大家好~本课程为"真实感渲染"的线上课程,从0开始,介绍相关的图形学算法和数学基础,给出详细的数学推导.伪代码和实现代码,最终带领大家开发出基于物理的渲染器 线上课程资料: 本节课 ...

  5. docker 原理之 mount namespace(下)

    1. mount namespace mount namespace 通过隔离文件系统挂载点对隔离文件系统提供支持.使用 unshare 构造 mount namespace 如下: root@chu ...

  6. 搬运 |(有刀🔪慎入)kwdnx、谷雨、更漏与我

    本打算把文案投到官微,但官微说文案太长了,只能放删减版: 那就把文案放博客上吧 写于 癸卯年 戊午月 己亥日. 四年前的冬天我们初见,大家都是青涩的未成年人:在少年班团建的喧闹中,谷雨谈论高数竞赛,k ...

  7. SV概述

    System Verilog概述 路科验证视频,B站可看(补充一下知识) 学习SV之前,最好有Verilog基础 SV诞生 SV发展历史 Verilog - 偏向于设计 System Verilog ...

  8. 【C/C++】宏参数多对一和宏部分替换

    宏参数多对一:使用分号分隔多参数 宏部分替换:替换需要转换的再与后续宏接续 #include <stdio.h> #define _MESS_FAILED() printf("% ...

  9. OpenKruise :Kubernetes背后的托底

    本文分享自华为云社区<OpenKruise核心能力和工作原理>,作者:可以交个朋友. 一. 诞生背景 Kubernetes 自身提供的应用部署管理功能,无法满足大规模应用场景的需求,例如应 ...

  10. Go-稀疏数组

    package main import "fmt" // 稀疏数组 // 1. 二维数组 // 2. 存在大量相同相同数据和少量不同数据 // 思维: 将大量相同数据转化为: (数 ...