移动端适配之viewport

news/2024/9/23 4:19:46/

目录

 盒模型:width=content(+padding + border)

class="content-box"内容盒模型(W3C盒)

class="border-box"边框盒模型(IE 盒)

scroll滚动

window浏览器视窗:包括滚动条


此Hook利用了visualViewportresize事件,

处理移动设备上因地址栏显隐、屏幕旋转、虚拟键盘弹出等导致视口变化

window.visualViewport API 提供了有关视觉视口(visual viewport)的信息,即用户实际看到的部分,这部分可能会因为UI元素(如地址栏和键盘)的显隐而改变。

  • 布局视口(Layout Viewport): 通常是网页的初始容器大小,用于CSS布局,对应于 getViewport 返回的尺寸。
  • 视觉视口(Visual Viewport): 用户实际看到的部分,可以随着用户操作(如缩放和滚动)而改变大小。getVisualViewport 提供这些信息。
javascript">// 导入React的useEffect和useState钩子
import { useEffect, useState } from "react";// 定义getViewport函数,获取当前浏览器的视口大小
const getViewport = () => ({width: Math.max(document.documentElement.clientWidth || 0,window.innerWidth || 0),height: Math.max(document.documentElement.clientHeight || 0,window.innerHeight || 0),
})// 定义getVisualViewport函数,获取当前的视觉视口大小(可能因为地址栏、键盘等元素的出现而比浏览器视口小)
const getVisualViewport = () => ({width: window.visualViewport?.width || 0,height: window.visualViewport?.height || 0,
})// 定义useVisualViewport自定义钩子
export default function useVisualViewport() {// 使用useState创建viewport状态,用于存储当前浏览器视口的宽高const [viewport, setViewport] = useState({ width: 0, height: 0 })// 使用useState创建visualViewport状态,用于存储当前视觉视口的宽高const [visualViewport, setVisualViewport] = useState({ width: 0, height: 0 })// 使用useEffect处理组件挂载和更新逻辑useEffect(() => {// 定义handleResize函数,用于在视口大小变化时更新状态const handleResize = () => {setVisualViewport(getVisualViewport())setViewport(getViewport())}// 为visualViewport对象添加resize事件监听器window.visualViewport?.addEventListener("resize", handleResize)// 组件卸载时移除事件监听器return () =>window.visualViewport?.removeEventListener("resize", handleResize)}, [])// 返回当前的viewport和visualViewport状态return { viewport, visualViewport }
}

 盒模型:width=content(+padding + border)

class="content-box"内容盒模型(W3C盒)

height  = content

client=inner =content + padding

class="border-box"边框盒模型(IE 盒)

offset=outer=IE 盒 height = content + padding + border

只读(计算):offset、client

可改:scroll(Left、Top)、width、padding、border等

scroll滚动

1、scrollHeight:元素内容的总高度。

2、scrollWidth:总宽度。

3、scrollLeft:被隐藏在内容区域左侧的像素数。通过设置这个属性可以改变滚动位置。

4、scrollTop:被隐藏在内容区域上方的像素数。可以设置。

window浏览器视窗:包括滚动条


http://www.ppmy.cn/news/1434991.html

相关文章

git的安装与配置教程--超详细版

一、git的安装 1. 官网下载git git官网地址:https://git-scm.com/download/win/ 选择需要的版本进行下载 2、下载完成之后,双击下载好的exe文件进行安装。 3、默认是C盘,推荐修改一下路径,然后点击下一步 4、Git配置&#xff…

芯片安全(security)

芯片安全包括什么 芯片安全是为了防止芯片数据和程序遭遇非法攻击和访问等导致数据错误或者信息泄露或者非正常运行? 比如指纹信息被泄露;PC被植入非法挖矿程序;非法修改ddr中的数据等。 1.在子系统级别看到的axprot[1]和nsaid(non-securit…

JavaEE初阶之IO流快速顿悟一(超详细)

目录 题外话 正题 IO流 Java.io.FileInputStream int read() int read(byte[] b) 关于异常 Java7的新特性: try-with-resources ( 资源自动关闭) Java.io.FileOutputStream void write(int b) void write(byte[] b) 小结 题外话 十年青铜无人问,一朝顿悟冲王者 前天…

Ollama 环境搭建与使用指南

Ollama 环境搭建与使用指南 什么是 Ollama?环境搭建CPU 环境GPU 环境 运行 Ollama模型存储路径总结 什么是 Ollama? Ollama 通过在本地部署和运行大型语言模型,为用户提供了一个方便、灵活的工具来探索人工智能的强大能力。 环境搭建 CPU 环境 如果你的机器没…

【算法分析与设计】重复的DNA

📝个人主页:五敷有你 🔥系列专栏:算法分析与设计 ⛺️稳中求进,晒太阳 题目 DNA序列 由一系列核苷酸组成,缩写为 A, C, G 和 T.。 例如,"ACGAATTCCG" 是一个 DNA序列 。 在研究…

开源数据库postgresql在统信系统上的离线安装

统信系统上的安装: 创建目录 [rootlocalhost ~]# cd /home/ [rootlocalhost home]# mkdir postgres 上传文件 在当前目录解压,并安装依赖包 tar zxvf postgresql-15.4.tar.gz mv postgresql-15.4 postgresql rpm -ivh --force --nodeps *.rpm 预…

XiaodiSec day020 Learn Note 小迪安全学习笔记

XiaodiSec day020 Learn Note 小迪安全学习笔记 记录得比较凌乱,不尽详细 php 缺陷 2024.1.29 00:32 前言 在课程安排上先讲语言缺陷,再讲漏洞 函数缺陷与绕过 CTF 详细点: intval strpos in_array preg_match str_replace 开始 1a 1 1admin …

Golang基础-13

Go语言基础 介绍 并发 channel goroutine 互斥锁 读写锁 原子操作 select 超时处理 sync包 runtime包 介绍 本文介绍Go语言中 channel、goroutine、互斥锁、读写锁、原子操作、select、超时处理、sync包、runtime包等相关知识。 并发 进程是是最小的资源管理单元…