当前位置: 首页 > news >正文

【H5移动端】常用的移动端方案合集-键盘呼起、全面屏适配、图片大小显示、300ms点击延迟、首屏优化(不定期补充~)

文章目录

  • 前言
  • 键盘呼起问题
    • 靠近底部的输入项被键盘遮挡
    • 底部按钮被顶上去
  • 全面屏适配
  • 图片大小显示问题
  • 解决300ms延迟
  • 首屏优化

前言

这篇文章总结了我在工作中做H5遇到的一些问题,包括我是怎么解决的。可能不是当下的最优解,但是能保证解决问题。

单位适配问题可看:【H5移动端】前端H5移动端的单位适配方案集,包括给你用例子讲明白什么是1像素的问题(不定期补充~)

本文章未来也会不定期的补充~


键盘呼起问题

靠近底部的输入项被键盘遮挡

就比如说有几个输入项表单刚好在靠近底部的位置,当点击其中一项输入框时,呼出了键盘,然后这个键盘把输入项挡住了,以至于用户看不到输入的内容。

在这里插入图片描述
这种情况一般是IOS和一些特定机型会出现的问题。大概原因应该就是,呼出键盘后,视图窗口高度变小了,但我们的页面没有滚动,所以之前的内容就跑到视图窗口下面了。

直到原因就知道怎么处理了,就是把当时的输入项重新自动的滚动到视图窗口最底部即可。

如果是只有一个输入框需要处理可以这样:

let input1 = document.getElementById('input1')
input1.addEventListener('focus', ()=>{setTimeout(()=>{input1.scrollIntoView(false)}, 300) // 延迟对应键盘呼出动画时间
})
// 或
input1.addEventListener('focus', ()=>{setTimeout(()=>{document.body.scrollTop = document.body.scrollHeight}, 300) // 延迟对应键盘呼出动画时间
})

但是实际上我们的页面会有很多的输入项,不可能挨个这样处理。可以看看你用的第三方组件库有没有api支持一次性收集所有focus事件做统一处理。

当然这个问题一般情况下正常机型不存在的。

底部按钮被顶上去

当我们的表单页的提交按钮是固定在底部的时候,呼出键盘,有很多机型是会把底部按钮顶上来的。

在这里插入图片描述

原因是我们的底部按钮一般都是用position布局固定的,当键盘呼出,视窗高度变小,自然看起来像是顶上去了。

所以可以这样想,当键盘呼出的时候把底部按钮区域隐藏,键盘消失时把底部按钮区域重新显示!

const winHeight = window.innerHeight; // 先拿到正常显示的高度
let footerDom = document.getElementById('footer')
window.addEventListener('resize', ()=>{let curHeight = window.innerHeight; // 当前视口小于正常时候,就说明键盘呼出了if (curHeight < winHeight) {footerDom.style.display = 'none'} else {footerDom.style.display = 'block'}
})

建议把底部区域封装成一个公共的组件,然后实现上面的功能。


全面屏适配

全面屏适配目前浏览器已经帮我们把顶部的适配工作做好了,也就是无论什么刘海屏,水滴屏都不用管了。主要关心的只有底部手势区域。

其实一般情况下最简单的方法就是让UI设计同事无论在什么页面都在底部默认加个固定的手势预留区域。

例如在公共的底部操作区域组件,默认加个底部padding。

不过也有正儿八经的适配方式,我个人没怎么用过(因为上面的简单方法已经可以解决问题了):iPhoneX 适配方案


图片大小显示问题

你是否好奇,为啥UI设计稿上总会有1X、2X、3X的不同尺寸图片给你使用。

那是因为给不同的设备缩放比用的,具体原理可以看看前言引入的那篇文章。总之我们只需要根据不同缩放比显示不同大小的图片即可,我称为倍图适配:

.avatar{background-image: url(logo_1x.png);
}
@media only screen and (-webkit-min-device-pixel-ratio:2){.avatar{background-image: url(logo_2x.png);}
}
@media only screen and (-webkit-min-device-pixel-ratio:3){.avatar{background-image: url(logo_3x.png);}
}

但其实吧,正常情况下我都是直接用最小的那个图片,然后定个宽度,根据postcss-px-to-viewport插件自己去适配单位大小。因为手机界面很小,即使最小的图片放在上面也足够清晰了。除非是特定地方要求你要保证非常清晰,例如logo,那么可以用用倍图适配。


解决300ms延迟

过去手机浏览桌面的网页,需要双击放大,所以有了300ms延迟的时间去给第二次点击做判断。现在的手机网页基本都是针对手机大小专门做的网页,所以已经不需要有这个机制了。

fastclick库,适用于过去老旧浏览器

原理:

  • 监听touchend事件(touchstart touchend会先于click触发)
  • 使用自定义Dom事件 模拟一个click事件
  • 把原来的click事件禁用

现在浏览器:

<meta name="viewport" content="width=devive-width"> 有了width=devive-width这个,就能告知浏览器这个网页就是移动端网页,不需要300ms机制。


首屏优化

其实和PC的八九不离十,可以详细看:【工程化】收集平时积累的一些性能优化措施

这里说几个和PC不一样的。

App预取

就是app先获取要最终要展示的数据,打开页面的时候直接获取渲染。例如公众号文章(里面的图片和视频还是懒加载)。

Hybrid(混合)

提前把html css js等资源下载到app中,在app webview中使用file:// 协议加载页面文件,再去请求数据(数据获取还可以结合App预取)。

SSR

这里我特地说下SSR,就是服务端返回的html文件直接是我们平时获取的初始html文件,获取数据,更替数据后的最终文件,直接渲染即可。

实现框架:

  • Nuxt.js vue+node.js
  • Next.js react+node.js

是说话没必要H5稿SSR,我知道初心是为了照顾那些性能差的旧手机,但是手机更新迭代这么快,我认为手机首屏那一点页面真没必要,还增加成本。

相关文章:

【H5移动端】常用的移动端方案合集-键盘呼起、全面屏适配、图片大小显示、300ms点击延迟、首屏优化(不定期补充~)

文章目录 前言键盘呼起问题靠近底部的输入项被键盘遮挡底部按钮被顶上去 全面屏适配图片大小显示问题解决300ms延迟首屏优化 前言 这篇文章总结了我在工作中做H5遇到的一些问题&#xff0c;包括我是怎么解决的。可能不是当下的最优解&#xff0c;但是能保证解决问题。 单位适…...

迭代器模式——遍历聚合对象中的元素

1、简介 1.1、概述 在软件开发时&#xff0c;经常需要使用聚合对象来存储一系列数据。聚合对象拥有两个职责&#xff1a;一是存储数据&#xff1b;二是遍历数据。从依赖性来看&#xff0c;前者是聚合对象的基本职责&#xff1b;而后者既是可变化的&#xff0c;又是可分离的。…...

亿赛通电子文档安全管理系统远程命令执行

人这一生&#xff0c;不是看你贫穷和富有&#xff0c;而是看你都做了些啥。 漏洞描述 亿赛通电子文档安全管理系统存在远程命令执行漏洞&#xff0c;攻击者通过构造特定的请求可执行任意命令 漏洞复现&#xff1a; 访问url&#xff1a; 构造payload请求 POST /solr/flow/d…...

多雷达探测论文阅读笔记:雷达学报 2023, 多雷达协同探测技术研究进展:认知跟踪与资源调度算法

多雷达协同探测技术 原始笔记链接:https://mp.weixin.qq.com/s?__biz=Mzg4MjgxMjgyMg==&mid=2247486627&idx=1&sn=f32c31bfea98b85f2105254a4e64d210&chksm=cf51be5af826374c706f3c9dcd5392e0ed2a5fb31ab20924b7dd38e1b1ae32abe9a48afa8174#rd ↑ \uparrow …...

【Redis】——AOF持久化

什么是AOF日志 AOF日志是redis为数据的持久化提供了的一个技术,日志里面记录着执行redis写命令。每当redis执行一条写命令的时候&#xff0c;就会将该命令记录 到AOF日志当中。当redis启动的时候&#xff0c;可以加载AOF日志中的所有指令&#xff0c;并执行这些指令恢复所有的…...

Keil MDK环境下FreeModebus移植踩坑记录

Keil MDK环境下FreeModebus移植踩坑记录 文章目录 Keil MDK环境下FreeModebus移植踩坑记录armcc (arm compiler v5)环境实验一&#xff1a;实验二&#xff1a; armclang (arm compiler v6)环境实验一&#xff1a;实验二&#xff1a;实验三&#xff1a;实验四 总结 armcc (arm c…...

计算机视觉的延伸整理

计算机视觉是一门涉及数字图像处理、模式识别和机器学习等技术的交叉学科&#xff0c;旨在将计算机技术应用于对视觉信息的理解和处理。其主要研究内容包括图像和视频处理、目标检测和跟踪、三维重建、人脸识别、自动驾驶等。计算机视觉已经被广泛应用于医学影像分析、安防监控…...

通过Idea部署Tomcat服务器(详细图文教学)

1.在idea中创建项目 有maven构建工具就创建maven&#xff0c;没有就正常创建一个普通的java程序 创建普通java项目 2.添加框架 3.配置 Tomcat 注意&#xff1a;创建web项目后我们需要配置tomcat才能运行&#xff0c;下面我们来进行配置。 4.添加部署 回到服务器 5.完善配置 6…...

Window版本ES(ElasticSearch)的安装,使用,启动

首先我这里是根据小破站狂神说up主&#xff0c;而学习的&#xff0c;下面是笔记文档&#xff0c;文档可能比我更细&#xff0c;但我还是记录一下&#xff0c;嘿嘿嘿 ElasticSearch7.6入门学习笔记-KuangStudy-文章 下面直接开始&#xff0c;首先我们需要下载ELK三个安装包&…...

网络面试题-UDPTCP

1 UDP 1.1 ⾯向报⽂ UDP 是⼀个⾯向报⽂&#xff08;报⽂可以理解为⼀段段的数据&#xff09;的协议。意思就是UDP 只是报⽂的搬运⼯&#xff0c;不会对报⽂进⾏任何拆分和拼接操作 具体来说 在发送端&#xff0c;应⽤层将数据传递给传输层的 UDP 协议&#xff0c; UDP 只会…...

在CSDN学Golang场景化解决方案(即时通讯goim)

一&#xff0c;支持单个、多个、广播消息推送 在goim中&#xff0c;用户可以通过维护长连接实现即时通讯功能&#xff0c;通过路由算法将消息发送给指定的客户端或群组。具体而言&#xff0c;goim支持以下三种方式进行消息推送&#xff1a; 单个推送&#xff1a;向某一个指定客…...

chrome插件开发实例02-使用content_scripts对用户浏览页面操作

目录 引言 chrome插件 插件演示 源代码 manifest.json content_scripts.js css设置(放在css文件夹下)<...

【Python目标识别】Labelimg标记深度学习(YOLO)样本

人工智能、ai、深度学习已经火了很长一段时间了&#xff0c;但是还有很多小伙伴没有接触到这个行业&#xff0c;但大家应该多多少少听过&#xff0c;网上有些兼职就是拿电脑拉拉框、数据标注啥的&#xff0c;其实这就是在标记样本&#xff0c;供计算机去学习。所以今天跟大家分…...

【雕爷学编程】MicroPython动手做(30)——物联网之Blynk 3

知识点&#xff1a;什么是掌控板&#xff1f; 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片&#xff0c;支持WiFi和蓝牙双模通信&#xff0c;可作为物联网节点&#xff0c;实现物联网应用。同时掌控板上集成了OLED…...

C高级--day3(shell中的输入、命令置换符、数组、算数运算、分支结构)

#!/bin/bash pls ~/ -l | grep "^-" | wc -l qls ~/ -l | grep "^d" | wc -l echo "普通文件个数&#xff1a;$p" echo "目录文件个数&#xff1a;$q"#!/bin/bash read file posexpr index $file \. strexpr substr $file $((pos1)) 2…...

安防监控国标GB28181平台EasyGBS视频快照无法显示是什么原因?如何解决?

安防视频监控国标视频云服务EasyGBS支持设备/平台通过国标GB28181协议注册接入&#xff0c;并能实现视频的实时监控直播、录像、检索与回看、语音对讲、云存储、告警、平台级联等功能。平台部署简单、可拓展性强&#xff0c;支持将接入的视频流进行全终端、全平台分发&#xff…...

route命令 路由表 Linux Centos

route route命令在Linux中被用于显示和操纵IP路由表。然而&#xff0c;现在大部分Linux发行版都推荐使用ip route命令代替route&#xff0c;因为ip route提供更多的功能和更灵活的控制。 以下是route命令的基本用法&#xff1a; 查看路由表: route -n 这个命令显示当前机器的路…...

CMMI评审

CMMI评审 对于刚入行的朋友来说,可能对CMMI比较陌生。但对于工作多年的朋友来说,有可能都会接触过CMMI。那CMMI到底是什么? CMMI的全称为Capability Maturity Model Integration,即能力成熟度模型集成。对于软件行业,一般是指软件能力成熟度模型集成,是由美国国防部与卡内…...

深入了解 PostgreSQL 扩展插件

深入了解 PostgreSQL 扩展插件 在 PostgreSQL 数据库中&#xff0c;扩展插件是极具价值的工具&#xff0c;它们为我们提供了丰富多样的功能增强。本篇博客将深入介绍几个常用的 PostgreSQL 扩展插件&#xff0c;包括 pg_stat_statements、uuid、postgis 以及 postgis_raster。…...

记一次kernel patch(附开源贡献相关)

文章目录 开源操作系统流程手记smatch能发现的典型问题常见的修复方案附&#xff1a;偶然发现&#xff0c;unlikely函数搞开源贡献的一些捷径 开源操作系统 看了zhihu上的一些科普&#xff0c;明白二次开发是常见现象&#xff0c;套壳、抄袭、自研都不是很科学的说法。中外大厂…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器

拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件&#xff1a; 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...