2025年7月

先说 ===,这个比较简单:
1、如果类型不同,就[不相等]
2、如果两个都是数值,并且是同一个值,那么[相等]。
3、如果两个都是字符串,每个位置的字符都一样,那么[相等];否则[不相等]。
4、如果两个值都是true,或者都是false,那么[相等]。
5、如果两个值都引用同一个对象或函数,那么[相等];否则[不相等]。
6、如果两个值都是null,或者都是undefined,那么[相等]。
再说 ==,根据以下规则:
1、如果两个值类型相同,进行 === 比较。
2、如果两个值类型不同,他们可能相等。根据下面规则进行类型转换再比较:
3、如果一个是null、一个是undefined,那么[相等]。
4、如果一个是字符串,一个是数值,把字符串转换成数值再进行比较。
5、如果任一值是 true,把它转换成 1 再比较;如果任一值是 false,把它转换成 0 再比较。
6、任何其他组合,都[不相等]。

scrollTop为滚动条在Y轴上的滚动距离。
clientHeight为内容可视区域的高度。
scrollHeight为内容可视区域的高度加上溢出(滚动)的距离(当前可滚动的页面的总高度)
这个三个属性的介绍就可以看出来,滚动条到底部的条件即为scrollTop + clientHeight == scrollHeight。

$(window).scroll(function(){
  var scrollTop = $(this).scrollTop();
  var scrollHeight = $(document).height();
  var windowHeight = $(this).height();
  if(scrollHeight-scrollTop-windowHeight <=300){
  }else{
}
});

window.addEventListener('scroll', scroll)
function scroll() {
      const scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
      const clientHeight = document.documentElement.clientHeight || document.body.clientHeight;
      const scrollHeight = document.documentElement.scrollHeight || document.body.scrollHeight;

      if (scrollTop === 0) {
        console.log('滚动到顶了');
      }

 if (scrollTop + clientHeight >= scrollHeight) {
        console.log('滚动到底了');
      }

}

window.removeEventListener('scroll', scroll) // 移除滚动事件

在部分浏览器上,到底部时,触发不了
可以考虑:
1.用offsetHeight代替clientHeight ,多计算边框的距离
2.scrollTop的实时监听值可能是小数,采用Math.ceil(scrollTop),向上取整,避免少那个零点几的距离

何为回弹问题?
回弹问题是指在ios设备上,用户向上或向下滑动内容到达边界时,屏幕会出现弹性回弹的效果。
这种效果在一些情况下可能导致应用的交互不够流畅,用户体验受到影响。特别是一些需要滑动的元素(如长列表、图片轮播等),回弹会分散用户的注意力。

回弹机制的原理
在ios中,回弹效果由内部的ScrollView组件管理。ScrollView会在用户滑动到边界时触发“回弹”行为,这是一个默认的视觉反馈。虽然这种效果在某些情况下新颖独特,但在Web应用中,开发者往往需要根据业务需求来控制这些事件。

禁用回弹的基本方法
我们可以通过css和javascript共同作用来避免ios的回弹效果。

使用css禁止回弹
最简单的方法之一是通过css来禁止回弹。在页面的样式表中,我们可以设置overflow属性和-webkit-overflow-scrolling属性,来消除回弹效果。
body{
height:100%;
margin:0;
overflow:hidden;/禁用全局滚动/
}

.scroll-container{
width:100%;
height:100%;
overflow-y:scroll;/允许纵向滚动/
-webkit-overflow-scrolling:touch;/使用touch滚动/
position:absolute;
top:0;
}
在这个实例中,我们使用了.scroll-container类来包裹需要滚动的内容区域,并禁用了body的全局滚动,避免页面
整体的滚动引起的回弹。

使用javascript处理触摸事件
除了css方法外,我们还可以通过javascript来更精细地控制页面的滚动行为。可以监听触摸事件,并阻止默认行为。
const scrollContainer = document.querySelector('.scroll-container');
//阻止触摸事件的默认行为
scrollContainer.addEventListener('touchstart',function(event){
//Do something on touch start
},{passive:false});

scrollContainer.addEventListener('touchmove',function(event){
event.preventDefault();//禁止默认滚动行为
},{passive:false});

在此代码中,我们通过监听一个touchmove事件,在事件触发时执行event.preventDefault()来阻止默认的滚动行为。
注意,这里需要监听器的passive选项设置为false,以确保event.preventDefault()生效。

在类Unix操作系统中,文件权限是通过一组三位数的八进制数来表示的,通常被称为“755权限”或“777权限”等。每一位数字代表不同用户类别(所有者、组用户、其他用户)的权限。
chmod是Linux下设置文件夹权限的命令,后面一般跟三个数字,代表不同用户群体在该文件夹上的权限设置。具体解释如下:

第一个数字表示文件所有者的权限。
第二个数字表示与文件所有者同属一个用户组的其他用户在该文件夹上的权限。
第三个数字表示其他用户组在该文件夹上的权限。

权限分为三种:读(r=4)、写(w=2)、执行(x=1)。
根据不同的权限组合方式,可以得到以下模式和对应的数字:

可读+可执行(rx=5)对应数字5,
可读+可写(rw=6)对应数字6,
可读+可写+可执行(rwx=7)对应数字7。

所以,chmod 755设置用户的权限为:
文件所有者的权限为可读、可写、可执行(模式7)
与文件所有者同属一个用户组的其他用户的权限为可读、可执行(模式5)
其他用户组的权限为可读、可执行(模式5)
所以,755权限意味着:
文件所有者可以读取、写入以及执行该文件。
文件所属组成员和其他用户可以读取和执行该文件,但不能修改(写入)该文件。
总结:三个权限有8种组合方式,按照打分的方式给不同的权限模式编号。每个编号对应的模式组合是唯一的。

这里我们在宝塔面板中创建站点,这里我用的是Nginx、PHP8.0环境。创建完毕站点后,我们直接通过远程下载文件到站点中。
官方源码地址:https://builds.matomo.org/matomo.zip
wget https://builds.matomo.org/piwik.zip
移动安装包到宝塔面板的目录
mv piwik.zip /www/wwwroot
接着在宝塔面板中新建一个网站,不创建数据库
在宝塔面板的文件管理下把这个网站的主目录删除,接着解压安装包,解压完成之后直接用配置完成的域名访问
访问成功之后就是一个简单的安装界面,跟着安装界面一步一步来
第一步是对系统进行检查,如果有报错那么就根据报错来解决就好,比如我的php检查错误,要在php.ini下添加
always_populate_raw_post_data = -1
保存之后重启web服务器和php-fpm接着刷新安装界面检查下是不是还有其他错误或者警告
比如我还有个
shell_exec You need to enable this built-in function.
那么修改php.ini,查找一下shell_exec,接着把
disable_functions = passthru,exec,system,chroot,chgrp,chown,shell_exec,popen,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru
中shell_exec删除,重启php-fpm服务就好了
下一步是设置数据库
我们可以使用宝塔面板配置数据库,也可以使用宝塔面板中的phpmyadmin配置数据库新建一个数据库接着在安装界面填入对应参数即可,数据库排序规则我一般选择utf8_general_ci
之后创建管理员用户
管理员用户创建好之后就是配置我们要监控的第一个网站了,记住中国的时区是上海,是不是电子商务网站看你自己配置
接着下一步会给你一串JavaScript跟踪代码
老规矩,添加到网站里就好了
注意点
如果你的网站是https访问的那么matomo最好也使用https,不然默认会使用https请求matomo的监控脚本,但是因为你的matomo不是https的,所以会请求不了,宝塔面板可以一键申请ssl证书的。