效果案例
JS判断手机是否安装某款App
注意:在JavaScript中直接判断用户手机上是否安装了特定的APP是不可能的,因为JavaScript运行在浏览器环境中,出于安全和隐私考虑,它没有权限访问用户的本地文件系统或已安装应用的信息。但是,你可以通过一种间接的方式来实现这个需求,即尝试唤起该APP,如果失败则引导用户去下载。
利用时间检测因为现在部分浏览器需要用户确认后才会跳转到外部APP,所以会因为超时被判定为未安装APP,目前无解
12345678910111213141516171819202122232425262728293031323334353637function openAppOrRedirect (appUrl, downloadLink) { let timer; // 创建隐藏的iframe来尝试唤起APP const iframe = document.createElement('iframe'); iframe.style.display = 'none'; iframe.onload = function () { ...
问题汇总⚠ 更新中
Safari浏览器兼容性问题处理
工具栏遮挡Safari的工具栏会叠加在页面之上遮挡内容,在页面整体滚动一定距离后自动收起,导致显示工具栏时使用100vh的页面显示不全。可以通过js监听视口高度变化,动态设置页面的高度值。
123456const vh = window.innerHeight;document.documentElement.style.setProperty('--vh', `${vh}px`)window.addEventListener('resize', () => { const vh = window.innerHeight; document.documentElement.style.setProperty('--vh', `${vh}px`);});
过量滚动页面滚动到最下时,会出现过量滚动,显示出空白部分,但有时候我们不希望出现这种效果。
1
效果案例⚠ 更新中
ReactNative获取App版本号
Android在 Android/app/src/main/java/com/项目名下创建文件VersionInfo.kt
12345678910111213141516171819202122232425package com.项目名import android.content.Contextimport com.facebook.react.bridge.ReactApplicationContextimport com.facebook.react.bridge.ReactContextBaseJavaModuleimport com.facebook.react.bridge.ReactMethodimport com.facebook.react.bridge.Promiseclass VersionInfo(private val reactContext: ReactApplicationContext) : ReactContextBaseJavaModule(reactContext) { override fun getName(): String ...
效果案例
JavaScript实现pdf转图片
引用站外地址
PDF.js
A general-purpose,web standards-based platform for parsing and rendering PDFs.
下载 PDF.js在官网下载PDF.js预构建包,只需要build文件夹中的pdf.mjs和pdf.worker.mjs即可。
定义转换函数在<script type="module">中导入并使用
12345678910111213141516171819202122232425262728import * as pdfjsLib from '/js/pdf.mjs';pdfjsLib.GlobalWorkerOptions.workerSrc = '/js/pdf.worker.mjs';// url:pdf文件地址,pageNumber:页码,scaleFactor:缩放比例(影响图片精度)async function renderPdfToImage(u ...
学习笔记
Nuxt3项目部署到Nginx服务器
项目打包运行npm run build命令进行项目打包,生成.output文件夹
在.output文件夹里新建ecosystem.config.js文件,配置如下
123456789101112module.exports = { apps: [ { name: 'AppName', script: './server/index.mjs', env: { NODE_ENV: 'production', PORT: '9090' //端口号配置 } } ]}
环境配置安装Node.js及Nginx
Node.js 下载地址
Nginx 下载地址
接下来安装pm2
1npm i pm2 -g
运行项目将.output文件下的四个文件拷贝到nginx服务器文件夹下,在nginx服务器文件夹地址栏输入cmd弹出小黑窗,启动pm2服务
1pm2 start ecos ...
效果案例
Web端瀑布流布局实现方案
方案一 absolute + js常用方案,但性能消耗大
123456import Waterfall from "./js/Waterfall";window.onload = new Waterfall({ $el: document.querySelector(".img-wrapper"), count: 4, gap: 10,});
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950export default class Waterfall { constructor(options) { this.$el = null; // 父容器 this.count = 4; // 列数 this.gap = 10; // 间距 Object.assign(this, options); this.width = 0; // 列的宽度 ...
效果案例
浏览器跨标签页通信
本地存储 localstorage1234// 监听storage的变化window.addEventListener("storage", function (e) { console.log(e.key, e.newValue, e.oldValue);});
频道广播 BroadcastChannel12345678// 在需要通信的页面创建名称相同的频道new BroadcastChannel("名称");var channel = new BroadcastChannel("channel-BroadcastChannel");// 发送消息channel.postMessage("Hello, BroadcastChannel!");// 接收消息channel.addEventListener("message", function (e) { console.log(e.data);});
postMessage首先需要拿到 ...
效果案例
websocket实现私聊、群聊
主流程
连接websocket 携带自身 id 连接 websocket,服务端记录用户
获取会话列表 分别获取好友列表、群列表、最近会话列表
阅读消息 根据会话获取历史消息,并将选中会话变为已读
发送消息 消息发送后,服务端将消息返回给发送者作为发送成功的依据,并将消息处理后转发给所有接收者,并记录聊天记录
接收消息 判断接收到的消息是不是自己发的。如果是,则所谓消息发送成功的依据去处理;如果不是,继续判断用户是不是在此私聊/群聊的聊天界面,发出不同的消息提醒
连接 websocket携带自身 id 连接 websocket
1let ws = new WebSocket("ws://127.0.0.1:8080/" + uid);
发送消息123456789// 消息格式// 通过 chatType 来区分私聊和群聊{ chatType: 1, //聊天类型 (0私聊,1群聊) uid: 1, //发送者id birdge: 3, //接收者 (私聊或群聊的id) ...
学习笔记⚠ 更新中
Three.js学习笔记
快速开始12345678910111213141516171819202122232425262728293031323334353637383940import * as Three from "three";import { OrbitControls } from "three/examples/jsm/controls/OrbitControls";// 创建场景const scene = new Three.Scene();// 创建相机const camera = new Three.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000);camera.position.set(0, 0, 10);scene.add(camera);// 创建几何体const cubeGeometry = new Three.BoxGeometry();const cubeMaterial = new Three.LineBasic ...
学习笔记
nvm的安装与使用及其相关问题
什么是 nvmnode 版本管理器,也就是说:一个 nvm 可以管理多个 node 版本(包含 npm 与 npx),可以方便快捷的 安装、切换 不同版本的 node。
安装和使用 nvm1.删除nodejs与npm删除电脑内部存在的nodejs 和 npm,不然会有冲突
2.下载地址与安装下载地址:https://github.com/coreybutler/nvm-windows/releases选择安装版一顿next就完事了安装完成后打开cmd输入nvm -v看一下是否安装成功
3.安装多版本nodejs1234nvm ls available #查看可下载的版本列表(推荐LTS稳定版本)nvm install 版本号(如 nvm install 16.20.0) #安装相应版本nvm use 版本号(如 nvm use 16.20.0) #切换使用版本nvm ls #查看已安装的版本列表
相关问题nvm安装node没有npm的问题方法一:更改配置文件,自动下载npm
1、命令行运行:nvm root 显示出nvm的安装目录2、打开nvm文件夹下的settings.txt文 ...