zoukankan      html  css  js  c++  java
  • 走进svg

    首先是viewbox的概念

    你最终在浏览器上看到的图像,并不是你通过svg元素中path 之类的元素所定义的图像,或者说你并不是直接看到图像,而是通过一个叫做viewbox的东西,通过viewbox在画布上截取一块区域,然后放到浏览器中svg元素的内容区域中显示,根据align和meetorslice选项来确定填充的方式.一般情况下若不希望填充后的图像发生缩放,应当使viewbox和svg元素的尺寸保持一致

    meet的意思是填充的时候并不要求viewbox的边界不会超出svg元素的边界,slice的意思是无论怎样都要viewbox都要填满svg元素,多出来的部分被裁掉

    path 中

    a命令表示arc  laf表示大弧还是小弧,sf表示顺时针还是逆时针 最后两个参数总是结束点的坐标,这在好多命令中都是相同的,即path命令的最后两个参数总是线条结束点的位置,综合起来a命令是这样的格式

    a rx ry r laf sf x y 

    q cpx cpy x y二次贝塞尔曲线

    c cpx cpy cp2x cp2y x y三次贝塞尔曲线

    T 和S分别是光滑二次和光滑三次贝塞尔曲线

    text标签的dx dy属性用于控制单个字母的偏移

    旋转的圆圈

    <!DOCTYPE html>
    <html>
    <head>
        <title>viewbox 演示</title>
        <script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
    </head>
    <body>
        <svg width="100%" height="1000" xmlns="http://www.w3.org/2000/svg">
            <defs>
                <pattern id="grid" x="0" y="0" width="20" height="20" patternUnits="userSpaceOnUse">
                    <path stroke="#f0f0f0" fill="none" d="M0,0H20V20" />
                </pattern>
            </defs>
            <rect width="1200" height="1000" fill="url(#grid)"></rect>
            <text style="font-size:14px" id="sintext" x="400" y="400">ABCDEFGHIJKLMNOPQRSTUVWXYZ</text>
        </svg>
    </body>
    </html>
    <script>
        var n=26;
        var x=[];
        var y=[];
        var pi=3.1415936;
        var a=2*pi/26;
        var r=200;
        var t=0;
    
        function arrange(t){
            x=[];
            y=[];
            lx=0;
            ly=0;
            for(i=0;i<n;i++){
                nx=r*Math.cos(a*i+t);
                ny=r*Math.sin(a*i+t)
                x.push(nx-lx-7);
                lx=nx;
                y.push(ny-ly);
                ly=ny;            
            }
        }
    
        function render(){
            sintext.setAttribute("dx",x.join(" "));
            sintext.setAttribute("dy",y.join(" "));
        }
    
        function frame(){
            t+=0.01;
            arrange(t);
            render();
            requestAnimationFrame(frame);
        }
        frame();
    
    </script>

     tspan相当于span就是单独控制一节文字的样式

    svg动画可以将animate标签加入到需要动画的元素中,或者使用xlink:href="url(#target)"链接到需要动画的元素

    相信世界是平的
    谨记四个字“修身养性”
    大江东去浪淘尽英雄,再牛B的人物最后也是一掊土
    向善不是目的,而是抚慰心灵,更多的感受幸福,感谢别人给你行善的机会
    相信老子的话:万物生于有,有生于无,一切的道理都源于一个无法证明的假设
    我是好是坏就自然而然的摆在那里,并不会因为别人的评价而改变什么,我也不需要别人用一张纸来说明我什么,世间最难得的是自由



    支持大额赞助:
  • 相关阅读:
    this.$nextTick()的原理与使用场景
    vue中通过方法返回data中的对象是这个{__ob__: Observer}
    3月23日学习日志
    3月22日学习日志
    3月19日学习日志
    3月18日学习日志
    3月17日学习日志
    3月16日学习日志
    3月15日学习日志
    3月12日学习日志
  • 原文地址:https://www.cnblogs.com/sky-view/p/4843865.html
Copyright © 2011-2022 走看看