2023.4.28 实习学习记录
- Vue
 - 1、SVG学习:
 - 2、watch监听:
 - 3、< g>标签:
 
Vue
1、SVG学习:
- 百度百科:SVG是可缩放矢量图形,是基于可扩展标记语言(标准通用标记语言的子集),用于描述二维矢量图形的一种图形格式。它由万维网联盟制定,是一个开放标准。应该是一种开放标准的矢量图形语言,可让你设计激动人心的、高分辨率的Web图形页面。用户可以直接用代码来描绘图像,可以用任何文字处理工具打开SVG图像,通过改变部分代码来使图像具有交互功能,并可以随时插入到HTML中通过浏览器来观看。
 - 可以直接在HTML中使用
 
<body>
    <svg version="1.1" xmlns="http://www.w3.org/2000/svg" class="cricle_my">
        <!-- cx、cy:图形中心所在位置;r:圆的半径;stroke:图形线的颜色;
            stroke-width:图形线的宽度;fill:封闭图形的填充色 -->
        <circle cx="250" cy="250" r="50" stroke="black" stroke-width="2" fill="red" />
    </svg>
</body>
<style>
    .cricle_my {
        height: 500px;
        width: 500px;
    }
</style>
 

xmlns是命名空间,不了解XML的可能不知道是什么意思,无所谓,这个参数是固定的,照着写就行了。
- 可以单独建立SVG文件,HTML使用标签引入 
  
- 建立SVG文件:

 - 在HTML通过标签引入

 - 运行结果:

 
 - 建立SVG文件:
 - 基础形状标签: 
  
- 矩形 :
<rect width="300" height="100" fill=rgb(0,0,255) stroke-width=1 stroke=rgb(0,0,0)/>- 样式的设置也非常简单,和CSS的行内样式表一样,属性名也都基本和在HTML中使用CSS时相同,目前所用到的唯一不同的是矩形圆角用rx和ry这两个属性进行设置。
 
 - 圆形:
<circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="red" />- cx和cy定义圆心的位置,不设置的话就是(0,0),r是半径。
 
 - 椭圆:
<ellipse cx="240" cy="50" rx="220" ry="30" style="fill:yellow"/>- 椭圆跟圆的区别是椭圆有长轴和短轴,所以有两个属性rx和ry分别表示水平轴和垂直轴的长度
 
 - 直线:
<line x1="0" y1="0" x2="200" y2="200"/>- 直线很简单,用两组(x,y)坐标分别设置起点和终点即可。
 
 - 折线:
<polyline points="0,40 40,40 40,80 80,80 80,120 120,120 120,160"/>- 折线其实也不复杂,就比直线多定义几个点而已,注意每组点之间用空格隔开而不是分号。
 
 - 多边形:
<polygon points="100,10 40,198 190,78 10,78 160,198" style="fill:lime;stroke:purple;stroke-width:5;fill-rule:nonzero;" />
 
    - 多边形稍微复杂一点点,它跟折线很像,也是定义一些点,只不过最后一个点会和第一个点连起来,形成一个封闭图形。
 - 关键在于fill-rule属性,该属性用来如何判断画布上的某区域是否属于该图形“内部”(内部区域将被填充),当然,对三角形或矩形这种路径没有交叉的简单图形,不需要使用该属性,下面的例子是一个五角星。 
      
- fill-rule默认是nonzero,它的规则就是要判断一个点是否在图形内,从该点作任意方向的一条射线,然后检测射线与图形路径的交点情况。从0开始计数,路径从左向右穿过射线则计数加1,从右向左穿过射线则计数减1。得出计数结果后,如果结果是0,则认为点在图形外部,否则认为在内部。
 - fill-rule的另一个值是evenodd,也是做射线,但是做完之后数和图形路径的交点个数,奇数就认为是在内部,偶数就认为在外部。所以将上面代码中的fill-rule改成evenodd后就变成了下面的效果。
 <polygon points="100,10 40,198 190,78 10,78 160,198" style="fill:lime;stroke:purple;stroke-width:5;fill-rule:evenodd;" />

 
 - 路径:路径和折线的区别在于折线是用直线把点连起来,而路径可以通过参数绘制出光滑的曲线。路径可以实现折线的效果,但折线却并不能替代路径。
<path d="M 0 350 q 150 -300 300 0" stroke="blue" stroke-width="5" fill="none" />
 
    - 参数如下:可以用小写字母,但是含义不一样,大写表示绝对绝对定位,而小写表示相对定位。 
      
- M = moveto 起始
 - L = lineto 连线
 - H = horizontal lineto 水平线
 - V = vertical lineto 垂直线
 - C = curveto 曲线,三次贝塞尔曲线
 - S = smooth curveto 也是曲线,三次贝塞尔曲线
 - Q = quadratic Bézier curve 二次贝塞尔曲线
 - T = smooth quadratic Bézier curveto 二次贝塞尔曲线
 - A = elliptical Arc 椭圆弧
 - Z = closepath 闭合(从最后一个点连直线到起始点)
 
 
 - 参数如下:可以用小写字母,但是含义不一样,大写表示绝对绝对定位,而小写表示相对定位。 
      
 
 - 矩形 :
 - 文本标签:基本用法很简单,和HTML一样在开始和结束标签中间写文本就行。 
  
- 子文本
 
 
<text x="10" y="20" style="fill:rgb(0, 174, 255);">兄弟:
    <tspan x="10" y="45">菜鸡程序员</tspan>
    <tspan x="10" y="70">正在努力中</tspan>
</text>
 

 每个 
 
- 旋转文字
 
<text x="10" y="20" style="fill:rgb(0, 174, 255);">兄弟:
    <tspan x="10" y="45">菜鸡程序员</tspan>
    <tspan x="10" y="70">正在努力中</tspan>
</text>
<text x="10" y="45" transform="rotate(90 20,40)" style="fill: red;">正在努力中</text>
 

rotate中的三个参数分别是顺时针旋转的度数、垂直、水平平移的距离(正值表示向上、向右)
- 文字沿路径
定义一条路径,然后通过textPath标签进行设置即可 
<defs>
    <path id="path1" d="M 0 100 q 100 80 200 0" stroke="blue" stroke-width="5" fill="none" />
</defs>
<text x="10" y="100" style="fill:red;">
    <textPath xlink:href="#path1">祝你天天开心,都有好心情</textPath>
</text>
 

2、watch监听:
- 几种方法: 
  
- 通过 watch 监听 data 数据的变化
 
 
watch: {
    data(val, value) {
        
    }
}
 
- 通过 watch 监听 list 数据的变化(使用深度监听)
 
data() {
    return {
        list: {
            'id': 1,
            'type': 0
        },
        number: 0
    }
},
watch: {
    list: {
        handler(newVal) {
            this.number++
        },
        deep: true
    }
}
 
- 通过 watch 监听 data 数据的变化
 
watch: {
    data: 'change' // 值可以为methods的方法名
},
methods: {
    change(curVal,oldVal){
   
  }
}
 
- watch中的immediate、handler和deep属性: 
  
- immediate 和 handler: 
    
- 使用watch时有一个特点,就是当值第一次绑定时,不会执行监听函数,只有值发生改变时才会执行。如果我们需要在最初绑定值的时候也执行函数,则就需要用到immediate属性。
 
 - deep 
    
- 当需要监听一个对象的改变时,普通的watch方法无法监听到对象内部属性的改变,此时就需要deep属性对对象进行深度监听。
 - 设置deep:true则可以监听到 list.id 的变化,此时会给 list 的所有属性都加上这个监听器,当对象属性较多时,每个属性值的变化都会执行 handler。如果只需要监听对象中的一个属性值,则可以做以下优化:使用字符串的形式监听对象属性
 
 
 - immediate 和 handler: 
    
 
data() {
    return {
        list: {
            'id': 1,
            'type': 0
        }
    }
},
watch: {
    'list.id': {  //只会给对象的某个特定的属性加监听器
        handler(newVal, oldVal) {
             ......
        },
    deep: true
    }    
}
 
3、< g>标签:
- 容器标签
 - 分组标签
详解 



















