H5中SVG的使用

一、 SVG — 可縮放矢量圖形

1、 什么是SVG

  • SVG是一種使用XML技術描述二維圖形的語言,svg是一種矢量圖

  • 并不屬于HTML5專有內容,在HTML5出現之前,就有SVG內容,HTML5只不過提供了SVG原生的內容

  • svg文件的擴展名為.svg

2、 SVG的優勢

  • 可通過文本編輯器來創建和修改
  • 圖像中的文本是可選的,同時也是可搜索的(很適合制作地圖)
  • SVG可在任何的分辨率下被高質量的打印
  • 可在圖片質量不下降的情況下被放大
  • SVG 與 JPEG 和 GIF 圖像比起來,尺寸更小,且可壓縮性更強。
  • 支持事件綁定
  • SVG 可以與 Java 技術一起運行
  • SVG 是開放的標準
  • SVG 文件是純粹的 XML

3、 SVG與canvas的區別

  • SVG - 實際開發中,多用SVG

      不依賴分辨率   
      支持事件處理器   
      不適合游戲   
      大型渲染區域的程序(例如,百度地圖)
    
  • Canvas

      依賴分辨率   
      不支持事件綁定    
      最適合網頁游戲   
      可以用圖片格式保存圖像 
    

不是是SVG還是Canvas,在一個頁面中都可以同時定義多個

4、用途



靜態繪制圖形
動態動畫效果
專門提供事件

二、SVG — 繪制圖形

1、創建SVG元素 <svg> </svg>
類似于canvas元素,可在元素內寫 width=" " height=" "
但可以使用css樣式
使用svg繪制圖形,必須定義在svg元素中
2、畫矩形 —— 創建矩形元素
<rect x="100" y="100" width="200" height="150" fill="blue" stroke="red" stroke-width="5"> </rect>

如果使用style屬性來設置他的樣式,例如設置背景顏色style="background:red"是不行的,要使用style="fill:red"
3、畫圓形 —— 創建圓形元素
<circle cx="50" cy="50" r="50"></circle>
4、畫橢圓形 —— 創建橢圓元素
<ellipse cx="" cy="" rx="" ry="">

cx 屬性定義原點的 x 坐標
cy 屬性定義原點的 y 坐標
rx 屬性定義水平半徑
ry 屬性定義垂直半徑
ry = rx 畫出來的就是一個圓
5、 畫直線 —— 創建直線元素

顏色必須得加

<line x1=" " y1=" " x2=" " y2=" " stroke-width=" " stroke=" ">
填上對應的數值
6、 畫折線 —— 創建折線元素
points - 設置起點 折點及重點,x和y用逗號分隔,多個折點用空格隔開

會默認將折線中的區域(起點到終點),默認提供黑色,將fill設置為canvas的顏色,將stroke設置為另一種顏色

<polyline points=" " stroke=" " fill=" "></polyline> //最后的連接點無法完整的連接
7、 畫多邊形 —— 多邊形元素
//不用考慮折點的顯示問題
<polygon points="">

*例子 *

<svg id="" style="width:400px;height:400px;background-color:yellow;">
    <rect x="150" y="150" width="100" height="100" fill="red" stroke="black" stroke-width="5px"></rect>
    <circle cx="80" cy="80" r="50" fill="red"></circle>
    <ellipse cx="90" cy="300" rx="90" ry="50"></ellipse>
    <line x1="10" y1="10" x2="200" y2="200" stroke-width="2" stroke="white" ></line>        
    <polyline points="100,20 300,70 200,300 100,20" stroke="#e4393c" fill="yellow"></polyline>
    <!--     line只能設置一次    -->
    <!--<line x1="280" y1="200" x2="300" y2="100" stroke-width="2" stroke="white">-->
</svg>
<script type="text/javascript">
    var rect=document.querySelector("svg rect");
    //無法通過js修改屬性
    console.info(rect.width);
</script>

三、SVG — 漸變

1、 線性漸變步驟
  • 首先在html里面創建SVG元素

        <svg></svg>
    
  • 然后在svg里追加defs元素

        <svg>
           <defs></defs>
        </svg>
    
  • 在defs里追加linearGradient元素,他才是真正實現漸變的元素

      <svg>
        <defs>            
          <linearGradient x1="" y1="" x2="" y2=""></linearGradient>            
        </defs>
      </svg>
      
      //x1、y1:起點坐標值
      //x2、y2:終點坐標值
      
      //注意: 這四個值都是百分比
    
  • 在linearGradient里面追加stop元素,stop元素真正設置漸變顏色

      <svg>
       <defs>
         <linearGradient>              
            <stop offset="" stop-color="" stop-opacity="">
            <stop offset="" stop-color="">        
         </linearGradient>
       </defs>
      </svg>
      
     // offset: 值為百分比
     // stop-color:設置漸變顏色
     // stop-opacity:設置漸變顏色的透明度
    
  • 在defs下面追加<rect>,畫出圖形,并將上面設置的線性漸變,添加到矩形中

      //使用fill屬性,值為url(#漸變元素的id值)
      
      <rect x="0" y="0" width="400" height="400" fill="url(#def)">
    

2、 扇形漸變radialGradient,參考線性漸變

四、SVG — 高斯模糊效果



看下面代碼

 <svg width="500" height="500"> 
   <defs> 
      <filter id="Gaussian_Blur"> 

            //fegaussianblur- 高斯模糊,stdDeviation - 設置模糊程度 
            <feGaussianBlur in="SourceGraphic" stdDeviation="3" /> 

      </filter>
   </defs>
   <rect x="0" y="0" width="400" height="400" filter="url(#def)">
 </svg>

 <!-- 濾鏡使用filter元素   
      in="SourceGraphic" - 固定寫法
 -->

效果

  • 更改 stdDeviation元素的值,會產生相應的效果
  • 設置為負數 無效 會默認為 0
  • 可以試試不斷增加 stdDeviation元素的值,看它怎么變化的
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,885評論 6 541
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,312評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,993評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,667評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,410評論 6 411
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,778評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,775評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,955評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,521評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,266評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,468評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,998評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,696評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,095評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,385評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,193評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,431評論 2 378

推薦閱讀更多精彩內容

  • 在React Native中使用ARTReact Native ART 究竟是什么?所謂ART,是一個在React...
    JackfengGG閱讀 9,552評論 2 50
  • 一、什么是SVG? SVG指可伸縮矢量圖形(Scalable Vector Graphics); SVG用來定義用...
    清心挽風閱讀 1,410評論 1 3
  • 一.什么是SVG? SVG 指的是可伸縮矢量圖形 (Scalable Vector Graphics),它用來定義...
    nightZing閱讀 17,080評論 11 62
  • 學習html5時都會碰到svg和canvas,這兩個都可以在瀏覽器中繪制圖形,那么這兩個有什么區別呢。下面對兩者進...
    稻香Snowy閱讀 3,336評論 0 5
  • 一、柵格圖形和矢量圖形柵格圖形:也稱位圖,圖像由一組二維像素網格表示。Canvas 2d API 就是一款柵格圖形...
    linda102閱讀 1,160評論 0 4