LianTianNo1 / daily_exercise_01

日常练习01

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Canvas 画板工具

在这个demo中,我使用Canvas实现了一个简易的画板工具,包括线条绘制、橡皮擦、颜色填充、清空画板、选择画笔颜色、选择填充颜色、选择笔头粗细等功能。最新更新(2022/10/18)增加了拖拽和撤销功能。

功能介绍

  1. 线条绘制和橡皮擦: 通过选择画笔工具或橡皮擦工具,可以在画板上进行自由绘制。

  2. 颜色填充: 提供了颜色选择器,可以自定义画笔颜色和填充颜色。

  3. 清空画板: 点击清空按钮可以清空整个画板。

  4. 选择画笔颜色和填充颜色: 通过颜色选择器,可以灵活选择画笔和填充颜色。

  5. 选择笔头粗细: 提供了笔头粗细的调节功能,满足不同绘画需求。

  6. 拖拽功能: 最新更新新增了拖拽功能,方便用户调整画板位置。

  7. 撤销功能: 最新更新新增了撤销功能,可以撤销之前的绘画操作。

Vue2响应式原理

在这个demo中,我模拟实现了Vue的数据劫持、双向绑定和数组对象原型方法代理。使用数据劫持结合发布订阅者模式,为对象基本类型和数类型追加getset方法,为数组设置代理。最新更新(2022/11/1)增加了简单的{{}}模板编译及绑定,虚拟DOM和真实DOM转换。

实现细节

  1. 数据劫持: 对象基本类型和数类型通过劫持getset方法实现数据的监听。

  2. 发布订阅者模式: 使用发布订阅者模式实现数据变化时的通知和更新。

  3. {{}}模板编译及绑定: 实现了简单的模板编译,将{{}}中的变量与实际数据绑定。

  4. 虚拟DOM和真实DOM转换: 实现了虚拟DOM和真实DOM的相互转换,提高DOM操作的效率。

炫酷动效展示

这个demo主要展示一些简单而炫酷的动画效果。

包括的动效

  1. 动画效果1: 描述动画效果的具体信息。

  2. 动画效果2: 描述动画效果的具体信息。

原生JS实现图片压缩功能

在这个demo中,我实现了选择图片、压缩后下载的功能。主要使用HTML5的Canvas标签的toDataURLdrawImage方法。首先选择图片,创建img标签,并将其固定定位在屏幕外。然后创建canvas标签,大小和定位在图片上。获取到图片实例,调用canvasdrawImage()将其绘制在canvas上。再调用canvastoDataURL('image/jpeg', 压缩比例)生成压缩后的图片的base64编码。最后调用base64转文件的方法生成文件,动态创建a标签进行下载。

实现步骤

  1. 选择图片: 通过文件选择器选择需要压缩的图片。

  2. 创建img和canvas: 创建img标签并将其固定定位在屏幕外,创建canvas标签,大小和定位与图片相同。

  3. 绘制图片: 获取图片实例,调用canvasdrawImage()将图片绘制在canvas上。

  4. 压缩图片: 调用canvastoDataURL('image/jpeg', 压缩比例)生成压缩后的图片的base64编码。

  5. 生成文件并下载: 调用base64转文件的方法生成文件,动态创建a标签进行下载。

不同动画实现方式效果对比

在这个demo中,我演示了使用CSS3的动画、setIntervalrequestAnimationFrame三种方式实现选择动效进行对比。其中,animation是关键帧动画,类似requestAnimationFrame机制,通过@keyframes来定义关键帧。最流畅。requestAnimationFrame定义浏览器在下一帧优先执行的DOM操作,动画效果和CSS差不多。而setInterval通过计时器来执行动画,但由于JS单线程机制,在执行其他操作时可能导致动画丢帧,表现不如前两者流畅。

About

日常练习01


Languages

Language:HTML 49.9%Language:JavaScript 34.6%Language:CSS 15.5%