亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

在 React、Vue項目中使用SVG的方法

2019-11-19 14:22:29
字體:
供稿:網(wǎng)友

在一些現(xiàn)代的扁平化設(shè)計網(wǎng)站,特別是移動端網(wǎng)站,經(jīng)常會包含許多簡單而清晰的小圖標(biāo),例如網(wǎng)站圖標(biāo)、用戶的默認頭像、移動端網(wǎng)頁首頁底部固定的切換欄等,這些小圖標(biāo)一般都是由美工做好,可能會放到精靈圖上,前端再進行裁切展示。

而實際上,這些簡單的小圖標(biāo)完全沒必要讓美工來做,前端完全可以通過 svg使用代碼把這些簡單的圖標(biāo)畫出來,并且,因為這些圖標(biāo)是用代碼描述出來的,所以如果想要修改這些圖標(biāo),例如改變圖標(biāo)的顏色、圖標(biāo)的形狀、大小等,都只是改幾行代碼的事情,非常簡單,根本無需美工返工重做。

本文不是闡述如何利用 svg 來進行畫圖的,不了解 svg的可以前往 這里查看, 本文主要說一下如何在網(wǎng)站中使用 svg。

SVG在一般網(wǎng)頁中的使用

svg使用 XML 格式定義圖像,你也可以把它看做是一般的 HTML標(biāo)簽,鑲嵌在網(wǎng)頁中呈現(xiàn)出某種效果,在網(wǎng)頁中使用svg的基本示例如下:

<body>  <svg width="100" height="100" version="1.1" xmlns="http://www.w3.org/2000/svg">    <rect width="100%" height="100%" style="fill:pink;stroke-width:1;stroke:rgb(0,0,0)"/>  </svg></body>

效果如下:

可以看到,普通網(wǎng)頁中使用 svg是很簡單的,只要你能把 svg圖標(biāo)畫出來,在網(wǎng)頁中的呈現(xiàn)完全不是問題。

在 Vue中使用 Svg

你完全可以像在 普通網(wǎng)頁中使用 svg那樣在Vue中使用,不過,既然已經(jīng)是選擇 vue來組件化開發(fā)項目了,那么在一堆組件中,穿插一大段的 svg畢竟有點不太好看。

一種解決方法是,利用 svg的 use標(biāo)簽,不直接在主頁面中編寫繪制svg圖標(biāo)的代碼,而是把這一大段的代碼放到另外的文件中,然后使用 use引用這段繪制圖標(biāo)的代碼即可(好像餓了么移動端就是這么干的)。

例如,將所有繪制 svg的代碼放到 svg-icon.vue文件中,所有圖標(biāo)的繪制代碼使用 symbol標(biāo)簽分隔開并單獨命名,避免錯亂,然后將這個文件當(dāng)做是一個組件導(dǎo)出,在主頁面中引入此組件,接著,在需要 使用 svg圖標(biāo)的地方,通過 use標(biāo)簽將其引入。

svg-draw.vue代碼示例如下:

<template> <svg  xmlns="http://www.w3.org/2000/svg"  xmlnsXlink="http://www.w3.org/1999/xlink"  style={{position:'absolute',width:0,height:0}}>  <defs>   <symbol viewBox="0 0 26 31" id="location">    <path xmlns="http://www.w3.org/2000/svg" d="M512.571517 65.907059c-204.736964 0-370.715183 165.979242-370.715183 370.724393 0 94.440929 35.320437 180.625824 93.462648 246.083651 1.572822 2.690272 3.50994 5.225001 5.817496 7.531534l240.297878 251.597225c1.279133 1.864464 2.736321 3.64297 4.393054 5.298679 2.111081 2.111081 4.418636 3.90596 6.856152 5.402033 14.458293 10.06524 34.491559 8.658194 47.393403-4.242627 3.26537-3.263323 5.78782-6.987135 7.582699-10.960633L783.610536 690.24766c1.867534-1.866511 3.489474-3.88447 4.876054-6.010901 58.951647-65.640999 94.819552-152.431691 94.819552-247.604284C883.305119 231.886301 717.325877 65.907059 512.571517 65.907059zM512.390391 588.611865c-82.734306 0-149.814074-67.087954-149.814074-149.842727 0-82.753749 67.079768-149.833517 149.814074-149.833517 82.772168 0 149.851936 67.079768 149.851936 149.833517C662.242328 521.523911 595.161536 588.611865 512.390391 588.611865z" fill="#d81e06"/>   </symbol>  </defs> </svg></template>

整個 vue組件導(dǎo)出一個大的 svg,此svg中包含了許多小的圖標(biāo),類似于精靈圖,每個圖標(biāo)使用 symbol分隔,并單獨命名以方便引用。

使用示例如下:

// index.vue...<svg class="location-icon"> <use xlink:href="#location" rel="external nofollow" ></use></svg>...

然后,就可以看到網(wǎng)頁中順利出現(xiàn)對應(yīng)的 svg圖標(biāo)了:

不過,還有個問題,如果當(dāng)前網(wǎng)站需要用到的 svg圖標(biāo)很多,勢必就造成 svg-icon.vue這個文件體積逐漸變大,當(dāng)前網(wǎng)頁命名只需要用到其中一個 svg圖標(biāo),結(jié)果你把幾百個圖標(biāo)的 svg代碼,全部加載了進來,明顯不太友好,最好是能夠按需加載,當(dāng)前網(wǎng)頁需要哪些圖標(biāo)就加載哪些,甚至一些可能出現(xiàn)可能不出現(xiàn)的圖標(biāo),也在該出現(xiàn)時再加載,如果沒有機會出現(xiàn),那么永遠不加載。

Github上有很多此類的插件,我介紹一個我覺得很好用的插件:vue-svg-icon,簡單易用、快速上手。

首先,安裝此插件,就不多說了,安裝完成后,在項目的入口文件中注冊此插件以方便全局調(diào)用:

import Icon from 'vue-svg-icon/Icon.vue'Vue.component('icon', Icon)

然后在根目錄的 /src目錄下新建一個 svg目錄(目前這個路徑只能是這樣,不可配置為其他路徑和目錄),然后再這個目錄中放入你想要使用的 svg圖標(biāo)的 svg文件即可。

例如一個微信圖標(biāo)的 svg如下:

<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1502683891821" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2885" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><style type="text/css"></style></defs><path d="M282.6 363.8c-23.7 0-47-15.7-47-38.9 0-23.7 23.3-38.9 46.5-38.9 23.7 0 38.9 15.2 38.9 38.9 0.5 23.2-15.1 38.9-38.4 38.9zM500.4 286c23.7 0 38.9 15.2 38.9 38.9 0 23.3-15.2 38.9-38.9 38.9-23.3 0-47-15.7-47-38.9 0-23.7 23.7-38.9 47-38.9z m167.7 84.5c9.8 0 19.7 0.5 30 1.8-27.3-125.6-161.4-218.7-314.4-218.7C212.4 153.6 72 270.3 72 418.3c0 85.9 46.5 155.6 124.8 210.2l-31.3 93.9 109.1-54.6c38.9 7.6 70.2 15.7 109.1 15.7 9.4 0 19.2-0.5 29.1-1.3-6.3-20.6-9.8-42.9-9.8-65.3-0.1-136 116.6-246.4 265.1-246.4z" p-id="2886"></path><path d="M772.7 573.9c-15.2 0-30.9-15.2-30.9-30.9 0.5-15.7 15.7-31.3 30.9-31.3 23.7 0 39.4 15.7 39.4 31.3-0.1 15.7-15.7 30.9-39.4 30.9z m-171.3 0c-15.2 0-30.9-15.2-30.9-30.9s15.7-31.3 30.9-31.3c23.7 0 38.9 15.7 38.9 31.3 0.5 15.7-15.2 30.9-38.9 30.9zM952 613.3C952 488.5 827.2 387 687.3 387c-148 0-264.7 101.5-264.7 226.3 0 124.8 116.7 225.8 264.7 225.8 31.3 0 62.6-8.1 93.5-15.7l85.9 47-23.7-77.8c62.5-47 109-109.1 109-179.3z" p-id="2887"></path></svg>

將上述代碼保存到一個 .svg的文件中,例如 wx.svg,放到 /src/svg目錄中,這樣就完成了準備工作。

接著,想要使用的話,很簡單,直接在 vue組件中這么寫:

<template>  <icon class="wx-icon" name="wx"></icon></template>

刷新頁面時,打開控制臺,可以看到頁面中加載了這個 wx.svg文件,這樣,就實現(xiàn)了 svg文件的按需引入。

在 React中使用 Svg

在 React中使用Svg和 vue一樣,同樣存在 3種方案,一種是直接在 react的 reader方法中寫入 svg代碼,第二種則是將所有 svg繪制代碼放到一個文件中,然后將這個文件一次性載入,使用 use標(biāo)簽引用響應(yīng)的 svg圖案,第三種則是使用插件按需引入。

第一種直接在 渲染方法中寫入 svg的方法就不多說了,第二種也很簡單 ,和 vue一樣,只不過寫法上需要注意一下。

render() {  return (   <svg    xmlns="http://www.w3.org/2000/svg"    xmlnsXlink="http://www.w3.org/1999/xlink"    style={{position:'absolute',width:0,height:0}}>    <defs>     <symbol viewBox="0 0 26 31" id="location">      <path fill="#FFF" fillRule="evenodd" d="M22.116 22.601c-2.329 2.804-7.669 7.827-7.669 7.827-.799.762-2.094.763-2.897-.008 0 0-5.26-4.97-7.643-7.796C1.524 19.8 0 16.89 0 13.194 0 5.908 5.82 0 13 0s13 5.907 13 13.195c0 3.682-1.554 6.602-3.884 9.406zM18 13a5 5 0 1 0-10 0 5 5 0 0 0 10 0z"></path>     </symbol>     <symbol viewBox="0 0 14 8" id="arrow">      <path fill="#FFF" fillRule="evenodd" d="M5.588 6.588c.78.78 2.04.784 2.824 0l5.176-5.176c.78-.78.517-1.412-.582-1.412H.994C-.107 0-.372.628.412 1.412l5.176 5.176z"></path>     </symbol>    </svg>   )}

主要是需要注意,因為 react使用 jsx語法,不允許出現(xiàn) - 連字符,所以像 fill-rule這樣的屬性,就必須寫成 fillRule,引用的時候同樣如此。

// 引用的時候需要將 `xlink:href` 改寫成 xlinkHref<svg className="arrow-left">  <use xlinkhref="#arrow-left" rel="external nofollow" ></use> </svg>

第三種按需引入,只加載當(dāng)前需要的 svg形狀,同樣是將每一個 svg圖片作為一個單獨的文件保存,然后再需要使用的地方進行引用。 Github上有個項目 react-svg,這個項目內(nèi)部其實是對 SVGInjector的包裝,

安裝 react-svg之后,就可以像下面這樣使用了:

import ReactSVG from 'react-svg'ReactDOM.render( <ReactSVG  path="atomic.svg"  callback={svg => console.log(svg)}  className="example" />, document.querySelector('.Root'))

一般都只是在使用小圖標(biāo)的時候才考慮 svg,而這些小圖標(biāo)一般都比較簡約,繪制起來也沒什么難度,不過大部分情況下沒有必要自己來畫,很多網(wǎng)站都提供svg的圖標(biāo)下載,例如阿里的 iconfont,圖標(biāo)數(shù)量眾多,基本可以滿足絕大部分的需求,另外,類似的網(wǎng)站還有 easyicon 、 icomoon等。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
精品熟女一区二区三区| 午夜一区二区三区| www.xxx亚洲| 色哟哟精品丝袜一区二区| 日韩激情av在线播放| 欧美视频在线视频精品| 久久―日本道色综合久久| 一级女性全黄久久生活片免费| 亚洲欧美色图| 性欧美大战久久久久久久免费观看| 黑人と日本人の交わりビデオ| 自拍视频一区二区| 亚洲免费观看视频| 手机av在线播放| 祥仔av免费一区二区三区四区| 欧美视频在线第一页| 欧美亚洲大陆| 成人性教育av免费网址| 中文字幕丰满乱码| 亚洲成av人片观看| av日韩免费电影| 国产jjizz一区二区三区视频| 欧美午夜精品理论片a级大开眼界| 2020av在线| 国产又粗又猛又爽又黄视频| 一级性生活免费视频| 亚洲综合一区二区精品导航| 激情综合一区二区三区| 国产精品成人v| 黄页网站大全在线免费观看| 日韩精品国产一区二区| 久在线观看福利视频| 精品乱人伦小说| 97人摸人人澡人人人超一碰| 国产亚洲精品美女久久久久久久久久| 欧美中日韩免费视频| 自拍偷拍国产精品| 日韩av在线免费播放| 8888在线观看免费www| 福利网站av| 日韩美女视频中文字幕| 黄色无遮挡网站| 免费在线观看亚洲视频| 中文字幕中文乱码欧美一区二区| 欧美在线观看视频网站| 成人综合在线观看| 天天插天天操天天干| 成人在线观看91| 久久精品视频免费播放| 手机免费av片| 天天影视色香欲综合网老头| 亚洲欧美一区二区三区四区| 欧美久久成人| www.中文字幕| 激情欧美一区| 日本成人精品在线| www.黄色一片| 成人性免费视频| 亚洲在线久久| 国产精品毛片a∨一区二区三区| 丰满少妇高潮久久三区| 欧美视频精品全部免费观看| 一本色道久久88综合日韩精品| 亚洲aⅴ优女av综合久久久| 欧美日韩中文字幕在线播放| 国产欧美日韩亚州综合| 亚洲欧美另类久久久精品2019| 中文不卡1区2区3区| 岛国大片在线播放| 亚洲国产精品免费视频| 亚洲欧美综合另类| 国产jjizz一区二区三区视频| 亚洲狠狠婷婷综合久久久| 欧洲视频在线免费观看| 国产精品久久久一区麻豆最新章节| 水莓100国产免费av在线播放| 97成人在线| 日韩欧美在线中文字幕| av加勒比在线| 超碰成人在线播放| 欧美手机在线| 免费看黄色的网站| 亚洲成a人v欧美综合天堂下载| 亚洲无码久久久久| 91精品国产综合久| 91欧美日韩在线| 蜜桃av免费看| 免费人成在线观看网站| gai在线观看免费高清| 亚洲成a人v欧美综合天堂下载| 香蕉视频国产在线| 欧美日韩在线精品一区二区三区激情| 亚洲巨乳在线| 成人精品在线| 欧美黄色一级| 在线精品视频播放| 日本福利视频网站| 国产精品第一| 国模精品一区二区三区色天香| 欧美精品一区二区性色a+v| 久久久蜜臀国产一区二区| 一区二区三区视频在线| 亚洲爽爆av| 欧美日韩一区在线视频| 91精东传媒理伦片在线观看| 99麻豆久久久国产精品免费优播| 国产亚洲精品v| 免费一级suv好看的国产网站| 国产精品成人aaaa在线| www.av蜜桃| 91在线观看喷潮| 日本高清在线观看视频| 日韩欧美高清在线播放| 日韩乱码人妻无码中文字幕久久| 狠狠操视频网站| 日本一区二区在线视频观看| 国产精品1区2区3区在线观看| 国产成人综合亚洲欧美在| 二级片在线观看| 一区二区三区日韩欧美| 仙踪林久久久久久久999| 久久这里只有精品18| 日本一区二区三区四区五区| 久久精品亚洲成在人线av网址| 亚洲人成77777在线观看网| 欧美日韩久久久久久| 免费观看v片在线观看| 国产永久免费高清在线观看视频| 无码人妻丰满熟妇啪啪网站| 国产亚洲欧美精品久久久久久| 亚洲精品视频一二三区| jvid福利在线一区二区| 日本一区视频在线| 亚洲无码精品一区二区三区| 无码国产69精品久久久久同性| 亚洲一区免费在线| 国产精品视频观看| 欧美精品18videos性欧美| 日本成人在线视频网站| 青青草视频在线免费观看| 中文字幕少妇| 一级香蕉视频在线观看| 欧美日韩国产色视频| 大地资源网在线观看免费官网| 免费视频一区二区三区在线观看| 日韩av一区二区在线观看| 野花社区视频在线观看| 久久久久久美女精品| 日韩欧美2区| 欧美成va人片在线观看| 福利地址发布页| 久久超级碰视频| 国产又黄又猛又爽| 亚洲一区二区三区午夜| 国产乱精品一区二区三区| 先锋影音男人站| 国产精品初高中害羞小美女文| 欧美黄页免费| 免费欧美激情| 午夜色在线观看| 久久理论片午夜琪琪电影网| 92福利视频午夜1000合集在线观看| 久久不卡日韩美女| 狠狠色噜噜狠狠狠狠97| 色爱综合网欧美| 蜜桃视频成人m3u8| 岛国av在线| 亚洲精品成人免费| 波多野结衣在线高清| 奇米777在线视频| 可以在线观看的av| www.久久ai| 黄色网址电影| 国产99久久久久| 先锋影音男人资源| 伊人春色之综合网| 日本美女一区二区三区| http;//www.99re视频| 8x海外华人永久免费日韩内陆视频| 精品视频123区在线观看| 动漫成人在线观看| 日韩欧美高清在线观看| 成人午夜电影在线播放| 欧美v亚洲v| 在线观看日韩羞羞视频| 在线不卡一区| 中文国产成人精品久久一| 在线一区电影| 美女av在线免费观看| 久久久九九九热| 欧美成人国产精品一区二区| 国产精品日韩欧美一区| 日本a级片免费观看| 五月婷婷亚洲| 日本熟女毛茸茸| 国产美女极度色诱视频www| 欧美一区二区在线免费观看| 免费看成人a| 国产三级一区二区三区| 国产一区二区三区黄视频| 狠狠爱一区二区三区| 欧美另类videos粗暴黑人| 欧美激情一区二区三区成人| 中文字幕字幕中文在线中不卡视频| 欧美午夜视频在线| 色综合久久88色综合天天提莫| 国产一区亚洲二区三区| 91精品久久久久久久久久久久| 欧美亚洲一区二区在线观看| 蜜桃视频一区二区三区在线观看| 激情国产一区| 九九九免费视频| 欧美日韩一区二区三区在线看| 国产在线美女| 亚洲成色777777女色窝| 国产精品黄页免费高清在线观看| 性色视频在线观看| 国产精品av久久久久久麻豆网| 免费网站观看www在线观| 亚洲一区电影在线观看| 国产河南妇女毛片精品久久久| 麻豆视频在线免费观看| 久久精品亚洲人成影院| 国产三级电影在线| 三区视频在线观看| 久久国产精品久久| 粉嫩在线一区二区三区视频| 天堂av在线中文| 深夜激情久久| 亚洲成av人片在线观看无码| 大胆国模一区二区三区| 一区二区三区四区不卡| 亚洲一区二区三区在线| 黄色一二三区| 精品欧美在线观看| 91亚洲国产成人精品一区二区三| 一区二区三区我不卡| 欧美日韩一区二区免费在线观看| 蜜臀视频在线观看| 欧美性潮喷xxxxx免费视频看| 蜜臀精品一区二区三区| 成 人 免费 黄 色| 亚洲精品护士| 国内揄拍国内精品久久| 妞干网在线视频观看| 欧美jizz19性欧美| 亚洲精品国偷拍自产在线观看蜜桃| 国产美女主播视频一区| 美脚丝袜脚交一区二区| 日韩有码在线电影| 一区二区免费在线观看视频| 国产精品一区二区在线免费观看| 精品欧美一区二区三区在线观看| 国产日产欧美一区二区| 久久久精品免费视频| 黑人狂躁日本妞一区二区三区| 免费av播放| 国产欧美欧洲在线观看| 日韩视频在线观看免费视频| 26uuu亚洲婷婷狠狠天堂| 欧美在线观看不卡| 91深夜福利视频| 黄色工厂在线观看| 99热这里只有精品1| 欧美亚洲日本在线| 爱搞国产精品| 久久久这里只有精品视频| 欧美最猛性xxxxx直播| 国产极品久久久久久久久波多结野| 97成人在线观看| 亚洲日韩视频| 77777少妇光屁股久久一区| 久热这里只有精品6| 嫩草国产精品入口| 无码熟妇人妻av| 免费观看欧美大片| 香蕉视频1024| 老司机精品福利在线观看| 亚洲另类黄色| 精品久久久久久久久久久久包黑料| 国产在线美女| 综合天堂av久久久久久久| 国产精品186在线观看在线播放| 日韩精品视频免费专区在线播放| **欧美大码日韩| 看看黄色一级片| 国产5g成人5g天天爽| 欧美视频在线不卡| 久久免费视频网站| 国产精选在线观看| 国产欧美日韩亚洲精品| 日韩中文字幕视频在线| 亚洲欧洲中文天堂| 日韩三级视频在线播放| 亚洲国产黄色| 国产 福利 在线| 欧美第一精品| 中文av在线播放| 中文字幕永久在线观看| 国产精品美女久久久久久久久| 久蕉在线视频| 最新福利小视频在线播放| 日本色七七影院| 二区三区在线视频| 国产精品一区二区久久不卡| 国产精品入口麻豆原神| 亚洲成人黄色小说| 国产精品久久久久久久久久免费| 天堂8在线天堂资源bt| 色妞一区二区三区| 亚洲精品成人精品456| 黄色网址免费看| 久久免费视频网| 欧美性生活一级片| 你懂的网站在线观看网址| 国产又黄又粗又猛又爽的| 国产欧美一区二区三区精品观看| www.com.cn成人| 黄网免费入口| 丰满大乳国产精品| 欧美一区二区三区四区五区六区| 欧美韩日高清| 欧美色片在线观看| 国模大尺度视频| 国产成人久久精品77777| 久久99久久久精品欧美| 污污的视频免费| 在线视频不卡一区二区三区|