2020-02-26    2025-01-06    8459 字  17 分钟

::  多少事,从来急;天地转,光阴迫。一万年太久,只争朝夕。 – 教员

WIKI

如何给虚拟机 IP 设置自定义域名映射

可以在本机上修改 hosts 文件,将自定义的域名指向到虚拟机的 IP 地址。

Windows 上修改 hosts 文件,用编辑器打开 %SystemRoot%\System32\drivers\etc\hosts 文件,输入自定义域名和虚拟机 IP 地址,如下:

192.168.127.130    aituyaa.lo

保存文件,刷新 DNS 缓存(ipconfig /flushdns)即可。

在 macOS 或 Linux 上修改 host 文件

1
2
3
4
sudo nano /etc/hosts

# 追加后,保存
192.168.127.130    aituyaa.lo

保存文件,刷新 DNS 缓存(方法有点多,不多赘述)。

❗❗❗安装和激活全程断网!!!

➡️ Navicat Premium 15 永久破解激活工具及安装教程(亲测可用) - MarchXD - 博客园

如何设置 AntDesign 组件中的文字为中文

在你的 React 应用的入口文件(通常是 index.js 或 App.js)中,引入中文语言包 zh_CN。然后使用 ConfigProvider 组件包裹你的应用,并将 zh_CN 作为 locale 属性的值传递给它。

1
2
3
4
5
6
7
8
9
import zh_CN from 'antd/es/locale/zh_CN';
// ...

ReactDOM.render(
    <ConfigProvider locale={zh_CN}>
        <App /> 
    </ConfigProvider>,
    document.getElementById('root')
);

如果你只想对特定的组件应用中文,而不是整个应用,那么只需在这些组件外部包裹 ConfigProvider 即可。

关闭、禁用或卸载 OneDrive

➡️ 关闭、禁用或卸载 OneDrive - Microsoft 支持

一些护眼色

绿豆沙 #C7EDCC RGB(199, 237, 204) 
银河白 #FFFFFF RGB(255, 255, 255)
杏仁黄 #FAF9DE RGB(250, 249, 222)
秋叶褐 #FFF2E2 RGB(255, 242, 226)
胭脂红 #FDE6E0 RGB(253, 230, 224)
海天蓝 #DCE2F1 RGB(220, 226, 241) 
葛巾紫 #E9EBFE RGB(233, 235, 254)
极光灰 #EAEAEF RGB(234, 234, 239)
青草绿 #E3EDCD RGB(227, 237, 205) 
电脑管家 #CCE8CF RGB(204, 232, 207)
WPS #6E7B6C RGB(110, 123, 108)

![[assets/Pasted image 20241213153118.png|400]]

OBS 录制的视频声音越来越大

我一开始也以为是麦克风之类的问题,还换了个好一点的麦克风结果还有这个情况。费尽心机才发现是播放器的锅,没错,就是那个 PotPlayer 播放器!

这个播放器自带一个 音量规格化设置,默认是开启的,所以声音都会变得特别大,实际上 obs 录制的视频音量还是没变化的,把这个选项勾掉即可。

![[assets/Pasted image 20241213151943.png|420]]

ElementUI 实现表格 selection 的默认勾选

➡️ Vue elementui 实现表格selection的默认勾选

安装 Docker 并配置镜像加速源

➡️ https://cloud.tencent.com/document/product/1207/45596

encodeURI 和 encodeURIComponent 的区别

特性 encodeURI encodeURIComponent
作用范围 整个 URL URL 的组成部分(如查询参数)
编码的字符 保留字符(如 /:;?&=)不编码 保留字符也会编码
适用场景 编码完整的 URL 编码 URL 的查询参数或路径片段

避免 Input 组件聚焦后按 Enter 键导致页面刷新的问题

问:在 vue 项目开发时,运用 element-ui 或者 iView 组件的 Form 组件;当 Form 组件中只有一个 Input 组件时,鼠标聚焦输入框后,点击回车键,页面就会刷新。

答:在组件Form上添加 @submit.native.prevent

如何保持 SSH 连接

最近在配置服务器相关内容时候,不同的事情导致长时间不操作,页面就断开了连接,不能操作,只能关闭窗口,最后通过以下命令解决。SSH 连接 linux 时,长时间不操作就断开的解决方案:

1、修改/etc/ssh/sshd_config 文件,如果找到 ClientAliveInterval 0ClientAliveCountMax 3 并将注释符号("#")去掉。

  • ClientAliveInterval 对应的 0 改成为一个数值比如 60,数值是秒
  • ClientAliveInterval 指定了服务器端向客户端请求消息 的时间间隔, 默认是 0, 不发送.
  • ClientAliveInterval 60 表示每分钟发送一次, 然后客户端响应, 这样就保持长连接了.
  • ClientAliveCountMax, 使用默认值 3 即可。ClientAliveCountMax 表示服务器发出请求后客户端没有响应的次数达到一定值, 就自动断开,正常情况下, 客户端不会不响应.

2、查找后发现是没有 ClientAliveIntervalClientAliveCountMax 等属性 ,则在文件后添加,属性内容值参照步骤 1。

ClientAliveInterval 60  
ClientAliveCountMax 3

3、重启 sshd 服务:

service sshd restart

修改配置之后要让配置生效,一定要重启 sshd 服务。

如何修改 PowerShell 脚本运行策略

1. 查看当前执行策略

在 PowerShell 中,可以使用 Get - ExecutionPolicy 命令来查看当前的执行策略。执行策略决定了 PowerShell 加载哪些配置文件和运行哪些脚本。它可能返回以下几种策略:

  • Restricted(默认):不允许任何脚本运行,这是最安全的设置。
  • AllSigned:只允许运行经过数字签名的脚本。
  • RemoteSigned:允许运行本地编写的脚本,但对于从网络(如 Internet)下载的脚本,要求有数字签名。
  • Unrestricted:允许运行所有脚本,但在运行从网络下载的脚本时会有安全提示。

2. 修改执行策略

以设置为 RemoteSigned 为例,如下:

  • 以管理员身份运行 PowerShell:因为修改执行策略需要管理员权限,所以首先要以管理员身份打开 PowerShell。在开始菜单中找到 “Windows PowerShell”,右键点击并选择 “以管理员身份运行”。
  • 修改策略:在管理员权限的 PowerShell 窗口中,输入 Set - ExecutionPolicy RemoteSigned 命令。
  • 确认操作:执行这个命令后,PowerShell 会提示你进行确认,输入 Y(代表 Yes)来确认修改执行策略。

Windows10/11 任务栏固定快捷方式显示失效问题

运行 Win + R ,打开运行 %localappdata% ,显示隐藏文件。

![[assets/Pasted image 20240526171313.png|400]]

删除 IconCache.db 文件后,打开任务管理器,在进程中找到 “Windows 资源管理器”,右键选择 “重新启动” 即可。

![[assets/Pasted image 20240526171503.png|400]]

微信小程序无法调用 wx.chooseImage

又是腾讯的骚操作,你倒是多少给个提示啊,弹窗啊之类的…… 又不报错,又没响应,尼玛……

微信小程序无法调用wx.chooseImage | 微信开放社区

令人费解的 Hugo 日期格式化操作

:: 不得不说,Hugo 的日期格式化是我见过的最操蛋、最垃圾的!😠

如何设置页面所有 a 标签在新窗口打开

<a href="xxx">
<!-- 设置 target 为 _blank,默认为 _self -->
<a href="xxx" target="_blank">

但是许多时候,我们使用第三方静态博客生成 a 标签…… 当然,你可以通过 js 来遍历页面的所有 a 标签,然后动态的为它们添加上述属性,但想想也是挺耗性能的。

其实,只需要在 <head> 标签中加入如下代码就可以了:

<base target="_blank">

:: 当然,这样做也不是说一点问题没有,比如,你在页面内点击相应目录跳转的时候,如果不做进一步处理,那就不是在当前页面滚动到对应位置了,而是在新的页面窗口中了……

Vim 下载插件时出现错误

curl: (6) Could not resolve host: raw. githubusercontent. com

在使用 curl 下载文件时,关于出现上面这个报错,是因为 GitHub 的 raw.githubusercontent.com 域名解析被污染了。

注:curl 命令是一个利用 URL 规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称 curl 为下载工具。作为一款强力工具,curl 支持包括 HTTP、HTTPS、ftp 等众多协议,还支持 POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。

怎么办?查询真实 IP, 并修改本机 hosts ,它在哪儿?

# 类 *UNIX 系统中一般位于
/etc/hosts

# Windows 中位于
C:\Windows\System32\drivers\etc\hosts

修改后,刷新 DNS (Windows 下 CMD 中运行 ipconfig /flushdns)即可。

关于复制 A 目录下的所有文件到 B 目录下

# 1 - 如果 B 目录不存在,可以直接使用:
cp -r A B

# 2 - 如果 B 目录已经存在,则需要使用,否则,
# 会将 A 目录直接复制到 B 目录中,如 B/A 。
cp -r A/. B

A4 纸尺寸

  • 210 x 297 mm
  • 595 x 842 px

图片 Background

CSS Backgrounds 中描述了 background 相关的一些属性, 如下:

Property 描述
background 简写属性,作用是将背景属性设置在一个声明中。
background-attachment 背景图像是否固定或者随着页面的其余部分滚动。
background-color 设置元素的背景颜色。
background-image 把图像设置为背景。
background-position 设置背景图像的起始位置。
background-repeat 设置背景图像是否及如何重复。

> CSS 背景属性

那么背景图如何适应容器呢?就需要设置 background-size 了,如下:

#demo{
  background-img:url(../bg.png);
    --(1)适用于上半部分背景图片,下半部分纯色
    将背景图像等比缩放到完全覆盖屏幕,背景图有可能超出屏幕(容器)
    background-size:cover;

   --(2)将背景图像等比缩放到宽度或高度与容器的宽度或高度相等,背景图像始终被包含在容器内。
   background-size:contain;
   
   --(3)最简单粗暴的方法,缺点会给背景拉伸变形;
   background-size:100%  100%;
}

NPM 源

# 查看当前源
npm config get registry

# 设置默认源
npm config set registry https://registry.npmjs.org

你也可以设置为国内的镜像源,如淘宝源(目前最佳),中间一段时间使用了华为源,老出问题。

# 新的淘宝源
npm config set registry https://registry.npmmirror.com

# 旧的淘宝源(已于 2022.05.31 起停止服务)
npm config set registry https://registry.npm.taobao.org

相关课程资料

📌 https://blog.csdn.net/sirobot/article/details/122917866

北京大学课程资料整理:
https://github.com/lib-pku/libpku

浙江大学课程攻略共享计划:
https://github.com/QSCTech/zju-icicles

清华大学计算机系课程攻略:
https://github.com/PKUanonym/REKCARC-TSC-UHT

中国科学技术大学课程资源:
https://github.com/USTC-Resource/USTC-Course

上海交通大学课程分享:
https://github.com/CoolPhilChen/SJTU-Courses/

Win10 如何使用输入法快速插入当前时间

参考 Windows10 如何使用微软输入法快速输入时间(yyyy-mm-dd hh:mm:ss格式)

右键微软输入法托盘图标,选择 用户自定义短语 选项,如下:

![[assets/Pasted image 20230525161521.png]]

添加用户自定义的短语:

![[assets/Pasted image 20230525161534.png]] 短语处,完整内容如下:

%yyyy%-%MM%-%dd% %HH%:%mm%:%ss%

添加后,切换一下输入法,输入 sj ,默认输入法首选项就是当前时间了。

我的主机上设置的快捷键是 iid ,短语内容为 %yyyy%-%MM%-%dd% %HH%:%mm% ,如下:

![[assets/Pasted image 20230525161550.png]]

总之就是挺爽的吧!当然,你也可以设置其他自定义输入,而且可以导出完整的自定义选项,更换主机后,也很容易启用。

:: 事实证明,这种动态生成时间的方式,在你更换主机后,只能再次手动地去创建。

其他输入法应该也有类似的定义办法,很不错。

DNS 设置

公司 DNS 备注
安印 192.168.51.168
中国互联网络信息中心 1.2.4.8 210.2.4.8
百度 180.76.76.76
阿里 223.5.5.5 223.6.6.6
腾讯 119.29.29.29

Win10 设置右下角显示秒钟

打开‘控制面板’,在地址栏输入 控制面板、时钟和区域 ,如下:

![[assets/Pasted image 20230525161756.png|650]]

其他设置时间选项卡,如下:

![[assets/Pasted image 20230525161829.png]]

打开‘运行’(Win-R),输入 regedit ,打开‘注册表编辑器’后,在地址栏输入 计算机、HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced 后,右键 Advanced ,新建一个‘DWORD (32 位)’值,命名为 ShowSecondsInSystemClock ,并赋值为 1 ,然后重启或注销电脑即可。

![[assets/Pasted image 20230525161902.png]]

关于 Iframe

好吧,老掉牙的技术了,当前许多浏览器已经限制了该功能,了解可能参考:

奶头乐理论

刺激他们的欲望,降低他们的工资,借钱给他们花,让他们忙的停不下来,同时开放大量的娱乐项目,使他们又不至于崩溃。

当娱乐大量占用人们的时间,让人们丧失思考的能力,这一社会麻醉剂将会带来“马太效应”,沉迷的人继续沉迷,清醒的人保持清醒,人与人的差距,甚至阶层间的差距也就拉大了。

从而消磨他们的斗志,抹平阶级跃迁的愿望。

v30 pro

您可以在华为官网查询您设备的相关备件价格。点击后方的链接选择您设备型号和颜色即可,点击链接 https://consumer.huawei.com/cn/support/sparepart-price/

亲亲,为您提供一个便捷的查询服务店方法,点击下方官网链接您可直接查询服务店具体信息,您可根据自己的实际情况选择距离您比较近的服务店前往哦~查询链接(建议收藏哦~): https://consumer.huawei.com/cn/support/service-center/

华为授权服务中心(濮阳县红旗路)
4.96 分 5.6km

屏幕外层玻璃维修

电脑维修

服务日
河南省-濮阳市-濮阳县红旗路与建新路交叉口向东 100 米路南
0393-3339678
营业时间:9:00-18:00(周一周三至周日)
特别提醒: 门店每周二休息,营业时间为每周一、周三-周日 09:00-18:00,此期间可通过华为服务 APP 选择就近授权服务门店或官方寄修服务,如需帮助请拨打电话 16639328222;针对屏幕外层玻璃维修,本店支持直面手机屏幕外层玻璃维修;针对笔记本业务本店仅提供检测、软件问题处理服务,暂不提供硬件维修服务,给您带来不便敬请谅解

element-ui 单元格点击事件,行点击+单元格点击,获取某一行的 index

1
2
3
4
<el-table :data="tableData" stripe  @cell-click="addSubAccount" :row-class-name="tableRowClassName">
     <el-table-column prop="installer" label="主子账号">
     </el-table-column>
 </el-table>

相应逻辑:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
//下面是利用给表格添加 className, 添加 index
tableRowClassName ({row, rowIndex}) {
	//把每一行的索引放进 row
	// console.log(row,rowIndex)
	row.index = rowIndex;  
	//拿到的索引赋值给 row 的 index, 在这个表格中能拿到 row 的里面都会包含 index
	return 'row-remarks'  //className(类名)
},
addSubAccount(row){ //获取焦点弹出关联多个子账号
	console.log(row.index)
},
//如果需要区分那一数列的才能触发需要判断下 prop 的值
addSubAccount(row,column){ //获取焦点弹出关联多个子账号
	console.log(row.index)  //获取下标
	console.log(column.property ) //获取判断条件
	if(column.property == 'prop 的值'){  
	//prop 的值是自己设置的,注意别重复设置同一个值

	}
},
//如果表格既有行点击,又有单元格点击,在行点击事件里判断 prop, 等不等于你行点击的 prop, 如果等于直接 return false  

Vue 文件的命名规范

→ 详见 https://juejin.cn/post/6844903840626507784#heading-9

#+BEGIN_QUOTE 其实刚开始我写 vue 文件的时候也不注意,各种驼峰啊、大写开头 (PascalCase) 还是横线连接 (kebab-case) 混着来,谁叫 vue 都可以,在风格指南中也没有定论。不过基于本项目我还是整理了一套文件的命名规则。 #+END_QUOTE

  1. Components

所有的 Component 文件都是以大写开关(Pascalcase),这也是官方所推荐的,但除了 index.vue ,如:

  • @/src/components/BackToTop/index.vue
  • @/src/components/Charts/Line. vue
  • @/src/views/example/components/Button. vue
  1. JS 文件

所有的 . js 文件都遵循横线连接 (kebab-case),如:

  • @/src/utils/open-window. js
  • @/src/views/svg-icons/require-icons. js
  • @/src/components/MarkdownEditor/default-options. js
  1. Views

在 views 文件下,代表路由的 . vue 文件都使用横线连接 (kebab-case),代表路由的文件夹也是使用同样的规则,如:

  • @/src/views/svg-icons/index. vue
  • @/src/views/svg-icons/require-icons. js

使用横线连接 (kebab-case) 来命名 views 主要是出于以下几个考虑。

  • 横线连接 (kebab-case) 也是官方推荐的命名规范之一;
  • views 下的。vue 文件代表的是一个路由,所以它需要和 component 进行区分 (component 都是大写开头);
  • 页面的 url 也都是横线连接的,比如  https://www.xxx.admin/export-excel ,所以路由对应的 view 应该要保持统一;
  • 没有大小写敏感问题。

IDE Active

→ Jetbrains 系列产品重置试用方法

https://plugins.zhile.io

Ubuntu 下清空 DNS 缓存

为什么要清空 DNS 缓存呢?

大多数的 DNS 客户端会把域名解析的结果缓存到本地,这样可以提升对于同一个地址的访问速度。当您打开一个单页面的时候,通常会有多次对同一个域名的访问请求。基本上每个文件、图片、样式表……这些都是在同一个页面内部的对同一个域名的 DNS 解析请求。

所以如果您已经在本地缓存了不正确的 DNS 条目,那么您需要清空您的缓存来使 DNS 客户端提出新的 DNS 请求并更新解析结果。当然,您也可以等缓存的 DNS 条目过期以后让系统自动冲掉该条目……这通常需要 24 个小时。

在 Ubuntu 中冲掉 DNS 缓存的方式是重新启动 nscd 守护程序

1
2
3
4
5
# 安装 nscd (如果没有)
sudo aptitude install nscd

# 清除 DNS
sudo /etc/init. d/nscd restart

vue/cli 3 切换为 dart-sass

首先,安装包 :

1
2
3
npm i sass sass-loader -D
# or
yarn add sass sass-loader -DE

然后,修改 vue. config. js ,增加如下配置:

1
2
3
4
5
6
7
8
9
module. exports = {
css: {
	loaderOptions: {
	sass: {
		implementation: require ('sass'), // This line must in sass option
	},
}
//...
};

glob

glob 最早是出现在 Unix 系统的命令中,是用来匹配文件路径的。除了在命令行中,我们在程序中也会有匹配文件路径的需求。于是,很多编程语言有了对 glob 的实现,如 Python 中的 glob 模块,php 中的 glob 方法。

下面是 node-glob 的匹配规则:

glob Desc
* 匹配任意 0 或多个字符
? 匹配任意一个字符
———————————- —————————-
[...] 匹配中括号中的字符
![...] 匹配不在中括号中的字符
^[...] 匹配不在中括号中的字符
———————————- —————————-
! (pattern I pattern I pattern) 不满足括号的所有模式
? (pattern I pattern I pattern) 满足 0 或 1 个括号中的模式
+(pattern I pattern I pattern) 满足 1 或多个括号中的模式
@(pattern I pat* I pat? ern) 满足 1 个括号中的模式
———————————- —————————-
** 跨路径匹配任意字符

来看几个最简单常用的例子吧。

它将匹配类似 scripts/index. js、scripts/nested/index. js 和 scripts/nested/twice/index. js 的文件。

'scripts/**/*. js'

取反。

'script/**/*. js', '! scripts/vendor/', 'scripts/vendor/react. js'

'**/*. js', '! node_modules/'

设计模式准则

我以前给一些公司讲一些设计模式的培训课,我一再提到,那 23 个经典的设计模式和 OO 半毛钱关系没有,只不过人家用 OO 来实现罢了。

设计模式就三个准则:

  • 中意于组合而不是继承,
  • 依赖于接口而不是实现,
  • 高内聚,低耦合。

你看,这完全就是 Unix 的设计准则。

文件的描述符和重定向

文件描述符 是和文件的输入、输出相关联的非负整数,Linux 内核(kernel)利用文件描述符来访问文件。打开现存文件或新建文件时,内核会返回一个文件描述符。读写文件也需要使用文件描述符来指定待读写的文件。

系统预留文件描述符:

  • 0 - stdin 标准输入;
  • 1 - stdout 标准输出;
  • 2 - stderr 标准错误。

实例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 输出重定向
# 1. 截取模式保存到文件 - 写入到文件之前,文件内容首先会被清空
echo "this is a text line one" > test. txt
# 2. 追加模式保存到文件 - 写入到文件之后,会追加到文件结尾
echo "this is a text line one" >> test. txt

# 标准错误输出的重定向方法
cat linuxde. net                 # → cat: linuxde. net: No such file or directory
# 1. 没有任何错误提示,正常运行
cat linuxde. net 2> out. txt
# 2. 错误信息被保存到了 out. txt 文件中
cat linuxde. net &> out. txt
# 3. 将错误输出丢弃到 /dev/null 中,特殊的设备文件 - 黑洞
cat linuxde. net 2> /dev/null

# 输入重定向
echo < test. txt

数据归档和解压缩

首先要弄清两个概念:打包和压缩。 打包 是指将一大堆文件或目录变成一个总的文件; 压缩 则是将一个大的文件通过一些压缩算法变成一个小文件。

1. tar 命令

利用 tar 命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。

# 语法
tar (选项) (参数)

实例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# 打包、压缩
tar -cvf log. tar log2012. log      # 仅打包,不压缩!
tar -zcvf log. tar. gz log2012. log  # 打包后,以 gzip 压缩
tar -jcvf log. tar. bz2 log2012. log # 打包后,以 bzip2 压缩

# 查询
tar -tvf log. tar                # 直接查询
tar -ztvf log. tar. gz            # 查询以 gzip 压缩的文件
tar -jtvf log. tar. bz2           # 查询以 bzip2 压缩的文件

# 解压缩
tar -zxvf log. tar. gz            # 以 gzip 解压缩
tar -jxvf log. tar. bz2           # 以 bzip2 解压缩

tar -zxvf log. tar. gz -C log     # 以 gzip 解压缩在目录 log

其中:

选项 说明
-v 显示操作过程
-f <FILE> --file=<FIEL> 指定备份文件
————————— ————————–
-c --create 建立新的备份文件
-t --list 列出备份文件的内容
-x --extract --get 从备份文件中还原文件
————————— ————————–
-z --gzip --ungzip 通过 gzip 指令处理备份文件
-j 支持 bzip2 解压文件
-C <DIR> 在特定目录解压缩

小结:

压缩:tar -jcv -f filename. tar. bz2 要被压缩的文件或目录名称
查询:tar -jtv -f filename. tar. bz2
解压缩:tar -jxv -f filename. tar. bz2 -C 欲解压缩的目录

关于 CSS 中设置 height 为 100% 不起作用

W3C 的规范,百分比的高度在设定时需要根据这个元素的父元素的高度。

Web 浏览器有计算有效宽度时会考虑浏览器窗口的打开宽度,缼省为页面整个横向宽度。

事实上,浏览器根本就不计算内容的高度,除非内容超出了视窗范围(导致滚动条出现),缺省为 height: auto 。或者你给整个页面设置一个绝对高度,否则浏览器就会简单的让内容往下堆砌,页面的高度根本就无需考虑。

!!!个人实践,在给 html、body 设置 background 相关属性的时候情况会很奇特,给其内的元素设置背景的时候就不存在这些奇葩问题。

所以,当我们想要设置竖直高度的百分比,需要对 html、body 进行一些初始化设置,如:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
html {
	/* 设置根元素高度 */
	height: 100%;
}

body {
	/* 设置 body 高度 */
	height: 100%;
}

/* body 内元素 .container */
.container {
	height: 60%;
	background: #f66 ;
}

其实试一下,你就会发现,如果直接对 body 设置 background 的背景图片或是背景色,都会占满整个容口。

JavaScript 对 url 的编码和解码

有时候,你会发现一些 url 链接是编码过的,如这样: http%3A%2F%2Fw3cschool. cn%2Fmy%20test. asp%3Fname%3Dst%C3%A5le%26car%3Dsaab 。

JavaScript 中使用 encodeURIComponent () 方法可以对 URI 进行编码;使用 decodeURIComponent () 方法可以对 URI 进行解码。

W3C 提供了简单的实现,如下:

1
2
3
4
5
var uri=" http://w3cschool.cn/my test. php? name=ståle&car=saab";
var uri_encode=encodeURIComponent (uri);
document.write (uri_encode);
document.write ("<br>");
document.write (decodeURIComponent (uri_encode));

↓↓↓

http%3A%2F%2Fw3cschool. cc%2Fmy%20test. php%3Fname%3Dst%C3%A5le%26car%3Dsaab
http://w3cschools.com/my test. asp? name=ståle&car=saab

CSS 换行

→ 参考链接

文本换行有很多方式:

  • <br/> 标签元素,能够强制使得所在位置文本换行;
  • <p> 元素, <div> 设定宽度,都可以对文本内容实现自适应换行;
  • 对于长单词或链接,默认不会断开换行,方式 2 就不能够在这些文本内部进行换行,此时需要 word-wrap: break-word; 或 word-break: break-all; 实现强制断行。
  1. 强制不换行
1
2
3
4
5
6
7
8
9
div {
	white-space: nowrap;
}
/*
white-space:
- normal  默认
- pre     换行和其他空白字符都将受到保护
- nowrap  强制在同一行内显示所有文本,直到文本结束或者遭遇 <br> 对象
,*/
  1. 控制文本换行
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
div {
	word-break: normal;
	word-break: break-all;
	word-break: keep-all;
}
/*
word-break:
- normal        依据亚洲语言与非亚洲语言的文本规则,允许在字内换行
- break-all     该行为与亚洲语言的 normal 相同,也允许非亚洲语言文本行的任意字内断开,该值适合包含一些非亚洲文本的亚洲文本
- keep-all      与所有非亚洲语言的 normal 相同,对于中文、韩文、日文,不允许字断开,适合包含少量亚洲文本的非亚洲文本
,*/
  1. 强制单词内或链接内断行
1
2
3
4
5
6
7
8
div {
	word-wrap: break-word;
}
/*
word-wrap:      属性用来表明是否允许浏览器在长单词和链接内进行断句
- normal        只在允许的断字点换行
- break-word    在长单词或 URL 地址内部进行换行
,*/

JS 获取 DPI

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
//获取 DPI
function js_getDPI () {
	var arrDPI = new Array ();
	if ( window. screen. deviceXDPI != undefined ) {
		arrDPI[0] = window. screen. deviceXDPI;
		arrDPI[1] = window. screen. deviceYDPI;
	}
	else {
		var tmpNode = document.createElement ( "DIV" );
		tmpNode. style. cssText = "width: 1in; height: 1in; position: absolute; left: 0px; top: 0px; z-index: 99; visibility: hidden";
		document.body.appendChild ( tmpNode );
		arrDPI[0] = parseInt ( tmpNode. offsetWidth );
		arrDPI[1] = parseInt ( tmpNode. offsetHeight );
		tmpNode.parentNode.removeChild ( tmpNode );
	}
	return arrDPI;
}

// 将 px 转成 mm
let mm = pxValue/dpi*2.54*10;   // dpi 是上面获取的,注意对应 XY 轴

小程序跳转 H5 时 url 参数截断

→ 参考链接

先来看一个例子,原来的 url 为  https://ultimavip.cn/m/mposter.html?source=gxw_001_t_mposter ,跳转后变为  https://ultimavip.cn/m/mposter.html ,参数 ? source=gxw_001_t_mposter 丢失了,为什么呢?编码问题。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
// 跳转到 H5 页面的小程序代码
targetUrl: function () {
	console.log (this. data. mod_textUrl);
	wx.navigateTo ({
		// 此处需要编码,因为有 '?' ,可能浏览器不认
		url: '../webview/webview? url=' + encodeURIComponent (this. data. mod_textUrl) 
	})
}

// 跳转到的 H5 页面进行解码
onLoad: function (options) {
	this.setData ({
		targetUrl: decodeURIComponent (options. url); // 用 decodeURIComponent 进行解码
	})
	console.log (options. url);
}

滚动懒加载的实现

→ 参考链接

什么时候需要懒加载呢?数据量大,一页显示不完,网页渲染事件长,影响体验。如何解决?分页,或数据懒加载。

先设定了基础前提,假设视窗可以显示 30 数据,总共有 56 条数据要展示。

如何实现数据懒加载呢?先来看三个属性:

  • scrollHeight ,元素总高度,包含滚动条中的内容,只读;
  • scrollTop ,当元素出现滚动条时,向下拖动滚动条时,内容向上滚动的距离,可读写;
  • clientHeight ,元素内容及其边框所占的空间大小,即可视区域大小高度。

如何判断滚动条到底部了呢?很显然,当 scrollHeight - scrollTop - clientHeight = 0 时,滚动条就到底部了。

来看代码,在第一次请求数据的时候,先设置一个变量来记录请求次数(其实后台也是做分页的处理):

1
2
3
4
5
6
7
8
9
// 初始化首页页码
let currentPage = 1;            // this. currentPage = 1

// 获取首页数据,apiGetTableData 为定义的获取数据的接口
// data 为请求参数
this.apiGetTableData (data). then (res => {
	$this. totalPage = res. totalPage; // 这里需要知道总页数
	$this. tableData = res. data;      // 表格数据
})

监听表格 DOM 对象的滚动事件:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
let DOM = document.querySelector (targetDom);

DOM.addEventListener ('scroll', function () {
	let scrollDistance = DOM. scrollHeight - DOM. scrollTop - DOM. clientHeight;

	if (scrollDistance <= 0) {                     // 为 0 证明滚动条已经到底,可以请求接口
		if (this. currentPage < this. totalPage) {   // 当前页数小于总页数继续请求
			this. currentPage++;                   // 当前页数自增

			// 请求接口代码
			// data 为请求参数
			this.apiGetTableData (data). then (res => {
				// 将请求回来的数据和当前展示的数据合并
				this. tableData = $this.tableData.concat (res. data); 
			})
		}
	}
})

如此,就实现表格滚动下拉时的数据懒加载。

刷新 DNS

windows 下 刷新 DNS 的方法:打开 cmd → 输入 ipconfig /flushdns 。 Github 有时候,连接很慢,甚至有打不开的状况,此时,可以尝试刷新一下 DNS ,会有意象不到的效果哦。