学习周报 - 2024/2/25
在HTML中使用SVG的方式(可正常执行SVG内部JS代码)
How to Use SVG Images in CSS and HTML – A Tutorial for Beginners
最近在研究SVG动画,其中一个难题就是如何让SVG内部的JS代码能正常执行,直接使用<img src="XXX.svg"/>
的形式只能是执行CSS样式代码。
如果改为使用<object data="./XXX.svg"></object>
,则可以执行SVG内部的JS代码。
甚至,SVG内部还可以通过window.parent.document
访问到外部环境,并且将控制SVG内部的相关方法挂载到外部,外部再使用该方法来对SVG进行操作。
例如:
circle.svg
:
<svg width="200" height="200" viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg" id="ekg4JmMfD2O1">
<circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="red" id="circle" />
<script>
const circle = document.getElementById('circle');
const outerDocument = window.parent.document;
const player = {
_color: 'red',
get color(){
return this._color
},
set color(value){
this._color = value
circle.setAttribute('fill', value)
}
}
// 把player挂载到outerDocument上
outerDocument.player = player;
</script>
</svg>
index.html
:
<html>
</head>
<body>
<form onsubmit="return false">
<input
type="color"
id="colorInput"
/>
<button onclick="changeColor()">Change Color</button>
</form>
<object data="./circle.svg"></object>
</body>
<script>
changeColor = () => {
const colorInput = document.getElementById('colorInput');
const player = document.player;
player.color = colorInput.value;
};
</script>
</html>
则可以在网页中修改SVG的填充颜色
Webpack、Rollup、Parcel和Vite的对比
Webpack是前端最常用的构建工具,通过丰富的扩展生态,可以实现HMR、SCSS和less的转换、语法降级等各种功能;
Rollup是一个前端打包工具,专注于代码打包过程;
Parcel也是一个前端打包工具,特点是零配置,甚至可以在开发过程中根据涉及到的文件自动安装不同的扩展;
Vite也是一个前端构建工具,不过是专注于浏览器项目开发,通过利用浏览器的原生的模块引入,可以更实现更快的项目启动和HMR。但是也要注意,Vite的打包功能是由Rollup实现的,不过是Vite团队进行了预配置的(很多功能都是Vite通过内置插件实现的)。
npm create vite命令的原理
"npm create vite" 是怎么实现初始化 Vite 项目? - 掘金
npm create
命令是npm init
的别名,在执行这个命令时,如果后面带有<initializer>
参数,则会使用其,则会等同于执行npm exce
命令,即
npm create vite
等于
npm exec create-vite
vue-cli、webpack、Vite和create-vite的关系
vue-cli
是用来构建Vue2项目的脚手架,其构建出来的项目中已经包含有webpack
了,以及其他Vue2项目最佳实践的一些包,
同样的,create-vite
对标的就是vue-cli
,是用来构建Vue3项目的脚手架,其构建出来的项目中包含有Vite
和Vue3项目最佳实践的一些包了。