最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Vue中使用highlight.js实现代码高亮显示以及点击复制

    正文概述 掘金(威酱96027)   2021-01-29   1108

    效果如下

    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>
    
    

    效果如图:点击显示代码

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

    第四步: 使用组件

    <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地址

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

    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实现代码高亮显示以及点击复制

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元