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实现各类弹出框组件

    使用vue实现各类弹出框组件

    这篇文章主要介绍了使用vue实现各类弹出框组件,文中给大家提到了vue中常用的dialog组件的封装,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07
  • Vue3 appear 失效的问题及如何使用 appear

    Vue3 appear 失效的问题及如何使用 appear

    appear 是一个在元素默认被显示的情况下 调用进入动画效果,使得元素在这种初次渲染情况下 执行进入动画的属性,最近在学习vue3的动画时遇到appear无法生效的问题,本文给大家详细讲解,感兴趣的朋友一起看看吧
    2023-10-10
  • 使用vite搭建ssr活动页架构的实现

    使用vite搭建ssr活动页架构的实现

    本文主要介绍了使用vite搭建ssr活动页架构,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • element-ui在table中如何禁用其中几行

    element-ui在table中如何禁用其中几行

    这篇文章主要介绍了element-ui在table中如何禁用其中几行问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • Vue 3 进阶用法之异步组件

    Vue 3 进阶用法之异步组件

    为了解决加载组件中出现的报错、超时、状态展示等问题,可以使用 Vue 3 提供的异步组件(Async Components),它对于加载过程做了更细致的控制,这篇文章主要介绍了Vue 3 进阶用法之异步组件,需要的朋友可以参考下
    2024-04-04
  • vue项目中使用html2canvas解决截图不全的问题

    vue项目中使用html2canvas解决截图不全的问题

    本文主要介绍了vue项目中使用html2canvas解决截图不全的问题
    2023-11-11
  • Vue实现嵌套菜单组件

    Vue实现嵌套菜单组件

    这篇文章主要为大家详细介绍了Vue实现嵌套菜单组件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • Vue Extends 扩展选项用法完整实例

    Vue Extends 扩展选项用法完整实例

    这篇文章主要介绍了Vue Extends 扩展选项用法,结合完整实例形式分析了Vue Extends 扩展选项相关使用技巧与操作注意事项,需要的朋友可以参考下
    2019-09-09
  • vue项目初始化过程中错误总结

    vue项目初始化过程中错误总结

    在Vue.js项目初始化和构建过程中,可能会遇到多种问题,首先,npm install过程中报错,如提示“No such file or directory”,建议删除package-lock.json文件后重新安装,在build或run时,若出现core-js相关错误
    2024-09-09
  • Vue2.0 UI框架ElementUI使用方法详解

    Vue2.0 UI框架ElementUI使用方法详解

    这篇文章主要为大家详细介绍了Vue2.0 UI框架ElementUI的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04

最新评论