移动端适配之viewport

2024-04-20 04:52
文章标签 移动 适配 viewport

本文主要是介绍移动端适配之viewport,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

 盒模型: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 提供这些信息。
// 导入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浏览器视窗:包括滚动条

这篇关于移动端适配之viewport的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/919325

相关文章

鸿蒙开发搭建flutter适配的开发环境

《鸿蒙开发搭建flutter适配的开发环境》文章详细介绍了在Windows系统上如何创建和运行鸿蒙Flutter项目,包括使用flutterdoctor检测环境、创建项目、编译HAP包以及在真机上运... 目录环境搭建创建运行项目打包项目总结环境搭建1.安装 DevEco Studio NEXT IDE

我在移动打工的日志

客户:给我搞一下录音 我:不会。不在服务范围。 客户:是不想吧 我:笑嘻嘻(气笑) 客户:小姑娘明明会,却欺负老人 我:笑嘻嘻 客户:那我交话费 我:手机号 客户:给我搞录音 我:不会。不懂。没搞过。 客户:那我交话费 我:手机号。这是电信的啊!!我这是中国移动!! 客户:我不管,我要充话费,充话费是你们的 我:可是这是移动!!中国移动!! 客户:我这是手机号 我:那又如何,这是移动!你是电信!!

用Unity2D制作一个人物,实现移动、跳起、人物静止和动起来时的动画:中(人物移动、跳起、静止动作)

上回我们学到创建一个地形和一个人物,今天我们实现一下人物实现移动和跳起,依次点击,我们准备创建一个C#文件 创建好我们点击进去,就会跳转到我们的Vision Studio,然后输入这些代码 using UnityEngine;public class Move : MonoBehaviour // 定义一个名为Move的类,继承自MonoBehaviour{private Rigidbo

简单的角色响应鼠标而移动

actor类 //处理移动距离,核心是找到角色坐标在世界坐标的向量的投影(x,y,z),然后在世界坐标中合成,此CC是在地面行走,所以Y轴投影始终置为0; using UnityEngine; using System.Collections; public class actor : MonoBehaviour { public float speed=0.1f; CharacterCo

物联网之流水LED灯、正常流水灯、反复流水灯、移动流水灯

MENU 硬件电路设计软件程序设计正常流水LED灯反复流水LED灯移动流水LED灯 硬件电路设计 材料名称数量直插式LED1kΩ电阻杜邦线(跳线)若干面包板1 每一个LED的正极与开发板一个GPIO引脚相连,并串联一个电阻,负极接GND。 当然也可以选择只使用一个电阻。 软件程序设计 正常流水LED灯 因为要用到多个GPIO引脚,所以最好把所有的GPI

12C 新特性,MOVE DATAFILE 在线移动 包括system, 附带改名 NID ,cdb_data_files视图坏了

ALTER DATABASE MOVE DATAFILE  可以改名 可以move file,全部一个命令。 resue 可以重用,keep好像不生效!!! system照移动不误-------- SQL> select file_name, status, online_status from dba_data_files where tablespace_name='SYSTEM'

《C++中的移动构造函数与移动赋值运算符:解锁高效编程的最佳实践》

在 C++的编程世界中,移动构造函数和移动赋值运算符是提升程序性能和效率的重要工具。理解并正确运用它们,可以让我们的代码更加高效、简洁和优雅。 一、引言 随着现代软件系统的日益复杂和对性能要求的不断提高,C++程序员需要不断探索新的技术和方法来优化代码。移动构造函数和移动赋值运算符的出现,为解决资源管理和性能优化问题提供了有力的手段。它们允许我们在不进行不必要的复制操作的情况下,高效地转移资源

鸿蒙开发5.0【Picker的受限权限适配方案】

Picker由系统独立进程实现,应用可以通过拉起Picker组件,用户在Picker上选择对应的资源(如图片、文档等),应用可以获取Picker返回的结果。 类型受限权限使用的picker音频ohos.permission.READ_AUDIO,ohos.permission.WRITE_AUDIOAudioViewPicker文件ohos.permission.READ_DOCUMENT,oh

创建一个大的DIV,里面的包含两个DIV是可以自由移动

创建一个大的DIV,里面的包含两个DIV是可以自由移动 <body>         <div style="position: relative; background:#DDF8CF;line-height: 50px"> <div style="text-align: center; width: 100%;padding-top: 0px;"><h3>定&nbsp;位&nbsp;

C# 通过拖控件移动窗体

目录 引言一、通过控件事件移动窗体1、创建窗体界面2、添加控件事件3、添加代码 二、通过windowsAPI移动窗体1、 构建窗体和添加事件2、代码展示 引言 在C#Form窗体设计中,如果我们不需要使用默认边框设计自己个性化的窗体(FromBorderStyle=none时),这时候你会发现拖动窗体的功能就没有了,这里需要自己构建方法让用户可以拖动整个窗体,这里我们使用前辈的