<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        使用SVG基本操作API的實例講解

        來源:懂視網 責編:小采 時間:2020-11-27 22:30:21
        文檔

        使用SVG基本操作API的實例講解

        使用SVG基本操作API的實例講解:前面的話 本文將詳細介紹SVG基本操作API,并使用這些API制作實例效果 基礎API 在javascript中,可以使用一些基本的API來對SVG進行操作 【NS地址】 因為SVG定義在其自身的命令空間下,而不是HTML的命名空間下,可以作為單獨的XML文件存在。所以需要使用自身
        推薦度:
        導讀使用SVG基本操作API的實例講解:前面的話 本文將詳細介紹SVG基本操作API,并使用這些API制作實例效果 基礎API 在javascript中,可以使用一些基本的API來對SVG進行操作 【NS地址】 因為SVG定義在其自身的命令空間下,而不是HTML的命名空間下,可以作為單獨的XML文件存在。所以需要使用自身

        前面的話

        本文將詳細介紹SVG基本操作API,并使用這些API制作實例效果

        基礎API

        在javascript中,可以使用一些基本的API來對SVG進行操作

        【NS地址】

        因為SVG定義在其自身的命令空間下,而不是HTML的命名空間下,可以作為單獨的XML文件存在。所以需要使用自身的NS地址

        有兩個常用的NS地址

        var SVG_NS = "http://www.w3.org/2000/svg";
        var XLINK_NS = http://www.w3.org/1999/xlink;

        【創建圖形】

        document.createElementNS(SVG_NS,tagName);

        【添加圖形】

        element.appendChild(childElement)

        【設置/獲取屬性】

        element.setAttribute(name,value);
        element.getAttribute(name);

        【設置xlink】

        <a>、<textPath>等標簽需要設置xlink屬性

        element.setAttributeNS(XLINK_NS,'xlink:href',value);

        封裝函數

        將創建標簽及添加屬性的操作封閉成一個函數,方便復用

        function createTag(tag,objAttr){
         var oTag = document.createElementNS('http://www.w3.org/2000/svg',tag);
         for(var attr in objAttr){
         if(attr == 'xlink:href'){
         oTag.setAttributeNS("http://www.w3.org/1999/xlink",attr,objAttr[attr]);
         }else{
         oTag.setAttribute(attr,objAttr[attr]);
         } 
         } 
         return oTag;
        }

        下面通過該函數,創建一個圓形

        <script>
        function createTag(tag,objAttr){
         var oTag = document.createElementNS('http://www.w3.org/2000/svg',tag);
         for(var attr in objAttr){
         if(attr == 'xlink:href'){
         oTag.setAttributeNS("http://www.w3.org/1999/xlink",attr,objAttr[attr]);
         }else{
         oTag.setAttribute(attr,objAttr[attr]);
         } 
         } 
         return oTag;
        } 
        var oSvg = createTag('svg',{'version':'1.1','xmls':'http://www.w3.org/2000/svg',height:'70'});
        var oCircle = createTag('circle',{'cx':'25','cy':'25','r':20,'fill':'pink'});
        oSvg.appendChild(oCircle);
        document.body.appendChild(oSvg);
        </script>

        實例

        下面通過SVG基本操作API,創建一個可交互的SVG實例

        <style>
        #box{
         height: 300px;
         width: 300px;
         background: hsl(20,40%,90%);
         background-image:linear-gradient(90deg,#fb3 11px,transparent 0),
         linear-gradient(90deg,#ab4 23px,transparent 0),
         linear-gradient(90deg,#655 41px,transparent 0);
         background-size: 41px 100%,61px 100%,83px 100%; 
        } 
        </style>
        <div id="box"></div>
        <script>
        var oSvg = createTag('svg',{'version':'1.1','xmls':'http://www.w3.org/2000/svg',height:'100%',width:'100%'});
        var oBox = document.getElementById('box');
        var W = parseInt(getComputedStyle(oBox).width);
        var H = parseInt(getComputedStyle(oBox).height);
        var appearance = {
         'dis':H/3,
         'r0':H/8,'r':H/10,
         'x0':W/2,'y0':H/2,
         'fontSize':H/20,
         'bg0':'hsla(0,0%,100%,.6)','bg':'hsla(0,0%,100%,.3)',
         'color0':'hsl(210,13%,30%)','color':'hsl(210,13%,30%)',
         'borderColor0':'rgba(0,0,0,0.3)','bordercolor':'rgba(0,0,0,0.3)',
         'strokWidth0':3,'strokWidth':2,
         'lineColor':'rgba(0,0,0,0.3)','lineWidth':1,'lineDashed':'5,5'
        }
        var data = {
         text:'前端開發',
         children:[
         {text:'HTML',url:'http://www.cnblogs.com/xiaohuochai/p/5203223.html'},
         {text:'CSS',url:'http://www.cnblogs.com/xiaohuochai/p/5249139.html'},
         {text:'JS',url:'http://www.cnblogs.com/xiaohuochai/p/5613593.html'},
         {text:'ES6',url:'http://www.cnblogs.com/xiaohuochai/p/7233392.html'},
         {text:'HTTP',url:'http://www.cnblogs.com/xiaohuochai/p/6392010.html'},
         {text:'NodeJS',url:'http://www.cnblogs.com/xiaohuochai/p/6940560.html'},
         {text:'前端工具',url:'http://www.cnblogs.com/xiaohuochai/p/6666415.html'},
         ], 
        }
        addChildenTags();
        addCenterTag();
        oBox.appendChild(oSvg);
        function createTag(tag,objAttr){
         var oTag = document.createElementNS('http://www.w3.org/2000/svg',tag);
         for(var attr in objAttr){
         if(attr == 'xlink:href'){
         oTag.setAttributeNS("http://www.w3.org/1999/xlink",attr,objAttr[attr]);
         }else{
         oTag.setAttribute(attr,objAttr[attr]);
         } 
         } 
         return oTag;
        } 
        function addCenterTag(){
         var oG = createTag('g',{'style':'cursor:default'});
         var oCircle = createTag('circle',{'cx':appearance.x0,'cy':appearance.y0,'r':appearance.r0,'fill':appearance.bg0,'stroke':appearance.borderColor0,'stroke-width':appearance.strokWidth0});
         var oText = createTag('text',{'x':appearance.x0,'y':appearance.y0,'font-size':appearance.fontSize,'text-anchor':'middle','dominant-baseline':'middle','stroke-width':appearance.strokWidth0});
         oText.innerHTML = data.text;
         oG.appendChild(oCircle);
         oG.appendChild(oText);
         oSvg.appendChild(oG);
        }
        function addChildenTags(){
         var children = data.children;
         var length = children.length;
         var deg = (360/length)*(2*Math.PI)/360;
         for(var i = 0; i < children.length;i++){
         var cos = Math.cos(deg*i - 90);
         var sin = Math.sin(deg*i - 90);
         var x = appearance.x0 + appearance.dis*cos;
         var y = appearance.y0 + appearance.dis*sin;
         var oA = createTag('a',{'xlink:href':children[i].url,'target':'_black'}); 
         var oG = createTag('g',{'style':'cursor:pointer'}); 
         oG.index = i; 
         var oLine = createTag('line',{'x1':x-appearance.r*cos,y1:y-appearance.r*sin,x2:appearance.x0+appearance.r0*cos,y2:appearance.y0+appearance.r0*sin,'stroke':appearance.lineColor,'stroke-width':appearance.lineWidth,'stroke-dasharray':appearance.lineDashed,'style':'transition:.5s'});
         var oLineHelper = createTag('line',{'x1':x-appearance.r*cos,y1:y-appearance.r*sin,x2:appearance.x0+appearance.r0*cos,y2:appearance.y0+appearance.r0*sin,'stroke':'transparent','stroke-width':10}); 
         var oCircle = createTag('circle',{'cx':x,'cy':y,'r':appearance.r,'fill':appearance.bg,'stroke':appearance.bordercolor,'stroke-width':appearance.strokWidth,'class':'frostedglass'});
         var oText = createTag('text',{'x':x,'y':y,'font-size':appearance.fontSize,'text-anchor':'middle','dominant-baseline':'middle','stroke-width':appearance.strokWidth,fill:appearance.color});
         oText.innerHTML = children[i].text; 
         oG.appendChild(oLine);
         oG.appendChild(oLineHelper); 
         oG.appendChild(oCircle); 
         oG.appendChild(oText);
         oA.appendChild(oG);
         oSvg.appendChild(oA);
         oG.onmouseenter = function(){
         elasticMove(this,appearance.r*1.2);
         var line = this.children[0];
         line.removeAttribute('stroke-dasharray');
         line.setAttribute('stroke-width',appearance.lineWidth*3);
         line.setAttribute('x1',appearance.x0+(appearance.dis - appearance.r0)*Math.cos(deg*this.index - 90));
         line.setAttribute('y1',appearance.y0+(appearance.dis - appearance.r0)*Math.sin(deg*this.index - 90));
         }
         oG.onmouseleave = function(){
         elasticMove(this,appearance.r);
         var line = this.children[0];
         line.setAttribute('stroke-width',appearance.lineWidth);
         line.setAttribute('stroke-dasharray',appearance.lineDashed);
         line.setAttribute('x1',appearance.x0+(appearance.dis - appearance.r)*Math.cos(deg*this.index - 90));
         line.setAttribute('y1',appearance.y0+(appearance.dis - appearance.r)*Math.sin(deg*this.index - 90)); 
         } 
         }
        }
        function elasticMove(obj,str){
         var circle = obj.getElementsByTagName('circle')[0];
         var r0 = circle.getAttribute('r');
         var r = Number(str);
         //聲明步長值
         var step = 0;
         //聲明彈性距離
         var len = r - r0;
         //聲明彈性系數
         var k = 0.7;
         //聲明損耗系數
         var z= 0.7;
         //聲明當前值
         var cur = r0;
         clearInterval(circle.timer);
         circle.timer = setInterval(function(){
         //獲取當前值cur
         cur = circle.getAttribute('r');
         //更新彈性距離
         len = r - cur;
         //彈力影響
         step += len*k;
         //阻力影響
         step = step*z;
         //賦值
         circle.setAttribute('r',Number(cur) + step);
         //當元素的步長值接近于0,并且彈性距離接近于0時,停止定時器
         if(Math.round(step) == 0 && Math.round(len) == 0){
         circle.setAttribute('r',r);
         clearInterval(circle.timer); 
         } 
         },30);
        }
        </script>

        以上這篇使用SVG基本操作API的實例講解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        使用SVG基本操作API的實例講解

        使用SVG基本操作API的實例講解:前面的話 本文將詳細介紹SVG基本操作API,并使用這些API制作實例效果 基礎API 在javascript中,可以使用一些基本的API來對SVG進行操作 【NS地址】 因為SVG定義在其自身的命令空間下,而不是HTML的命名空間下,可以作為單獨的XML文件存在。所以需要使用自身
        推薦度:
        標簽: 實例 基本的 svg
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲国产成人AV网站| 亚洲婷婷综合色高清在线| 精品在线观看免费| 永久黄网站色视频免费观看| 亚洲精品韩国美女在线| 182tv免费视视频线路一二三 | 在免费jizzjizz在线播| 亚洲视频在线观看视频| 久久久久久精品免费免费自慰| 亚洲一区中文字幕在线观看| 久久久久免费看黄A片APP| 亚洲最大天堂无码精品区| 国产精品国产自线拍免费软件| 日本亚洲中午字幕乱码| 狠狠亚洲狠狠欧洲2019| 曰批全过程免费视频在线观看无码 | 亚洲乱亚洲乱妇无码麻豆| 在线看片免费人成视频福利| 亚洲毛片在线观看| 国产在线jyzzjyzz免费麻豆 | 亚洲精品国产美女久久久| 日韩免费人妻AV无码专区蜜桃 | 亚洲欧洲日韩国产一区二区三区| 免费看少妇作爱视频| 亚洲精品国产日韩无码AV永久免费网| 中文字幕人成人乱码亚洲电影| 久久久久国产精品免费看| 亚洲一区二区三区四区视频| 免费一区二区三区四区五区| 中文字幕视频在线免费观看| 亚洲综合一区二区精品久久| 日本免费高清一本视频| 少妇性饥渴无码A区免费 | 女人被男人桶得好爽免费视频 | 美女被暴羞羞免费视频| 亚洲欧洲国产精品你懂的| 国内大片在线免费看| 香蕉成人免费看片视频app下载| 国产精品亚洲自在线播放页码| 国产a不卡片精品免费观看| 少妇太爽了在线观看免费视频|