移动端H5开发遇到的问题

2023-11-20

移动端开发必会出现的问题和解决方案


H5开发过程中难免会遇到一些兼容性等爬过坑的问题

移动端 H5 相关问题汇总:
1px 问题

响应式布局

iOS 滑动不流畅

iOS 上拉边界下拉出现白色空白

页面件放大或缩小不确定性行为

click 点击穿透与延迟

软键盘弹出将页面顶起来、收起未回落问题

iPhone X 底部栏适配问题

保存页面为图片和二维码问题和解决方案

微信公众号 H5 分享问题

H5 调用 SDK 相关问题及解决方案

H5 调试相关方案与策略
ub.io/flowchart.js/

iOS 滑动不流畅

上下滑动页面会产生卡顿,手指离开页面,页面立即停止运动。整体表现就是滑动不流畅,没有滑动惯性。

产生原因
为什么 iOS 的 webview 中 滑动不流畅,它是如何定义的?

最终我在 safari 文档里面寻找到了答案(文档链接在参考资料项)。
原来在 iOS 5.0 以及之后的版本,滑动有定义有两个值 auto 和 touch,默认值为 auto。

 -webkit-overflow-scrolling: touch; /* 当手指从触摸屏上移开,会保持一段时间的滚动 */
 ​
 -webkit-overflow-scrolling: auto; /* 当手指从触摸屏上移开,滚动会立即停止 */

解决方案
1.在滚动容器上增加滚动 touch 方法
将-webkit-overflow-scrolling 值设置为 touch

 .wrapper {
     -webkit-overflow-scrolling: touch;
 }

设置滚动条隐藏: .container ::-webkit-scrollbar {display: none;}

可能会导致使用position:fixed; 固定定位的元素,随着页面一起滚动

2.设置 overflow
设置外部 overflow 为 hidden,设置内容元素 overflow 为 auto。内部元素超出 body 即产生滚动,超出的部分 body 隐藏。

body {
     overflow-y: hidden;
 }
 .wrapper {
     overflow-y: auto;
 }

两者结合使用更佳!

iOS 上拉边界下拉出现白色空白

表现
手指按住屏幕下拉,屏幕顶部会多出一块白色区域。手指按住屏幕上拉,底部多出一块白色区域。

产生原因
在 iOS 中,手指按住屏幕上下拖动,会触发 touchmove 事件。这个事件触发的对象是整个 webview 容器,容器自然会被拖动,剩下的部分会成空白。

解决方案

1. 监听事件禁止滑动
移动端触摸事件有三个,分别定义为

  1. touchstart :手指放在一个DOM元素上。
  2. touchmove :手指拖曳一个DOM元素。
  3. touchend :手指从一个DOM元素上移开。

touchmove 事件的速度是可以实现定义的,取决于硬件性能和其他实现细节
preventDefault 方法,阻止同一触点上所有默认行为,比如滚动。

由此我们找到解决方案,通过监听 touchmove,让需要滑动的地方滑动,不需要滑动的地方禁止滑动。

值得注意的是我们要过滤掉具有滚动容器的元素。

实现如下:

document.body.addEventListener('touchmove', function(e) {
     if(e._isScroller) return;
     // 阻止默认事件
     e.preventDefault();
 }, {
     passive: false
 });

2. 滚动妥协填充空白,装饰成其他功能
在很多时候,我们可以不去解决这个问题,换一直思路。根据场景,我们可以将下拉作为一个功能性的操作。

比如:下拉后刷新页面
在这里插入图片描述
页面放大或缩小不确定性行为
表现
双击或者双指张开手指页面元素,页面会放大或缩小。

产生原因
HTML 本身会产生放大或缩小的行为,比如在 PC 浏览器上,可以自由控制页面的放大缩小。但是在移动端,我们是不需要这个行为的。所以,我们需要禁止该不确定性行为,来提升用户体验。

原理与解决方案

移动端常规写法

<meta name="viewport" content="width=device-width, initial-scale=1.0">

因此我们可以设置 maximum-scale、minimum-scale 与 user-scalable=no 用来避免这个问题

<meta name=viewport content="width=device-width, initial-scale=1.0, minimum-scale=1.0 maximum-scale=1.0, user-scalable=no">

click 点击事件延时与穿透
表现
监听元素 click 事件,点击元素触发时间延迟约 300ms。

点击蒙层,蒙层消失后,下层元素点击触发。

产生原因

为什么会产生 click 延时?
iOS 中的 safari,为了实现双击缩放操作,在单击 300ms 之后,如果未进行第二次点击,则执行 click 单击操作。也就是说来判断用户行为是否为双击产生的。但是,在 App 中,无论是否需要双击缩放这种行为,click 单击都会产生 300ms 延迟。

为什么会产生 click 点击穿透?
双层元素叠加时,在上层元素上绑定 touch 事件,下层元素绑定 click 事件。由于 click 发生在 touch 之后,点击上层元素,元素消失,下层元素会触发 click 事件,由此产生了点击穿透的效果。

原理与解决方案

解决方案一:使用 touchstart 替换 click
前面已经介绍了,移动设备不仅支持点击,还支持几个触摸事件。那么我们现在基本思路就是用 touch 事件代替click 事件。

将 click 替换成 touchstart 不仅解决了 click 事件都延时问题,还解决了穿透问题。因为穿透问题是在 touch 和 click 混用时产生。

在原生中使用

el.addEventListener(“touchstart”, () => { console.log(“ok”); }, false);

在 vue 中使用

 <button @touchstart="handleTouchstart()">点击</button>

那么,是否可以将 click 事件全部替换成 touchstart 呢?为什么开源框架还会给出 click 事件呢?

我们想象一种情景,同时需要点击和滑动的场景下。如果将 click 替换成 touchstart 会怎样?

事件触发顺序: touchstart, touchmove, touchend, click。

很容易想象,在我需要touchmove滑动时候,优先触发了touchstart的点击事件,是不是已经产生了冲突呢?

所以呢,在具有滚动的情况下,还是建议使用 click 处理。
解决方案二:使用 fastclick 库
使用 npm/yarn 安装后使用

 import FastClick from 'fastclick';
 ​
 FastClick.attach(document.body, options);

同样,使用fastclick库后,click 延时和穿透问题都没了

按照我的惯例,只要涉及开源库,那么我们一定要去了解它实现的原理。主要是将现有的原生事件集合封装合成一个兼容性较强的事件集合。

fastclick源码 核心代码不长, 1000 行不到。有兴趣可以了解一下!

软键盘将页面顶起来、收起未回落问题
表现
Android 手机中,点击 input 框时,键盘弹出,将页面顶起来,导致页面样式错乱。

移开焦点时,键盘收起,键盘区域空白,未回落。

产生原因
我们在app 布局中会有个固定的底部。安卓一些版本中,输入弹窗出来,会将解压 absolute 和 fixed 定位的元素。导致可视区域变小,布局错乱。

原理与解决方案
软键盘将页面顶起来的解决方案,主要是通过监听页面高度变化,强制恢复成弹出前的高度。

// 记录原有的视口高度
 const originalHeight = document.body.clientHeight || document.documentElement.clientHeight;
 ​
 window.onresize = function(){
   var resizeHeight = document.documentElement.clientHeight || document.body.clientHeight;
   if(resizeHeight < originalHeight ){
     // 恢复内容区域高度
     // const container = document.getElementById("container")
     // 例如 container.style.height = originalHeight;
   }
 }

键盘不能回落问题出现在 iOS 12+ 和 wechat 6.7.4+ 中,而在微信 H5 开发中是比较常见的 Bug。

兼容原理,1.判断版本类型 2.更改滚动的可视区域

const isWechat = window.navigator.userAgent.match(/MicroMessenger\/([\d\.]+)/i);
 if (!isWechat) return;
 const wechatVersion = wechatInfo[1];
 const version = (navigator.appVersion).match(/OS (\d+)_(\d+)_?(\d+)?/);
  
  // 如果设备类型为iOS 12+ 和wechat 6.7.4+,恢复成原来的视口
 if (+wechatVersion.replace(/\./g, '') >= 674 && +version[1] >= 12) {
   window.scrollTo(0, Math.max(document.body.clientHeight, document.documentElement.clientHeight));
 }

window.scrollTo(x-coord, y-coord),其中window.scrollTo(0,> clientHeight)恢复成原来的视口

iPhone X系列安全区域适配问题
表现
头部刘海两侧区域或者底部区域,出现刘海遮挡文字,或者呈现黑底或白底空白区域。

产生原因
iPhone X 以及它以上的系列,都采用刘海屏设计和全面屏手势。头部、底部、侧边都需要做特殊处理。才能适配 iPhone X 的特殊情况。

解决方案
设置安全区域,填充危险区域,危险区域不做操作和内容展示。

危险区域指头部不规则区域,底部横条区域,左右触发区域。

具体操作为:viewport-fit meta 标签设置为 cover,获取所有区域填充。判断设备是否属于 iPhone X,给头部底部增加适配层

viewport-fit 有 3 个值分别为:

auto:此值不影响初始布局视图端口,并且整个web页面都是可查看的。

contain:视图端口按比例缩放,以适合显示内嵌的最大矩形。

cover:视图端口被缩放以填充设备显示。强烈建议使用 safe area inset 变量,以确保重要内容不会出现在显示之外。

设置 viewport-fit 为 cover

<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes, viewport-fit=cover">

增加适配层
使用 safe area inset 变量

/* 适配 iPhone X 顶部填充*/
 @supports (top: env(safe-area-inset-top)){
   body,
   .header{
       padding-top: constant(safe-area-inset-top, 40px);
       padding-top: env(safe-area-inset-top, 40px);
       padding-top: var(safe-area-inset-top, 40px);
   }
 }
 /* 判断iPhoneX 将 footer 的 padding-bottom 填充到最底部 */
 @supports (bottom: env(safe-area-inset-bottom)){
     body,
     .footer{
         padding-bottom: constant(safe-area-inset-bottom, 20px);
         padding-bottom: env(safe-area-inset-bottom, 20px);
         padding-top: var(safe-area-inset-bottom, 20px);
     }
 }

safe-area-inset-top, safe-area-inset-right, safe-area-inset-bottom,
safe-area-inset-left safe-area-inset-*由四个定义了视口边缘内矩形的 top, right,
bottom 和 left
的环境变量组成,这样可以安全地放入内容,而不会有被非矩形的显示切断的风险。对于矩形视口,例如普通的笔记本电脑显示器,其值等于零。对于非矩形显示器(如圆形表盘,iPhoneX
屏幕),在用户代理设置的四个值形成的矩形内,所有内容均可见。

其中 env() 用法为 env( , ? ),第一个参数为自定义的区域,第二个为备用值。

其中 var() 用法为 var( , ? ),作用是在 env() 不生效的情况下,给出一个备用值。

constant() 被 css 2017-2018 年为草稿阶段,是否已被标准化未知。而其他iOS 浏览器版本中是否有此函数未知,作为兼容处理而添加进去。

详情请查看文章末尾的参考资料。

页面生成为图片和二维码问题
表现
在工作中有需要将页面生成图片或者二维码的需求。可能我们第一想到的,交给后端来生成更简单。但是这样我们需要把页面代码全部传给后端,网络性能消耗太大。

解决方案
生成二维码
使用 QRCode 生成二维码

import QRCode from 'qrcode';
 // 使用 async 生成图片
 const options = {};
 const url = window.location.href;
 async url => {
   try {
     console.log(await QRCode.toDataURL(url, options))
   } catch (err) {
     console.error(err);
   }
 }

将 await QRCode.toDataURL(url, options) 赋值给 图片 url 即可

生成图片
主要是使用 htmlToCanvas 生成 canvas 画布

import html2canvas from 'html2canvas';
 ​
 html2canvas(document.body).then(function(canvas) {
     document.body.appendChild(canvas);
 });

但是不单单在此处就完了,由于是 canvas 的原因。移动端生成出来的图片比较模糊。

我们使用一个新的 canvas 方法多倍生成,放入一倍容器里面,达到更加清晰的效果,通过超链接下载图片 下载文件简单实现,更完整的实现方式之后更新

const scaleSize = 2;
 const newCanvas = document.createElement("canvas");
 const target = document.querySelector('div');
 const width = parseInt(window.getComputedStyle(target).width);
 const height = parseInt(window.getComputedStyle(target).height);
 newCanvas.width = width * scaleSize;
 newCanvas.height = widthh * scaleSize;
 newCanvas.style.width = width + "px";
 newCanvas.style.height =width + "px";
 const context = newCanvas.getContext("2d");
 context.scale(scaleSize, scaleSize);
 html2canvas(document.querySelector('.demo'), { canvas: newCanvas }).then(function(canvas) {
   // 简单的通过超链接设置下载功能
   document.querySelector(".btn").setAttribute('href', canvas.toDataURL());
 }

根据需要设置 scaleSize 大小

微信公众号分享问题
表现
在微信公众号 H5 开发中,页面内部点击分享按钮调用 SDK,方法不生效。

解决方案
解决方法:添加一层蒙层,做分享引导。
因为页面内部点击分享按钮无法直接调用,而分享功能需要点击右上角更多来操作。

然后用户可能不知道通过右上角小标里面的功能分享。又想引导用户分享,这时应该怎么做呢?

技术无法实现的,从产品出发。
在这里插入图片描述
如果技术上实现复杂,或者直接不能实现。不要强行钻牛角尖哦,学会怼产品,也是程序员必备的能力之一。

H5 调用 SDK 相关解决方案
产生原因
在 Hybrid App 中使用 H5 是最常见的不过了,刚接触的,肯定会很生疏模糊。不知道 H5 和 Hybrid 是怎么交互的。怎样同时支持 iOS 和 Android 呢?现在来谈谈 Hybrid 技术要点,原生与 H5 的通信。

解决方案
在这里插入图片描述
使用 DSBridge 同时支持 iOS 与 Android
SDK小组 提供方法

  1. 注册方法 bridge.register
 bridge.register('enterApp', function() {
   broadcast.emit('ENTER_APP')
 })
  1. 回调方法 bridge.call
 export const getSDKVersion = () => bridge.call('BLT.getSDKVersion')

事件监听与触发法

const broadcast = {
   on: function(name, fn, pluralable) {
     this._on(name, fn, pluralable, false)
   },
   once: function(name, fn, pluralable) {
     this._on(name, fn, pluralable, true)
   },
   _on: function(name, fn, pluralable, once) {
     let eventData = broadcast.data
     let fnObj = { fn: fn, once: once }
     if (pluralable && Object.prototype.hasOwnProperty.call(eventData, 'name')) {
       eventData[name].push(fnObj)
     } else {
       eventData[name] = [fnObj]
     }
     return this
   },
   emit: function(name, data, thisArg) {
     let fn, fnList, i, len
     thisArg = thisArg || null
     fnList = broadcast.data[name] || []
     for (i = 0, len = fnList.length; i < len; i++) {
       fn = fnList[i].fn
       fn.apply(thisArg, [data, name])
       if (fnList[i].once) {
         fnList.splice(i, 1)
         i--
         len--
       }
     }
     return this
   },
   data: {}
 }
 export default broadcast

踩坑注意
方法调用前,一定要判断 SDK 是否提供该方法 如果 Android 提供该方法,iOS 上调用就会出现一个方法调用失败等弹窗。怎么解决呢?

提供一个判断是否 Android、iOS。根据设备进行判断

export const hasNativeMethod = (name) =>
   return bridge.hasNativeMethod('BYJ.' + name)
 }
 ​
 export const getSDKVersion = function() {
   if (hasNativeMethod('getSDKVersion')) {
     bridge.call('BYJ.getSDKVersion')
   }
 }

同一功能需要iOS,Android方法名相同,这样更好处理哦

H5 调试相关方案策略
表现
调试代码一般就是为了查看数据和定位 bug。分为两种场景,一种是开发和测试时调试,一种是生产环境上调试。

为什么有生产环境上调试呢?有些时候测试环境上没法复现这个 bug,测试环境和生产环境不一致,此时就需要紧急生产调试。

在 PC 端开发时,我们可以直接掉出控制台,使用浏览器提供的工具操作devtools或者查看日志。但是在 App 内部我们怎么做呢?

原理与解决方案

  1. vconsole 控制台插件
    使用方法也很简单
import Vconsole from 'vconsole'
 ​
 new Vconsole()

上述方法仅用于开发和测试。生产环境中不允许出现,所以,使用时需要对环境进行判断。

 import Vconsole from 'vconsole'
 if (process.env.NODE_ENV !== 'production') {
     new Vconsole()
 }

仅供自己学习使用

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

移动端H5开发遇到的问题 的相关文章

  • tensorflow-gpu版本详细安装教程(Win10,Python3.7.9,cuda11.2,cudnn8.1.0)

    目录 cuda安装 cudnn安装 python安装 tensorflow安装 cuda安装下载 首先要注意自己的显卡支持cuda的版本 可以这样自查 可以看到适合自己的cuda版本 这里我选择了cuda11 2版本 cuda安装包下载链接
  • mysql 字符集问题整理

    mysql 字符集问题整理 一直对mysql字符集没有明确的概念 mysql为了方便 设置了各种层级的字符集 最近在移植mat数据库时 顺便把这个问题整理清楚 供参考和学习 文章最后有word版本 有两张图片以及不同文字的颜色区分 首先是M
  • arcgis for android 学习 - (5) 在地图指定位置添加“标记“,并尝试选中它

    我做一个例子 1 首先显示一个地图 2 点击 添加要素 按钮后再次点击地图 将会在地图上添加 红色的位置标记 3 再次点击按钮后 这时 就可以点击刚刚添加的 红色的位置标记 就可以查看到 该标记关联到得属性值 布局
  • java.awt.Color类

    Color类概述 Color是用来封装颜色的 支持多种颜色空间 默认为RGB颜色空间 每个Color对象都有一个alpha通道 值为0到255 代表透明度 当alpha通道值为255时 表示完全不透明 当alpha通道值为0时 表示完全透明
  • Lottie动画概述,文末有彩蛋

    原生的动画效果有时候写起来会非常的复杂 要考虑到很多兼容和效果 Lottie动画专门为了解决这种烦恼而产生的 注 不仅是Lottie可以做到 另外一种库也可以做到将动画分成一帧一帧展示 它就是 android gif drawable 库
  • 安装cmake过程出错:Error when bootstrapping CMake: Cannot find a C++ compiler that supports both C++11 and ...

    Error when bootstrapping CMake Cannot find a C compiler that supports both C 11 and the specified C flags 1 没有装gcc 和 g 2
  • Nginx日志常见时间变量解析

    request time 官方解释 request processing time in seconds with a milliseconds resolution time elapsed between the first bytes
  • 为什么程序员都喜欢安静?

    大家回顾一下上学期间 你在上晚自习想完成今天老师布置的作业 但是你的班级却非常的吵闹 跟置身在菜市场一样 你能专心完成作业吗 不受周围吵闹环境的影响吗 相信大部分的人都难以静下心来认真完成作业 有时候好不容易想到一个思路 结果旁边的人拍你一
  • Flutter websocket 实现消息推送

    没什么可说的 直接上代码吧 Flutter 中的消息管理工具 class MessageUtils static WebSocket webSocket static num id 0 static void connect Future
  • JetBrains开发者日见闻(一)之Kotlin/Native 尝鲜篇

    简述 今天我们来讲点Kotlin中比较时髦的东西 有的人可能会说 不像你之前的风格啊 之前的文章不是一直在死扣语法以及语法糖背后秘密 当你还在死扣泛型语法的时候 别人的文章早就说了Kotlin Native和Kotlin1 3的新特性 瞬间
  • iOS逆向工程之App脱壳

    本篇博客以微信为例 给微信脱壳 砸壳 在iOS逆向工程中是经常做的一件事情 因为从AppStore直接下载安装的App是加壳的 其实就是经过加密的 这个 砸壳 的过程就是一个解密的过程 未砸壳的App是无法在Class dump Hoppe
  • 阿里P7大牛亲自教你!妈妈再也不用担心我的面试,讲的明明白白!

    第一次观看我文章的朋友 可以关注 点赞 转发一下 每天分享各种干货技术和程序猿趣事 前言 随着移动终端的快速发展 Android开发人员也越来越多 Android开发市场也进入了一个饱和的状态 Android开发人员也面临着难找一份好工作的
  • IOS 访问系统粘贴板

    粘贴板提供了一种核心OS特性 用于跨应用程序共享数据 用户可以跨应用来复制粘贴 也可以设置只在本应用中复制粘贴用来保护隐私 UIPasteboard类允许访问共享的设备粘贴板以及内容 下面代码返回一般的系统粘贴板 它适合大多数一般的复制粘贴
  • UE4命令行使用,解释

    命令行在外部 从命令行运行编辑项目 1 导航到您的 LauncherInstall VersionNumber Engine Binaries Win64 目录中 2 右键单击上 UE4Editor exe 的可执行文件 并选择创建快捷方式
  • 虹软人脸识别 - ArcFace SDK介绍及使用注意事项

    很多朋友在开发人脸识别系统的时候 会遇到各种各样的问题 现在我们以安卓平台使用虹软的免费离线人脸识别SDK开发为例 给大家介绍一下如何开发一个带有图片的人脸检测 视频画面的人脸属性检测 人脸注册识别等功能的人脸识别系统 一 获取SDK 1
  • Compile Options--编译选项

    目的 其主要作用是用于调试跟踪和测试 主要包含 MT TASK MT ZDO FUNC and other MT compile options LCD SUPPORTED LCD SUPPORTED DEBUG BLINK LEDS 且看
  • iOS 自定义弹出框

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 在iOS中 系统再带的弹出窗体不好扩展 开发时候不如自定义一个弹出窗体 附加上显示和消失的动画 弹出窗体父类如下 具体效果直接往上面添加控件就行 ViewControlle
  • GIT高级使用技巧

    GIT高级使用技巧 导出GIT日志到文件 按照 lt 哈希 gt lt 作者名 gt lt 作者邮箱地址 gt lt 作者日期 gt
  • App隐私监管新规实施 隐私合规检测要注意这几点?

    5月1日 国家四部委联合制定的 常见类型移动互联网应用程序必要个人信息范围规定 简称 规定 将正式实施 规定 明确移动互联网应用程序 App 运营者不得因用户不同意收集非必要个人信息 而拒绝用户使用App基本功能服务 要求各地各相关单位督促
  • 《OSPF和IS-IS详解》一1.7 独立且平等

    本节书摘来自异步社区 OSPF和IS IS详解 一书中的第1章 第1 7节 作者 美 Jeff Doyle 更多章节内容可以访问云栖社区 异步社区 公众号查看 1 7 独立且平等 OSPF和IS IS详解与TCP IP相比 OSI协议对各国

随机推荐

  • 图解如何在PLSQL中调试PACKAGE包中的FUNCTION函数

    Oracle中的packages包是一组包含procedures存储过程 functions函数和游标等元素的组合 相比Sybase数据库的SQL Advantage工具 Oracle数据库的管理工具 PLSQL在调试存储过程还是方便 1
  • (十)老照片修复、图像超分、图片提高分辨率、图片高清化、图片清晰化、黑白图片上色、人脸祛斑、美颜、人体瘦身、图像去噪、人像抠图、批量处理、视频提高分辨率、视频逐帧修复

    十 老照片修复 图像超分 图片提高分辨率 图片高清化 图片清晰化 黑白图片上色 人脸祛斑 美颜 人体瘦身 图像去噪 人像抠图 批量处理 视频提高分辨率 视频逐帧修复 本文的代码的功能是 可以对图片文件 视频批量增强清晰度 对老照片进行修复
  • NO.6——Unity3D中两种绘制小地图的方法

    在玩游戏时 你经常会发现 在游戏窗口的右上角或者左下角通常会有一个小地图 里边实时反馈角色的移动信息甚至是世界地图 那么这个小地图是如何绘制的呢 我目前掌握了两种方法 一种是以GUI方法重新绘制一个小窗口 另一种是新建一个正交投影的摄像机机
  • 2023华为OD机试真题 C++ 实现【寻找最大价值的矿堆/深度优先搜索】

    题目 我们规定 0表示空地 1表示银矿 2表示金矿 矿堆表示由相邻的金矿或银矿连接形成的地图 银矿价值是1 金矿价值是2 你的目标是找出地图中最大价值的矿堆 并且输出该矿堆的价值 示例1 输入 22220 00000 00000 01111
  • Java-Springboot整合支付宝接口

    文章目录 一 创建支付宝沙箱 二 使用内网穿透 nat app 三 编写java程序 四 访问 一 创建支付宝沙箱 跳转 支付宝沙箱平台 1 进入控制台 2 创建小程序 编写名称和绑定商家即可 3 返回第一个页面 往下滑进入沙箱 4 进行相
  • Matlab两种求相位的方法

    在matlab中有两种求相位方法 1 使用phase函数 比如a 1 j 2 phase a 则可以就a的相位 这个函数取实部为x轴 虚部为y轴 2 使用函数atan2 atan2 y x 注意y轴的数是放在前面的 atan2 2 1 和刚
  • C++入门教程(一)

    目录 一 初识C 2 程序结构 二 顺序结构程序设计 1 头文件 1 1 iostream 1 2 cstdio 1 3 cmath 2 名称空间 3 输入和输出 3 1输入 3 2输出 3 3各种输入输出优点缺点比较 4 变量 4 1赋值
  • 【人工智能】—_贝叶斯网络、概率图模型、全局语义、因果链、朴素贝叶斯模型、枚举推理、变量消元

    文章目录 频率学派 vs 贝叶斯学派 贝叶斯学派 Probability 概率 独立性 条件独立性 Probability Theory 概率论 Graphical models 概率图模型 什么是图模型 Graphical Models
  • pytorch1.4+tensorboard不显示graph计算图的问题

    电脑安装的pytoch版本为1 4 tensorboard无法显示计算图graph 但可以显示scalar 经过多方查证为pytorch版本问题 目前graph显示仅支持到pytorch1 3 处理如下 1 卸载当前的pytorch并安装低
  • springboot中用undertow踩坑记

    场景 准备基于springboot的静态资源实现mp4资源的播放 不同版本的springboot下效果不一样 可能导致正常的资源不可用 本文测试了几个版本 也针对这种情况提出了解决建议 希望对你的工作有所帮助 众所周知 springboot
  • 简单的方法解决ORA-07104:字符串文字太长

    工作中 保存数据的时候出现该问题 说字符串问题过长 过长的字段是一个用来保存xml格式的字符串 字段类型已经设置成CLOB 但是还是出现字符串过长问题 在SQLServer应该不会出现该问题 该问题中字符串文字太长 并不是字段的字符串过长
  • React配置@src根路径

    第一种 直接修改node modules包中的webpack config js文件 找到node modules react scripts config webpack config js文件 修改其中alias中的配置 添加 src
  • zotero和obsidian图片无法显示问题(可能的解决思路之一)(bibnotes formatter配置)

    我的zotero图片笔记无法导入obsidian 看了目前的大部分博主的内容 都是教你将bibnotes formatter中 image import下的zotero local folder路径改为storage前的路径 例如 我的位置
  • SSL踩坑ERR_SSL_VERSION_OR_CIPHER_MISMATCH

    最近公司项目开发了一个微信小程序 并且部署测试OK 由于微信小程序调用的后端接口必须是HTTPS 所以给接口安装了SSL 第一天测试都正常 第二天早上再使用时页面无响应 抓包发现是后端接口抛出 net ERR SSL VERSION OR
  • 背包九讲-01背包

    动态规划核心思维能力 动态规划是求最优解问题的重要解法 也是信息学奥赛中每年必考的内容之一 学习动态规划更应该注重此类问题思维能力的锻炼 多多做题 一般 gt 50题后方可入门 注意理解以下概念 1 状态 2 状态属性 3 状态的计算 也就
  • Microsoft Office Excel 不能访问文件 的解决办法

    Microsoft Office Excel 不能访问文件 a xls 可能的原因有 文件名称或路径不存在 文件正被其他程序使用 您正要保存的工作簿与当前打开的工作簿同名 This solution is Windows 2008 Serv
  • 三维实时重建BundleFusion

    转自 计算机视觉方向简介 深度相机室内实时稠密三维重建 知乎 室内场景的稠密三维重建目前是一个非常热的研究领域 其目的是使用消费级相机 本文特指深度相机 对室内场景进行扫描 自动生成一个精确完整的三维模型 这里所说的室内可以是一个区域 一个
  • 前端基础(三)- ES7~ES12

    为了方便记忆和称呼 ES2015之后的新知识点我们都统称ES6语法 就没必要去划分得那么细 ES7 2016 Array prototype includes includes方法可以判断一个数组是否包含某个指定的值 如果存在返回true
  • 多分类学习、多标签学习、多任务学习的区别

    Multi class Multi label Multi task 三者之间的区别与相同之处 1 直观解释 多分类学习 Multi class 一个分类器 但分的类别是包含多个的 例如 分类器判断苹果的颜色是 红色 黄色 青色 白色 这是
  • 移动端H5开发遇到的问题

    移动端开发必会出现的问题和解决方案 H5开发过程中难免会遇到一些兼容性等爬过坑的问题 移动端 H5 相关问题汇总 1px 问题 响应式布局 iOS 滑动不流畅 iOS 上拉边界下拉出现白色空白 页面件放大或缩小不确定性行为 click 点击