欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

响应式网络相册及node.js常规模块下载更新基础操作

程序员文章站 2022-03-27 09:06:39
...

响应式网络图片示例
当前使用到的代码示例:

代码 示例 说明
insertAdjacentHTML 元素.insertAdjacentHTML(“插入位置”,插入的html字符串); 主要用于某个位置插入html操作(位置说明请看https://www.php.cn/blog/detail/32044.html)
insertAdjacentElement 元素.insertAdjacentElement(“插入的位置”,元素) 某个位置插入元素操作,同样有位置
previousElementSibling ele.previousElementSibling,(这个要看下面的代码,首先要拿到节点的前兄弟元素) 某一个节点的前一个兄弟的语法糖previousElementSibling
nextElementSibling ele.nextElementSibling,(拿到节点的后一个元素) 某一个节点的后一个兄弟的语法糖
after 节点后插入
before 节点前插入

示例代码:

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>网络相册管理器实现案例</title>
  7. </head>
  8. <style>
  9. * {
  10. padding: 0;
  11. margin: 0;
  12. box-sizing: border-box;
  13. }
  14. body {
  15. display: grid;
  16. }
  17. .box {
  18. display: grid;
  19. grid-template-columns: 33.33vw 33.33vw 33.33vw;
  20. place-items: center;
  21. }
  22. li {
  23. list-style: none;
  24. }
  25. button {
  26. width: 60px;
  27. outline: green 1px solid;
  28. border: 0px;
  29. background-color: #fff;
  30. margin-bottom: 4px;
  31. cursor: pointer;
  32. }
  33. button:hover {
  34. background-color: orange;
  35. color: #fff;
  36. }
  37. li div {
  38. display: flex;
  39. clear: none;
  40. width: 200px;
  41. place-content: center;
  42. }
  43. img {
  44. width: 200px;
  45. height: 200px;
  46. }
  47. </style>
  48. <body>
  49. <div class="box">
  50. <!-- js代码部分 -->
  51. </div>
  52. </body>
  53. <script>
  54. let imgs = [
  55. "images/img_1.jpg",
  56. "images/img_2.jpg",
  57. "images/img_3.jpg",
  58. "images/img_4.jpg",
  59. "images/img_5.jpg",
  60. "images/img_6.jpg",
  61. "images/img_7.jpg",
  62. "images/img_8.jpg",
  63. ];
  64. div = document.querySelector(".box");
  65. console.log(div);
  66. // window.onload元素加载完成即立即执行
  67. window.onload = img;
  68. /////组装html处理图片
  69. function img() {
  70. let htmlstr = imgs.reduce(function(acc, img) {
  71. let tpl = `
  72. <li>
  73. <img src="${img}" />
  74. <div>
  75. <button onclick="del(this.parentNode.parentNode)">删除</button>
  76. <button onclick="next(this.parentNode.parentNode)">向后</button>
  77. <button onclick="prev(this.parentNode.parentNode)">向前</button>
  78. </div>
  79. </li>
  80. `;
  81. return acc + tpl;
  82. }, "");
  83. ("");
  84. console.log(htmlstr);
  85. // 元素.insertAdjacentHTML("插入位置",插入的html字符串);
  86. div.insertAdjacentHTML("afterBegin", htmlstr);
  87. //元素.insertAdjacentElement("插入的位置",元素)
  88. }
  89. /////删除某个图片
  90. function del(ele) {
  91. //判断是否是最后一张图片
  92. //如果最前面一张ele.previousElementSibling拿到的元素是空,说明是最前面一张了,就提示用户最后一张了
  93. if (ele.previousElementSibling === null) {
  94. alert("已经到最前面一张了");
  95. return false;
  96. }
  97. // confirm提示是否删除,类似alert,但是alert是个弹出,无取消的回调工作
  98. return confirm("是否删除") ? ele.remove() : false;
  99. }
  100. function prev(ele) {
  101. //向前
  102. // 先声明一个变量,是当前位置的前一个元素,
  103. let prevNode = ele.previousElementSibling;
  104. // 将当前元素插入到前一个元素的位置后面
  105. // prevNode.before(ele);
  106. // 使用定时器给图片一个延迟操作
  107. setTimeout(() => {
  108. prevNode.before(ele);
  109. }, 300);
  110. }
  111. function next(ele) {
  112. //向后
  113. // 拿到当前元素的后面一个元素ele.nextElementSibling;
  114. let nextNode = ele.nextElementSibling;
  115. //将当前元素插入到后面一个元素的位置后面
  116. //netNode.after(ele);
  117. //使用定时器给图片做一个延迟操作
  118. setTimeout(() => {
  119. prevNode.after(ele);
  120. }, 300);
  121. }
  122. </script>
  123. </html>

node.js基础操作

  1. # Node.js 基础
  2. ## 1. 下载与安装
  3. 1. 下载: <https://nodejs.org/zh-cn/>
  4. 2. 参考镜像: <http://nodejs.cn/>
  5. ```shell
  6. # node版本号
  7. node --version
  8. node -v;
  9. # npm版本号
  10. npm --version
  11. npm -v;
  12. # 查看当前路径
  13. pwd
  14. # 进入目录
  15. cd path # path用具体路径名称代替
  16. # 清屏
  17. clear

node 参数规律: 全称用”—“, 简化用 “-“

2. 命令行交互式

  1. node
  2. > let a = 1;
  3. > let b = 2;
  4. > console.log(`${a} + ${b} = ${a+b}`);
  5. > process.exit() # 退出命令行
  6. > .exit # process.exit()简化
  7. #使用简体的时候,不要加()

3. 执行 js 文件

  • demo1.js
  1. let a = 1;
  2. let b = 2;
  3. console.log(`${a} + ${b} = ${a + b}`);
  4. // console.log()控制台输出,类似还有:
  5. // console.info(): 与console.log()功能类似
  6. // console.dir(): 对象信息
  7. // console.warn(): 警告信息
  8. // console.error(): 出错信息
  9. // console.trace(): 当前跟踪栈信息
  10. // console.time(f),console.timeEnd(f)统计执行时间
  • 执行
  1. # node js文件名
  2. node demo1.js
  3. > 1 + 2 = 3
  4. # node 默认执行的就是js文件,所以扩展名可省略
  5. node demo1
  6. > 1 + 2 = 3

4. npm

  • npm: node 内置的”包”管理器,与 node 发行版本一起提供
  • npm version: 查询当前npm更详细的描述信息

NPM 是通过package.json配置文件管理当前项目依赖项

package.json

{
“name”: “0111”, //现在是目录所在的名字,也就是项目的名字,包名
“version”: “1.0.0”,//版本,
“description”: “”,//最好给描述一个东西,如果不给,后面会总是给警告
“main”: “demo.js”,//默认的 node.js 文件的名
“dependencies”: {
“lodash”: “^4.17.21”
},
“devDependencies”: {},
“scripts”: {
“test”: “echo \”Error: no test specified\” && exit 1”
},
“keywords”: [],
“author”: “”,
“license”: “ISC”
“private”:true //如果是 true 就是声明为私有
}

  • 生成package.json

    • 交互式: npm init
    • 默认: npm init --yesnpm init -y(推荐)

<!-- ^4.17.21: 4: 主版本 17: 次版本 21: 补丁/修复 -->

  • 版本号规则: 主版本.次版本.补丁版本,例如3.2.3
    • ^: 锁定主版本,更新到最新的次版本和补丁版本,^3.3.3=>3.5.x,但不会到4.0.x
    • ~: 锁定次版本,更新到最新的补丁版本,~3.2.3=>3.2.5但不会到3.3.x
    • *: 任意版本,即最新版本
    • a,b,c: 锁定到指定版本,禁止更新
  • 版本书写举例
    • 只接受补丁版本的更新:
    • 1.0
    • 1.0.x
    • ~1.0.4
  • 只接受小版本更新:默认补丁也接受
    • 1
    • 1.x
    • ^1.0.4
  • 可接受大版本更新,默认次版本补丁都接受
    • *

5. 安装与删除包

  • package.json与包相关字段

    • dependencies: 生产依赖 如果下载 默认就是生产依赖 当然就是-S
    • devDependencies: 开发依赖 配合下面的开发依赖 -D
  • 安装包指令: npm install packagenpm i package

  • 删除包指令 npm uninstall packagenpm uni package
  • 安装指定版本指定 npm i package@3.*

  • 参数:

    • 生产依赖: --save-S
    • 开发依赖: --save-dev-D 插件的
  • 包会自动下载到node_modules目录中,如果目录不存在会自动创建

  • 并会创建或更新package-lock.json文件,锁定当前版本
  • 当再次安装时,会直接安装package-lock.json中的指定的版本

5.1 全局更新

查看全局项目包地址

  1. npm root
  2. # 不加参数就是当前项目地址 里面的模块目录
  3. npm root --glocal/ npm root -g
  4. # 当前全局模块安装的位置
  5. # 删除全局模块
  6. npm uninstall package -g
  7. #更新完成

6. 更新包

  1. # 检查是否有可更新的包
  2. # 检查全部
  3. npm outdated
  4. # 检查指定包
  5. npm outdated lodash
  6. # 安装用来更新包的插件,推荐安装到全局
  7. npm i -g npm-check-updates
  8. # 查看本地的包
  9. npm list
  10. # 查看是否安装成功?
  11. npm list -g
  12. # 用更新插件来检查可更新的包的列表
  13. # 如果不更新 就可能是权限问题,可以以管理员权限运行
  14. npm-check-updates
  15. # 该命令太长, 通常用 ncu 简化
  16. ncu
  17. # 更新所包更新
  18. npm-check-updates -u
  19. #下面是简化
  20. # 更新所有包到最新版本
  21. ncu -u
  22. # 或仅更新指定的包也可以
  23. ncu -u lodash
  24. # 查看 package.json, 版本号已更新
  25. # 现在只是版本了版本号, 最新的包,还是下载安装到项目中
  26. # 即 "node_modules"中的包,还是老版本
  27. # 所以,还要用 npm install 安装一下
  28. #不指定就默认更新所有
  29. npm install
  30. #更新某一个就指定包名
  31. npm i lodash
  32. # 再次查看包版本,已更新到最新版本
  33. npm list
  34. # 打开package-lock.json,可以看到已锁定到最新版本
  35. # 更新成功,结束
  1. 商品管理 太差了,凑出来的,本来想map循环,没写出来
  2. ```php
  3. <!DOCTYPE html>
  4. <html lang="zh-CN">
  5. <head>
  6. <meta charset="UTF-8" />
  7. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  8. <title>商品管理器</title>
  9. </head>
  10. <body>
  11. <table>
  12. <thead>
  13. <tr>
  14. <th>商品名</th>
  15. <th>商品库存</th>
  16. <th>商品今日销售</th>
  17. <th>上下架</th>
  18. </tr>
  19. </thead>
  20. <tbody>
  21. <!-- <tr>
  22. <td>花生</td>
  23. <td>50</td>
  24. <td>120</td>
  25. <td><button>下架花生</button></td>
  26. </tr>
  27. <tr>
  28. <td>玉米</td>
  29. <td>200</td>
  30. <td>58</td>
  31. <td><button>下架玉米</button></td>
  32. </tr>
  33. <tr>
  34. <td>苹果</td>
  35. <td>180</td>
  36. <td>26</td>
  37. <td><button>下架苹果</button></td>
  38. </tr> -->
  39. </tbody>
  40. <tfoot></tfoot>
  41. </table>
  42. <button onclick="on(this)">一键上架</button>
  43. </body>
  44. <script>
  45. let commodity = {
  46. hua: {
  47. name: "花生",
  48. stock: "50",
  49. today: "120",
  50. },
  51. yumi: {
  52. name: "玉米",
  53. stock: "200",
  54. today: "50",
  55. },
  56. ap: {
  57. name: "苹果",
  58. stock: "180",
  59. today: "26",
  60. },
  61. };
  62. console.log(commodity);
  63. // window.onload(on(ele));
  64. function on(ele) {
  65. const ab = document.querySelector("tbody");
  66. // console.log(ab);
  67. let html = `
  68. <tr class="tr1" >
  69. <td>${commodity.hua.name}</td>
  70. <td>${commodity.hua.stock}</td>
  71. <td>${commodity.hua.today}</td>
  72. <td><button onclick="on1(this)" >下架花生</button></td>
  73. </tr>
  74. <tr class ="tr2">
  75. <td>${commodity.yumi.name}</td>
  76. <td>${commodity.yumi.stock}</td>
  77. <td>${commodity.yumi.today}</td>
  78. <td><button onclick="on2(this)">下架玉米</button></td>
  79. </tr>
  80. <tr class ="tr3">
  81. <td>${commodity.ap.name}</td>
  82. <td>${commodity.ap.stock}</td>
  83. <td>${commodity.ap.today}</td>
  84. <td><button onclick="on3(this)">下架苹果</button></td>
  85. </tr>
  86. `;
  87. ab.insertAdjacentHTML("afterBegin", html);
  88. }
  89. function on1(ele) {
  90. ele.parentNode.parentNode.remove();
  91. }
  92. function on2(ele) {
  93. ele.parentNode.parentNode.remove();
  94. }
  95. function on3(ele) {
  96. ele.parentNode.parentNode.remove();
  97. }
  98. </script>
  99. </html>