二、SVG視野、分組、坐標(biāo)系統(tǒng)

一、整個(gè)是個(gè)大世界

IMG_1984.PNG

1.1 世界、視窗、視野:

svg: 定義世界,width、height: 控制視窗大小,

viewBox: 控制視野。

viewBox="x, y, width, height"
x:左上角橫坐標(biāo),y:左上角縱坐標(biāo),width:寬度,height:高度

preserveAspectRatio="xMidYMid meet"
第1個(gè)值表示,viewBox如何與SVG視窗對(duì)齊;第2個(gè)值表示,如何維持高寬比(如果有)。
其中,第1個(gè)值又是由兩部分組成的。前半部分表示x方向?qū)R,后半部分表示y方向?qū)R。家族成員如下:

含義
xMin 視窗 和 viewBox的左邊對(duì)齊
xMid 視窗 和 viewBox的x軸中心對(duì)齊
xMax 視窗 和 viewBox的右邊對(duì)齊
YMin 視窗 和 viewBox的上邊緣對(duì)齊。 注意Y是大寫(xiě)。
YMid 視窗 和 viewBox的y軸中心點(diǎn)對(duì)齊。 注意Y是大寫(xiě)。
YMax 視窗 和 viewBox的下邊緣對(duì)齊。 注意Y是大寫(xiě)。

沒(méi)錯(cuò),就是組合的意思:“右-下”和“中-中”對(duì)齊等。

preserveAspectRatio 屬性第2部分的值支持下面3個(gè):

含義
meet 保持縱橫比,viewBox 適應(yīng)視窗,受
slice 保持縱橫比,viewBox比例小的方向 放大填滿(mǎn)視窗,攻
none 扭曲縱橫比,viewBox以 充分適應(yīng)視窗,變態(tài)
IMG_1985.PNG

1.2 viewBox演示

<!DOCTYPE html>
<html>
    <head>
        <title>ViewBox 使用演示</title>
        <style>
            body {
                background: #eee;
            }
            svg {
                position: absolute;
                border: 1px solid green;
                width: 300px;
                height: 200px;
                left: 50%;
                top: 50%;
                margin-top: -100px;
                margin-left: -150px;
                background: white;
            }
            input[type=number] {
                width: 50px;
            }
        </style>
    </head>
    <body>
        <h1>ViewBox 演示</h1>
        <form id="form">
            <fieldset>
                <legend>viewBox</legend>
                <label>x: <input id="vx" type="number" value="0"></label>
                <label>y: <input id="vy" type="number" value="0"></label>
                <label>width: <input id="vw" type="number" value="300"></label>
                <label>height: <input id="vh" type="number" value="200"></label>
            </fieldset>
            <fieldset>
                <legend>preserveAspectRatio</legend>
                <label>align: <select id="align">
                    <option value="none">none</option>
                    <option value="xMinYMin">xMinYMin</option>
                    <option value="xMidYMin">xMidYMin</option>
                    <option value="xMaxYMin">xMaxYMin</option>
                    <option value="xMinYMid">xMinYMid</option>
                    <option value="xMidYMid" selected>xMidYMid</option>
                    <option value="xMaxYMid">xMaxYMid</option>
                    <option value="xMinYMax">xMinYMax</option>
                    <option value="xMidYMax">xMidYMax</option>
                    <option value="xMaxYMax">xMaxYMax</option>
                </select></label>
                <label>meetOrSlice: <select id="meetOrSlice">
                    <option value="meet">meet</option>
                    <option value="slice">slice</option>
                </select></label>
            </fieldset>
        </form>
        <p>
            <svg id="svg" xmlns="http://www.w3.org/2000/svg">
                <!--Face-->
                <circle cx="100" cy="100" r="90" fill="#39F" />
                <!--Eyes-->
                <circle cx="70" cy="80" r="20" fill="white" />
                <circle cx="130" cy="80" r="20" fill="white" />
                <circle cx="65" cy="75" r="10" fill="black" />
                <circle cx="125" cy="75" r="10" fill="black"/>
                <!--Smile-->
                <path d="M 50 140 A 60 60 0 0 0 150 140" 
                    stroke="white" stroke-width="3" fill="none" />
                <rect id="viewBoxIndicator" stroke="red" stroke-width="3.5" fill="none" />
            </svg>
        </p>
        <script>
            function update() {
                var viewBox =  [vx.value, vy.value, vw.value, vh.value].join(' ');
                var preserveAspectRatio = [align.value, meetOrSlice.value].join(' ');
                svg.setAttribute('viewBox', viewBox);
                svg.setAttribute('preserveAspectRatio', preserveAspectRatio);

                var rect = viewBoxIndicator;
                rect.setAttribute('x', vx.value);
                rect.setAttribute('y', vy.value);
                rect.setAttribute('width', vw.value);
                rect.setAttribute('height', vh.value);
            }
            form.addEventListener('input', update);
            update();
        </script>
    </body>
</html>

preserveAspectRatio: xMidYMid slice

IMG_1988.PNG

preserveAspectRatio: xMidYMid meet

IMG_1989.PNG

二、圖形分組

IMG_1992.PNG

例子:

IMG_1993.PNG

三、坐標(biāo)系統(tǒng)

3.1 SVG的坐標(biāo)系

IMG_1996.PNG

3.2 四個(gè)坐標(biāo)系的定義:

IMG_1997.PNG

例:

Oc和Od分別是C和D的自身坐標(biāo)系、Ob是C和D的前驅(qū)坐標(biāo)系,

Ob是B的自身坐標(biāo)系、Oa是B的前驅(qū)坐標(biāo)系,

Oa是世界坐標(biāo)系亦稱(chēng)用戶(hù)坐標(biāo)系

IMG_2006.PNG

四、線(xiàn)性變換

4.1 transform屬性:

transform屬性定義的是: 一個(gè)元素, 對(duì)自身坐標(biāo)系的變換

IMG_2012.PNG

4.2 Transform綜合案例

例:對(duì)分組c先旋轉(zhuǎn)30度,再向x軸平移100

可以看出c是向 旋轉(zhuǎn)后的x方向 平移的

IMG_2019.PNG
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 使用XML描述的矢量文件W3C標(biāo)準(zhǔn)(1.1):http://www.w3.org/TR/SVG11/瀏覽器支持情況...
    沒(méi)汁帥閱讀 6,164評(píng)論 0 16
  • 資料來(lái)源 imooc 慕課網(wǎng) 2.1 世界,視野,視窗 世界:是無(wú)窮大的,由svg代碼定義 視野:觀看 世界 的一...
    _chuuuing_閱讀 409評(píng)論 0 0
  • 理解SVG坐標(biāo)系和變換(第三部分)-建立新視窗 (本文轉(zhuǎn)自w3cplus,這里僅修正了部分個(gè)人認(rèn)為翻譯不恰當(dāng)之處;...
    王策北閱讀 385評(píng)論 0 1
  • 理解SVG坐標(biāo)系和變換(第一部分)-viewport,viewBox,和preserveAspectRatio (...
    王策北閱讀 430評(píng)論 0 1
  • 今天同過(guò)去的許多天一樣,吃完中飯就走出單位到大街上看街景。此時(shí)正午一點(diǎn)的太陽(yáng)正暖洋洋的照著大地和來(lái)來(lái)往往的人們,公...
    堅(jiān)持成長(zhǎng)閱讀 520評(píng)論 0 0

友情鏈接更多精彩內(nèi)容