给textarea添加行号,textarea使用代码风格的一些思考

不管现实多么惨不忍睹,都要持之以恒地相信,这只是黎明前短暂的黑暗而已。不要惶恐眼前的难关迈不过去,不要担心此刻的付出没有回报,别再花时间等待天降好运。真诚做人,努力做事!你想要的,岁月都会给你。给textarea添加行号,textarea使用代码风格的一些思考,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

背景

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

textarea显示行号

思路:

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

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

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

效果:

 给textarea添加行号,textarea使用代码风格的一些思考

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

给textarea添加行号,textarea使用代码风格的一些思考

代码:

<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使用代码风格的一些思考

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/159671.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!