马黑黑 发表于 2024-11-20 12:04

svgdr教程·set、sets 和 style

<style>
        .art p { margin: 12px 0; font: normal 18px/24px sans-serif; }
        .art mark { padding: 2px 6px; background: lightblue; }
        .art svg { outline: 1px solid silver; }
        .tRed { color: red; }
</style>

<div class="art">
        <h2>set、sets 和 style</h2>
        <p><span class="tRed">set()</span>、<span class="tRed">sets()</span> 和 <span class="tRed">style()</span> 其实也是补充形式的指令,它们的存在主要是为了帮助主要绘制指令实现更灵活的属性补充。</p>
        <p><storng>一、set</strong></p>
        <p>指令:<mark>set()</p>
        <p>参数:<mark>name, val</mark></p>
        <p>语法:<mark>set(name, val)</mark></p>
        <p>参数说明:</p>
        <blockquote>
                ① name - 必须,字符型,指属性名,例如 'text-anchor'<br>
                ② val - 必须,字符型,属性值,例如,针对 'text-anchor' 属性:'start' | 'middle' | 'end'<br>
                * set() 只能设置一个属性,例:set('text-anchor', 'middle')
        </blockquote>
        <p><strong>二、sets</strong></p>
        <p>指令:<mark>sets()</mark></p>
        <p>参数:<mark>option</mark></p>
        <p>语法:<mark>sets(option)</mark></p>
        <p>参数说明:</p>
        <blockquote>
                ① option - 一个或一组有花括号里的JS键值对,用以描述所添加的SVG属性和属性值<br>
                * 健名有短横线连接的,需要用引号,没有的不用引号;键值为纯数值的可以不用引号,字符型的必须用引号
        </blockquote>
       
        <p><strong>三、style</strong></p>
        <p>指令:<mark>style()</mark></p>
        <p>参数:<mark>val</mark></p>
        <p>语法:<mark>style(val)</mark></p>
        <p>参数说明:</p>
        <blockquote>
                ① val - 一个或一组有引号包裹起来的CSS键值对,用以描述所添加的CSS属性或CSS支持的SVG属性和对应属性值<br>
                * val 参数整体需要引号包裹,支持反引号<mark>`...`</mark>、小角单引号<mark>'...'</mark>和小角双引号<mark>"..."</mark>
        </blockquote>
        <p>下面以绘制文本为例,演示如何使用 set()、sets() 和 style() 指令:</p>
        <div id="div1"><pre id="pre1">
//单一参数绘制文本 :文本将不会显示,因为x、y默认为0,通过set()设置垂直悬挂对齐,文本可见
dr.text('Hello SVG').set('dominant-baseline', 'hanging');

//定位绘制文本 :x设置为100,但由于用 sets() 指令设置了水平方向 middle 对齐,文本有一半跑到了x的左边
dr1.text('Hello SVG',100,50).sets({
        'font-size': 30,
        fill: 'blue',
        'text-anchor': 'middle',
});

//上述第二种画法的一种方式 :style() 指令,纯CSS写法,支持部分SVG属性
dr.text('Hello SVG',100,100).style(`
        font-size: 30px;
        fill: blue;
        text-anchor: middle;
        dominant-baseline: middle;
`);
        </pre></div>
        <svg id="svg1" width="760" height="140"></svg>
        <p>上述效果的SVG代码:</p>
        <div id="div2"><pre id="pre2"></pre></div>
        <p>这里特别提醒,注意分清 <span class="tRed">sets()</span> 指令和 <span class="tRed">style()</span> 指令组织参数的区别,因为二者所使用的参数类型不同。<span class="tRed">sets()</span> 指令使用的参数是JS Object对象,用花括号将多组键值对(健名: 键值)组织起来,各键值对之间用小角逗号隔开,健名有短横线的需要使用小角引号包裹起来,键值为字符型的一样需要引号;<span class="tRed">style()</span> 指令使用字符型参数,整体需要引号包裹,各属性则按CSS的书写方式组织各键值对,键值对之间用小角分号隔开,健名、键值都不需要引号,同时注意,① 若需分行写,包裹整体CSS整体参数值的引号需要用反引号,不分行的反引号、小角单或双引号都行,② 纯CSS属性的,如 font-size 属性,其值若需要单位的得有单位(如 px),CSS所支持的SVG属性的,如 cx,则不要单位。</p>

        <p><a href="/forum.php?mod=viewthread&tid=79137&extra=page%3D1" targete="_blank">返回目录</a></p>
        <!--p><a href="/art/bshow.php?st=7&sd=7&art=mahei_1730435960" targete="_blank">返回目录</a></p-->
</div>

<script type="module">
import hl from 'https://638183.freep.cn/638183/web/mod/helight.js';
import draw from 'https://638183.freep.cn/638183/web/mod/svgdr.js';

var dr = draw.dr('svg1');
dr.text('Hello SVG').set('dominant-baseline', 'hanging');
dr.text('Hello SVG',100,60).sets({
        'font-size': 30,
        fill: 'blue',
        'text-anchor': 'middle',
});
dr.text('Hello SVG',100,100).style(`
        font-size: 30px;
        fill: blue;
        text-anchor: middle;
        dominant-baseline: middle;
`);
pre2.textContent = dr.code(svg1);

hl.hl(div1, pre1);
hl.hl(div2, pre2);

</script>

红影 发表于 2024-11-20 12:48

这个的仔细讲解也特别好,很容易混同和使用中用错的指令呢。
感谢黑黑的详细讲解,辛苦了{:4_187:}

梦江南 发表于 2024-11-20 13:59

谢谢老师辛苦,学习了。{:4_190:}

小辣椒 发表于 2024-11-20 16:09

小椒学习一下{:4_187:}

马黑黑 发表于 2024-11-20 17:21

小辣椒 发表于 2024-11-20 16:09
小椒学习一下

{:5_108:}

红影 发表于 2024-11-20 19:03

这几个指令在细节上很需要注意呢,什么时候需要小单引号,什么时候需要花括号之类的。
只能多看看,体会和区分其中细节{:4_187:}

花飞飞 发表于 2024-11-20 19:41

补充形式的指令见过set和style,
sets这个加个s的感觉头一回露面的样纸。。{:5_117:}
看来看去这个sets可补充的更详细?有点高级。。

花飞飞 发表于 2024-11-20 19:42

我还是当它是字典,用的时候来查查好了,一时半会儿生记也记不住。。{:4_170:}

马黑黑 发表于 2024-11-20 20:09

花飞飞 发表于 2024-11-20 19:42
我还是当它是字典,用的时候来查查好了,一时半会儿生记也记不住。。

确实不容易记住

马黑黑 发表于 2024-11-20 20:10

花飞飞 发表于 2024-11-20 19:41
补充形式的指令见过set和style,
sets这个加个s的感觉头一回露面的样纸。。
看来看去这个sets可 ...

sets() 是 set() 的升级版

马黑黑 发表于 2024-11-20 20:10

红影 发表于 2024-11-20 19:03
这几个指令在细节上很需要注意呢,什么时候需要小单引号,什么时候需要花括号之类的。
只能多看看,体会和 ...

{:5_108:}

花飞飞 发表于 2024-11-20 20:25

马黑黑 发表于 2024-11-20 20:09
确实不容易记住

那些小引号大引号之类的,你咋就能记住了呢。。{:4_170:}厉害

花飞飞 发表于 2024-11-20 20:26

马黑黑 发表于 2024-11-20 20:10
sets() 是 set() 的升级版

有了升级版就用升级版呗,低配的可不可以去掉算了{:4_173:}

马黑黑 发表于 2024-11-20 20:35

花飞飞 发表于 2024-11-20 20:25
那些小引号大引号之类的,你咋就能记住了呢。。厉害

玩代码的人这个不会是个问题

马黑黑 发表于 2024-11-20 20:36

花飞飞 发表于 2024-11-20 20:26
有了升级版就用升级版呗,低配的可不可以去掉算了

不行。各有各的便利,比方说,我只追加一个属性,用set比用sets方便

花飞飞 发表于 2024-11-20 21:05

马黑黑 发表于 2024-11-20 20:35
玩代码的人这个不会是个问题

{:4_170:}那我就真没办法了。。这经没法取

花飞飞 发表于 2024-11-20 21:06

马黑黑 发表于 2024-11-20 20:36
不行。各有各的便利,比方说,我只追加一个属性,用set比用sets方便

行的,你说了算。。都搁着有用{:4_173:}

马黑黑 发表于 2024-11-20 21:08

花飞飞 发表于 2024-11-20 21:06
行的,你说了算。。都搁着有用

这些都是策划好的

马黑黑 发表于 2024-11-20 21:09

花飞飞 发表于 2024-11-20 21:05
那我就真没办法了。。这经没法取

玩代码首先要过标点符号关,好比学写字首先得过笔画关一样

花飞飞 发表于 2024-11-21 19:24

马黑黑 发表于 2024-11-20 21:08
这些都是策划好的

好哒,缺一不可的样纸。
页: [1] 2 3 4 5
查看完整版本: svgdr教程·set、sets 和 style