ASCII码 ASCII码

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

发布于:2022-01-13 10:56:09  栏目:技术文档

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

代码 示例 说明
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>
相关推荐
阅读 +