最近碰到一個需要在 svg 上做 mouseover 的互動
基於把 svg embed 在 html 上面才能互動
因為要互動的 svg 檔案太多了,
所以才會想說是不是可以直接把 svg 當成 vue-component 來安裝,
很開心前端技術日新月異,我找到 vue-svg-loader ,
他可以同時讓 svg 既可以當背景圖,
又可以 import 在頁面上提供操作
以下是 nuxt 情況
npm i vue-svg-loader -D
修改 nuxt.config.js
當成 vue 元件使用
vue檔案 - script 內
vue檔案 - template 內
[ vue.js + nuxt + vue-svg-loader = svg in html & import img ]
https://github.com/visualfanatic/vue-svg-loader/blob/master/docs/faq.md
基於把 svg embed 在 html 上面才能互動
因為要互動的 svg 檔案太多了,
所以才會想說是不是可以直接把 svg 當成 vue-component 來安裝,
很開心前端技術日新月異,我找到 vue-svg-loader ,
他可以同時讓 svg 既可以當背景圖,
又可以 import 在頁面上提供操作
以下是 nuxt 情況
npm i vue-svg-loader -D
修改 nuxt.config.js
  build: {
    /*
    ** You can extend webpack config here
    */
    extend(config, ctx) {
      const svgRule = config.module.rules.find(rule => rule.test.test('.svg'));
      svgRule.test = /\.(png|jpe?g|gif|webp)$/;
      config.module.rules.push({
        test: /\.svg$/,
        oneOf: [
          {
            resourceQuery: /inline/,
            loader: 'vue-svg-loader',
          },
          {
            loader: 'file-loader',
            query: {
              name: 'assets/[name].[hash:8].[ext]',
            },
          },
        ],
      });
    },
  },
當成 vue 元件使用
vue檔案 - script 內
import Taipei from '~/assets/img/index/map/taipei.svg?inline'
  components: {
    Taipei,
            .icon.taiei
              Taipei
[ vue.js + nuxt + vue-svg-loader = svg in html & import img ]
https://github.com/visualfanatic/vue-svg-loader/blob/master/docs/faq.md
留言
張貼留言