Vue中使用highlight.js实现代码高亮显示以及点击复制

 更新时间:2022年01月06日 15:27:58   作者:威酱96027  
本文主要介绍了Vue中使用highlight.js实现代码高亮显示以及点击复制,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文主要介绍了Vue中使用highlight.js实现代码高亮显示以及点击复制,具体如下:

效果如下

第一步 安装highlight.js

yarn add highlight.js 

第二步 在main.js中引入

import hl from 'highlight.js' // 导入代码高亮文件
import 'highlight.js/styles/a11y-dark.css' // 导入代码高亮样式

// 自定义一个代码高亮指令
Vue.directive('highlight', function (el) {
  const blocks = el.querySelectorAll('pre code')
  blocks.forEach((block) => {
    hl.highlightBlock(block)
  })
})

第三步 创建组件

<template>
  <div class="copy-code-container">
    <div class="copy-container flex-row">
        <a-tooltip>
          <template slot="title"> 复制代码 </template>
          <div class="ant-btn" @click="handleCopy(code, $event)"> <a-icon type="copy"></a-icon></div>
        </a-tooltip>

      <a-tooltip>
        <template slot="title"> 显示代码 </template>
        <a-icon @click="handeShowCode" type="code" />
      </a-tooltip>
    </div>

    <div class="code-palce-container" :class="{ 'show-code': showCode }">
      <div class="code-box" v-highlight>
        <pre>
            <code class="javascirpt">{[code]}</code>
        </pre>
      </div>
    </div>
  </div>
</template>

<script>
import clip from '@/utils/clipboard' // use clipboard directly

export default {
  data () {
    return {
      showCode: false
    }
  },
  props: {
    code: {
      type: String,
      default: ''
    }
  },
  methods: {
    handeShowCode () {
      this.showCode = !this.showCode
    },
    handleCopy (text, event) {
      clip(text, event)
    }
  }
}
</script>

<style lang="less" scoped>
.copy-code-container {
  width: 100%;

  .copy-container {
    width: 100%;
    height: 50px;
    justify-content: center;
    align-items: center;
    position: relative;

    .ant-btn{
      width: 58px;
      height: 38px;
      margin: 0;
      border: none;
      box-shadow: none;
      background-color: transparent;
      padding: 0;
    }

    i {
      cursor: pointer;
      font-size: 18px;
      padding: 10px 20px;
    }
  }

  .code-palce-container {
    width: 100%;
    height: 0;
    overflow: hidden;
    transition: all linear 0.1s;

    &.show-code {
      height: 100%;
    }

    .code-box {
      ::v-deep .hljs {
        padding: 0 20px;
        line-height: 25px;
      }
    }
  }
}
</style>

效果如图:点击显示代码

第四步: 使用组件

<copy-code :code="code"> </copy-code>

export default {
  data () {
    return {
      code: `<template>
  <div>
    <a-button type="primary">
      Primary
    </a-button>
    <a-button>Default</a-button>
    <a-button type="dashed">
      Dashed
    </a-button>
    <a-button type="danger">
      Danger
    </a-button>
    <a-config-provider :auto-insert-space-in-button="false">
      <a-button type="primary">
        按钮
      </a-button>
    </a-config-provider>
    <a-button type="primary">
      按钮
    </a-button>
    <a-button type="link">
      Link
    </a-button>
  </div>
</template>`
    }
  }
}

第五步 实现点击复制代码clipboard.js。

clipboard.js copy地址

import Vue from 'vue'
import Clipboard from 'clipboard'

function clipboardSuccess () {
  Vue.prototype.$message.success({
    content: '复制成功',
    duration: 1.5
  })
}

function clipboardError () {
  Vue.prototype.$message.error({
    content: '复制失败',
    duration: 1.5
  })
}

export default function handleClipboard (text, event) {
  const clipboard = new Clipboard(event.target, {
    text: () => text
  })
  clipboard.on('success', () => {
    clipboardSuccess()
    clipboard.destroy()
  })
  clipboard.on('error', () => {
    clipboardError()
    clipboard.destroy()
  })
  clipboard.onClick(event)
}

到此这篇关于Vue中使用highlight.js实现代码高亮显示以及点击复制的文章就介绍到这了,更多相关Vue highlight.js代码高亮显示内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue自定义横向滚动条css导航两行排列布局实现示例

    vue自定义横向滚动条css导航两行排列布局实现示例

    这篇文章主要为大家介绍了vue自定义横向滚动条css导航两行排列布局实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • 详解vuelidate 对于vueJs2.0的验证解决方案

    详解vuelidate 对于vueJs2.0的验证解决方案

    本篇文章主要介绍了vuelidate 对于vueJs2.0的验证解决方案,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-03-03
  • vue项目中vue.config.js文件详解

    vue项目中vue.config.js文件详解

    vue.config.js 是一个可选的配置文件,如果项目的 (和 package.json 同级的) 根目录中存在这个文件,那么它会被 @vue/cli-service 自动加载,这篇文章主要介绍了vue项目中vue.config.js文件的介绍,需要的朋友可以参考下
    2024-02-02
  • vue(2.x,3.0)配置跨域代理

    vue(2.x,3.0)配置跨域代理

    这篇文章主要介绍了vue(2.x,3.0)配置跨域代理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • 解决el-date-picker 宽度溢出浏览器的问题

    解决el-date-picker 宽度溢出浏览器的问题

    这篇文章主要介绍了解决如何el-date-picker 宽度溢出浏览器问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2023-07-07
  • Antd的Table组件嵌套Table以及选择框联动操作

    Antd的Table组件嵌套Table以及选择框联动操作

    这篇文章主要介绍了Antd的Table组件嵌套Table以及选择框联动操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • Vue-cli打包后如何本地查看的操作

    Vue-cli打包后如何本地查看的操作

    这篇文章主要介绍了Vue-cli打包后如何本地查看的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Vue3中setup方法的用法详解

    Vue3中setup方法的用法详解

    在vue3版本中,引入了一个新的函数,叫做setup。这篇文章将为大家详细介绍一下Vue3中setup方法的用法,感兴趣小伙伴的可以了解一下
    2022-07-07
  • vue控制滚动条滑到某个位置的方法实例

    vue控制滚动条滑到某个位置的方法实例

    当容器有滚动条时,有时需要将滚动条滑到某个位置,下面这篇文章主要给大家介绍了关于vue控制滚动条滑到某个位置的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • vue 自动生成swagger接口请求文件的方法

    vue 自动生成swagger接口请求文件的方法

    这篇文章主要介绍了vue 自动生成swagger接口请求文件的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-01-01

最新评论