实现的效果如下:

界面可能不是太好看😁,考虑到容器的高度会被拉长,因此没有用图片做背景。
预览
涉及的知识点
sass(css 预编译器)webpack(自动化构建工具,实现LESS,CSS,JS编译和压缩代码)express(基于 Node.js 平台的 web 开发框架)html+cssNode.js(基于 Chrome V8 引擎的 JavaScript 运行环境)jQuery(一个快速、简洁的JavaScript框架)sequelize(Node的ORM框架Sequelize操作数据库)passport(实现第三方登录)
实现功能
- github第三方登录
- 添加笔记(登录成功后)
- 删除笔记
- 修改笔记
- 使用 markdown(类似 typroa)
- 笔记拖拽
准备工作
- 必要条件:已经安装好了node环境,还没安装的可以去node中文官网下载
- 小提示:如果用 npm 下载感觉慢的话,可以下载一个切换镜像源的工具
nrm,在终端输入:
|
|
然后如下操作:

开始!!
1.新建一个文件夹,名字自己起,打开终端,切换到自己新建文件夹,如:
|
|
2.生成 package.json
|
|
3.安装 express
|
|
4.安装 express生成器:
|
|
5.生成 ejs 模板(类似 jsp 的写法)
|
|

其中public用来存放编译后的js文件以及编译好的css文件等,routes用来存放处理 ajax 的请求文件,views就是存放视图文件
然后新建 database 和 src:

其中 src/js 里面 app 代表不同页面的入口文件,lib 就是一些常用的库,mod 就是你写的一些模块,database 用来存放数据库数据的
6.输入:
|
|
如果有出现下面的错误:

出现这个错误是因为你没有下载模块,只需在终端输入:
|
|
就可以了
7.打开浏览器,输入localhost:3000
出现下面这样就说明成功了:

8.接下来安装webpack和相关依赖
|
|
9.在 src 里建一个 webpack.config.js,配置如下:
|
|
说明
- entry:入口文件,也就是 src/js/app里面的index.js,其中__dirname是获得当前文件所在目录的完整目录名
- output:输出编译后的文件 index.js,输出到 public/js 里面
- module:配置Loaders,通过使用不同的loader,webpack有能力调用外部的脚本或工具,实现对不同格式的文件的处理,比如说分析转换scss为css,或者把下一代的JS文件
- resolve.alias:设置模块别名,便于我们更方便引用,比如说我在 js里面的文件需要 jquery,在里面的文件直接写 require(“jquery”) 就行了
如果所有文件都需要 jquery,那么直接在 plugins里面写成这样:

就不需要 require 了

这个是压缩文件的
10.在 package.json 中,增加如下两条:
写成这样,你在终端就可以写成npm run webpack 来编译文件,npm run watch来监控 src 里面的 js 和 scss 的变化,只要一修改,进行编译,提高了效率
11.测试
你可以试试在 js 里面的 index.js写点东西,然后 npm run webpack,如果终端显示是这样:

就证明成功了
项目思路
逻辑比较简单
- 首先用户必须登录才能添加笔记,当用户失焦的时候,将数据插入数据库,并且重新布局(瀑布流)
- 用户不能更改其他用户的笔记,除了管理员😄
- 用户更新笔记之后,数据库的数据重新更新,重新布局
- 用户可以删除笔记,数据从数据库中删除,重新布局
- 用户可以拖拽笔记,但不将位置存入数据库
实现
html,css就不讲了,可以看看我的源码,主要讲 js。
1.瀑布流的实现
思路:(前提是必须绝对定位)
- 获取元素的宽度
- 通过窗口的宽度除以元素的宽度来获取列数
- 初始化一个数组来获取每列的高度,初始化每列的高度为0
- 遍历元素,获取最小的的列数的高度和索引,对当前元素进行定位,列数高度加等于当前元素的高度
知道思路后,代码很快就写出来了:
|
|
2.笔记的拖拽
我们先看个图

因此代码如下:
|
|
3.提示模块
这个比较容易:
|
|
4.笔记模块
思路:
- 初始化(如 id,username 等等)
- 创建节点
- 设置颜色
- 绑定事件
|
|
5.笔记管理模块
|
|
6.发布订阅模式
|
|
写完模块后,写入口文件index.js
|
|
到这就差不多完成了70%了,接下来就创建数据库,连接数据库了
|
|
然后是在routes 里处理 ajax 请求,处理登录信息,获取 id,用户名等等,到这就基本完成了
总结
经过一星期的开发,了解了前后端联调,模块化开发方式、webpack 及loader和插件的使用、npm 的使用,Express的使用、路由、中间件、sqlite3、nodejs,在开发过程中还是有遇到许多问题,例如在连续声明变量的时候,不小心把逗号写成了分号,其他变量就变成了全局变量,于是就出错了,查了好久😂
不过在这过程之中还是学到了许多,重要的是过程,继续往前端的路走下去😄
