如何用原生 JS 实现手势解锁组件

之前一直都在用框架写东西,也没造过什么轮子,所以一直想用原生JS写点什么东西,无奈自己水平又有限,因此只能上网找别人造好的轮子,然后自己研究。本项目并非原创,只是作为一个学习的案例。本篇文章用来记录自己对该项目的学习总结。

一.声明:

  • 本项目全都使用es6/es7语法进行编写,并且使用了多页面开发环境进行打包编译。因此可以作为前端进阶的一个项目,如果你是新手建议去这里
  • 原项目文章写的非常好,组件编写的流程说的很清楚,详情见原项目地址
  • 自己改(zhao)造(chao)的项目地址 (带有大量注释)
  • 原文涉及到的在这里就不再提了,本文主要提及一些原文中没有说到的东西
  • 在看本篇文章之前,先看原项目
  • 本文只是自己对项目源码的理解,如有不对,请及时指出
  • 多页面开发环境的使用方法见这里
  • 演示地址 仅支持移动端

二.知识点

1. change事件

先看MDN上的介绍:

  • 规范 HTML5
  • 接口 Event
  • 冒泡 Yes
  • 可取消 No
  • 目标 Element
  • 默认行为 undefined

从上述介绍来看,change事件可以冒泡,因此可以对表单元素使用事件代理,先看一段代码:




    
    Document


    

这段代码的意思是:一开始让设置密码单选按钮被选中,2s之后再让验证密码按钮选中,触发change事件,这里change事件是被代理的。经过测试你会发现:两秒后验证密码单选按钮被选中,但是change事件回调没有被触发,WTF?。原来是这么回事,再看MDN上的一段描述:

事件触发取决于表单元素的类型(type)和用户对标签的操作:
1. 的默认选项被修改时(通过点击或者键盘事件);
2.当用户完成提交动作时 (例如:点击了标签选择了一个日期,通过 标签上传了一个文件,等 );
3.当标签的值被修改并且失焦后,但并未进行提交 (例如:对