炫酷的数字产生特效

image.png

一、思维导图

整体功能概述:(显示主体功能然后再阐述具体的添加事件之后的效果)
1.生成1-n的数字(主体部分的数字和中心位置的数字需要同步),然后根据是否是素数添加随机的颜色
2.中间位置的数字如果是素数的话,还需要有淡出的效果
3.主要的一个事件:点击屏幕开始,再次点击之后结束(但是在上次位置暂停)

二、具体代码实现(保姆级别)

2.1 首先在一个目标目录下面进行npm init

image.png
生成package.json文件。

2.2 对于生成的package.json文件进行 配置

image.png

2.3 安装开发环境依赖webpack和webpack-cli

image.png

2.4 创建入口文件

image.png
即在目标目录下创建src文件夹,然后写入一个入口文件

2.5 利用webpack自动生成对应的dist文件夹下面的在任何位置都可以运行的js

image.png

2.6 在dist目录下生成我们最终想要的文件index.html并且引入main.js

image.png

——————————————————-

开发准备结束之后,开始每个功能块的开发

3.1 判断一个数是否是素数(isPrime.js)

  1. /**
  2. * 判断n是否是素数
  3. * 这个模块仅仅导出一个函数
  4. * 传入:一个参数
  5. * 返回值:布尔值,true或者是false
  6. * !每次写完代码或者是一个模块之后都应该进行测试
  7. */
  8. export default function (n) {
  9. if (n <= 1) {
  10. return false;
  11. }
  12. for (let i = 2; i <= n - 1; i++) {
  13. if (n % i == 0) {
  14. return false;
  15. }
  16. }
  17. return true;
  18. }

3.2 生成一个随机的颜色(radColor.js)—这里生成的是rgb()

  1. // 怎么产生一种随机的颜色呢?
  2. function getRandom(min, max) {
  3. return Math.floor(Math.random() * (max - min) + min);
  4. }
  5. export default function(){
  6. return `rgb(${getRandom(0,255)},${getRandom(0,255)},${getRandom(0,255)})`;
  7. };

3.3 抽象类—数字(number.js)

  1. // 该模块返回一个类,该类的实例可以产生数字,也可以终止产生数字
  2. import isPrime from '../util/isPrime';
  3. export default class {
  4. constructor(duration = 500) {
  5. this.duration = duration;
  6. this.number = 1; //默认值从1开始,并且通过this不断保存
  7. this.onCreateNumber = null;
  8. this.timer = null; //保存计时器的上次位置
  9. }
  10. start() {
  11. // 产生数字的过程就是不断调用计时器函数的过程
  12. if (this.timer) { //如果已经在产生数字,避免重复产生数字
  13. return;
  14. }
  15. this.timer = setInterval(() => {
  16. this.number++;
  17. // 产生一个数字过后,在回调函数中判断该数字是否是素数,明显是一个异步操作(即在产生了数字之后才可以判断)
  18. this.onCreateNumber && this.onCreateNumber(this.number, isPrime(this.number));
  19. }, this.duration)
  20. }
  21. stop() {
  22. clearInterval(this.timer);
  23. this.timer = null;
  24. }
  25. }

分析:这个模块的目的是导出一个抽象类,在实例化的时候,可以传入一个参数duration时间间隔,这个时间间隔控制了每次产生数字的时间差;
该类具有两个方法,第一个方法是开始,实例调用该方法的时候,不断的产生随机数(但要首先给onCreatNumber赋值,默认值即可)。第二个方法即是结束。
测试代码:

  1. import numberTimer from './util/number';
  2. const n = new numberTimer();
  3. n.onCreateNumber = function (n, isPrime) {
  4. console.log(n, isPrime);
  5. }
  6. n.start();
  7. setTimeout(() => {
  8. n.stop();
  9. }, 2000);

三、回顾总结

四、利用github的服务器在线演示demo效果

4.1 回顾git的基本使用

image.png

  1. 在相对应的项目目录下面git bash here
  2. git init 初始化
  3. git add . 将所有的工作目录放在暂存区(别忘了写.gitignore)
  4. git commit 进行提交
  5. git status 查看提交的状态
  6. 当 oneline 或 format 与另一个 log 选项 —graph 结合使用时尤其有用。 这个选项添加了一些 ASCII 字符串来形象地展示你的分支、合并历史:git log —pretty=format:”%h %s” —graph
  7. 创建新的分支:git branch dev
  8. 查看当前分支:git branch
  9. 切换分支:git checkout dev

    4.3 从零开始上传到自己的github respsitory

    GitHub在线地址演示: Your site is published at https://bamboo-run.github.io/test111/