react+antd的开发过程中经常会用到Modal+Form的组合来实现新增、编辑的功能。使用过程中常会遇到this.formRef.current为空的问题。
react的css局部作用域
vue中防止样式污染可以在style中设置scoped来处理,而react中没有直接对应的功能。查阅资料后得知,webpack中包含了CSS modules这个工具来解决该问题。
canvas2d动画、优化
一、动画
动画通过每帧放出不同的画面来实现,而每帧的需要的操作如下:
- 清空上一帧绘制的内容。
- 如果需要保存当前canvas状态(笔刷样式、变形)的话就将其保存一下。
- 绘制这一帧需要画的内容。
- 如果之后需要恢复之前保存的状态的话就恢复一下。
由于动画需要按时切换显示的内容,所以会使用到和时间相关的函数:
setInterval(callback, delay)setTimeout(callback, delay)requestAnimationFrame(callback)
由于setTimeout和setInterval有可能被其他语句耽误,通常使用requestAnimationFrame方法。
本博客banner的动画也是使用这个方法制作的,大致步骤如下:
canvas2d状态保存&恢复、变形、合成、裁剪
canvas2d系统和基本绘制
简单地说:初始状态的canvas是一张透明的画布,我们能用不同方法在canvas上画图。
1 | <canvas width="1440" height="720"></canvas> |
canvas标签的特性只有宽和高可以设置。css中也可以改变它的宽高,但是默认保持原始宽高比。如果在css中强行同时设置宽高的话canvas标签和里面的画面会被拉伸,所以建议使用特性设置宽高。另外,虽然绘制过程中可以作出矢量图,但在浏览器渲染结束以后得到的是位图,这时通过样式放大的图将不会再具有矢量图的特性,马赛克严重。
- 兼容性:目前canvas基本得到了所有较新版本主流浏览器的支持,详见Can I Use Canvas? ,如果遇到了不兼容的浏览器的话,这里也有解决方案:
1 | <canvas width="1440" height="720"> |
- **
</canvas>**是必须的:如果没有写结束标签,那么<canvas>之后的所有内容都会被当做替代内容隐藏。
注意事项
微信小程序和原生web语法不同的地方&小技巧
一、wxml
swiper标签存在默认宽高(100% * 150px)。image标签也存在默认宽高(320px * 240px),可以进行设置全局的样式width: 100%;和特性mode="widthFix"来当作普通img标签使用。
二、wxss
不支持通配符选择器(*)
wxss支持变量,语法(设置主题颜色):
- 定义:
--themeColor: #eb4450; - 使用:
color: var(--themeColor);
- 定义:
如果使用了less,并且使用了类似
calc(100vh - 70rpx)的语句的话,自动生成的wxss会计算错误,变成calc(30vh)。想要原来的代码的话应该使用字符串:~'calc( 100vh - 70rpx )'
三、wxs
相当于页面js中分出来的模块文件
需要使用module.exports导出模块中的数据,然后在引入wxs的wxml中使用module特性定义引入的对象名:
自定义组件
自定义组件
文档:https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/
一、创建自定义组件
在根目录中新建文件夹
components/组件名/创建好文件夹后可以在微信开发者工具中快速新建组件需要的各个文件。
在需要引入该组件的页面的文件夹中打开对应json,引入需要的组件(这里是Tabs组件):
1
2
3
4
5{
"usingComponents": {
"Tabs": "../../components/Tabs/Tabs"
}
}在页面的wxml中使用组件:
1
<Tabs></Tabs>
