【DAY48】移动端布局

news2024/11/26 2:54:26

const autoprefixer = require(‘autoprefixer’)
const pxtoviewport = require(‘postcss-px-to-viewport’)

module.exports = {
css: {
loaderOptions: {
postcss: {
postcssOptions: {
plugins: [
autoprefixer(),
pxtoviewport({
viewportWidth: 375, // 视窗宽度,对应设计稿宽度
unitPrecision: 3, // 小数点位数
viewportUnit: ‘vw’, // 转换成的视窗单位
selectorBlackList: [‘.ignore’], // 不需要转换的类名
minPixelValue: 1, // 小于或等于 1px 不转换
mediaQuery: false // 允许在媒体查询中转换
})
]
}
}
}
}
}

这段代码是一个 vue.config.js 文件中的设置,用于给自动添加浏览器 css 前缀和将 px 转化为 vw 以支持移动端响应式布局。具体来说,我们可以分别解释一下其中的 autoprefixer 和 postcss-px-to-viewport

  • autoprefixer:这是一个免费的自动添加浏览器前缀的 PostCSS 编译器插件,基于 Can I Use 网站的数据,可以支持更多浏览器。通过在代码中编写规则, autoprefixer 可以帮助我们自动添加浏览器前缀以支持不同的浏览器。例如,当我们编写 display: flex; 这样的 CSS 时,autoprefixer 可以自动添加 -webkit-display: flex; 来支持 Safari 浏览器。

  • postcss-px-to-viewport:这是一个非常流行的 PostCSS 编译器插件,可以将我们为设计稿指定的 px 单位转换为 vw 单位,从而可以支持移动设备上的响应式布局。通过使用 pxtoviewport,我们可以使用视口的宽度和设计图的宽度自动将像素转换为视口宽度的百分比。例如,当我们定义 width: 100px; 时,可以将其转换为 width: 26.6667vw; 来支持在不同设备上的响应式布局。

在这个配置文件里,我们将这两个插件结合起来使用,并可以进行相关的配置,例如定义设计稿的宽度,设置允许转换的最小像素值,并选择不进行 px 转 vw 的类名,这样可以灵活控制哪些元素需要使用 px,哪些元素需要使用 vw。

WebView(移动端原生组件)

WebView 是 Android 平台上提供的一个显示网页内容的组件,可以在应用程序中嵌入 WebView,让用户在应用程序中直接浏览网页内容,无需打开浏览器。WebView 是一个十分常用的 Android 开发组件,广泛应用于开发各种类型的应用程序,例如浏览器、新闻客户端、社交媒体、电商等应用。

在 Android 平台开发中,使用 WebView 可以方便地实现以下功能:

  1. 显示网页:WebView 可以在应用程序中加载网页内容,并显示在应用程序用户界面中。

  2. 与 JavaScript 交互:WebView 支持通过 JavaScript 与原生 Android 应用程序进行交互,可以实现一些 Android API 的调用、DOM 元素的操纵、表单的自动填充等功能。

  3. 显示本地 HTML 内容:WebView 可以将本地存储在应用程序中的 HTML 文件和静态资源加载到 WebView 中进行展示。

  4. 处理页面跳转:WebView 支持处理页面中的超链接跳转,可以自动打开浏览器或在进程内进行跳转操作。

  5. 自定义 WebView 的样式:WebView 提供了丰富的自定义 API,可以灵活设置 WebView 的 UI 样式,例如界面主题、字体样式、缩放模式等。

总之,WebView 是 Android 平台上十分重要的一个组件,有着广泛的应用和需求,可以方便地实现网页内容的展示和交互,提高了 Android 应用程序的交互性和用户体验。

schema通讯

“schema 通讯” 可以理解为应用程序之间透过特定的消息格式和接口进行的通信方式,schema 是描述消息格式的数据结构,包含数据类型,数据格式等信息。schema 被应用于各种场景,如不同平台之间,不同的编程语言之间以及不同的云服务之间的通讯,以保证消息的正确解析、传输和处理。

在实际使用中,schema 可以用于指导不同系统的数据格式定义,从而实现跨系统的数据格式兼容和互通。例如,Google 的 Protocol Buffers,Facebook 的 GraphQL 和 Apache Avro 等就是常用的 schema 通讯协议。

以 Protocol Buffers 为例,它是 Google 开发的一种轻量级的数据交换格式,主要用途是将结构化数据编码为平台无关的数据流,适用于数据存储、通信协议和数据交换等场景。Protocol Buffers 使用 schema 描述消息格式,包含消息名称、字段名称、字段类型及其他元数据信息,采用二进制编码,具有数据量小、解析速度快、解析灵活等优点,广泛应用于 Google 内部和多个开源项目中。

总之,schema 通讯是一种常见的应用程序之间进行通信的方式,依托于特定的消息格式和接口进行数据传输和解析,能够支持不同平台和编程语言之间的互通。

原生和H5之间有3种通讯方法

1.全局挂载(使用较少)

window.test = function(param) {
    alert("Received param from Native:" + param);
}

2.封装JSBrigdge

(function () {
    var id = 0,
        callbacks = {},
        registerFuncs = {};

    window.JSBridge = {
        // 调用 Native
        invoke: function(bridgeName, callback, data) {
            // 判断环境,获取不同的 nativeBridge
            var thisId = id ++; // 获取唯一 id
            callbacks[thisId] = callback; // 存储 Callback
            nativeBridge.postMessage({
                bridgeName: bridgeName,
                data: data || {},
                callbackId: thisId // 传到 Native 端
            });
        },
        receiveMessage: function(msg) {
            var bridgeName = msg.bridgeName,
                data = msg.data || {},
                callbackId = msg.callbackId, // Native 将 callbackId 原封不动传回
                responstId = msg.responstId;
            // 具体逻辑
            // bridgeName 和 callbackId 不会同时存在
            if (callbackId) {
                if (callbacks[callbackId]) { // 找到相应句柄
                    callbacks[callbackId](msg.data); // 执行调用
                }
            } elseif (bridgeName) {
                if (registerFuncs[bridgeName]) { // 通过 bridgeName 找到句柄
                    var ret = {},
                        flag = false;
                    registerFuncs[bridgeName].forEach(function(callback) => {
                        callback(data, function(r) {
                            flag = true;
                            ret = Object.assign(ret, r);
                        });
                    });
                    if (flag) {
                        nativeBridge.postMessage({ // 回调 Native
                            responstId: responstId,
                            ret: ret
                        });
                    }
                }
            }
        },
        register: function(bridgeName, callback) {
            if (!registerFuncs[bridgeName])  {
                registerFuncs[bridgeName] = [];
            }
            registerFuncs[bridgeName].push(callback); // 存储回调
        }
    };
})();

 JSBridge是如何实现调用的?

1.注册(把你的方法告诉webview我的方法是这么用的)

2.发送(把当前绑定过的方法和参数发送给webview)

3.调用(已经注册了,webview可以随意调用)

3.原生和h5之间的schema通讯

原生应用和 H5 页面之间的通讯,可以通过使用 schema 的方式实现。举例来说,在 Android 平台中,原生应用可以通过 Intent 来发送包含 schema 的消息,H5 页面通过处理类似于 “intent://xxx#Intent;…;end” 格式的 URL 来接收并解析消息内容。

具体来说,实现原生应用和 H5 页面之间的 schema 通讯需要完成以下步骤:

  1. 原生应用中将待传递的数据编码为 schema 格式,并将 schema 放入 Intent 中。

  2. 原生应用调用 startActivity(Intent) 发送包含 schema 的 Intent。

  3. H5 页面中,通过建立一个跟原生应用交互的 JavaScript 接口,注册一个 “intent://” 开头的 URL Scheme,并解析接收到的 URL,获取 schema 数据。

  4. H5 页面中,将获取到的 schema 数据进行解析、处理,实现互动效果。

可以看到,通过 schema 通讯方式,原生应用和 H5 页面可以在不同平台和不同编程语言环境下进行数据传输和交互,实现了跨平台的互通。

需要注意的是,schema 通讯方式存在一定的安全风险,因为不恰当的 schema 数据可能会被黑客利用,对应用程序的数据和用户身份造成威胁。因此,在实际应用开发中,需要采用一些安全机制,例如数据加密、身份验证等措施,确保应用程序的数据和用户安全。

做移动端最主要的东西:(适配) 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/499097.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySql命令报错:Duplicate entry ‘10‘ for key ‘PRIMARY‘解决方案

MySql命令报错:Duplicate entry ‘10‘ for key ‘PRIMARY‘解决方案 翻译错误先正常制作表格错一遍(体验报错)找到报错原因,并改正其他可能造成报错的情况总结解决方案 翻译错误 经常遇到这个问题,今天我把这个问题记…

基于session实现共享登录

基于session实现登录 1.发送短信验证码 Override public Result sendCode(String phone, HttpSession session) {//1.校验手机号是否合规if (RegexUtils.isPhoneInvalid(phone)) {//2.不合规直接返回 错误信息return Result.fail("手机号错误");}//3.如果合规生成验…

Ubuntu 安装Samba

每次装ubuntu虚拟机搞开发都要装Samba,记录一下Samba安装方法: 1.输入安装指令 需要使用root权限进行samba的安装操作; 输入指令 : apt-get update apt-get install samba samba-common 2.配置Samba 输入指令修改 Samba配置 &…

GEE:变异系数法在遥感影像分析中的应用及权重计算

作者:CSDN @ _养乐多_ 本文介绍了在Google Earth Engine(GEE)平台上基于变异系数法的多指标加权遥感影像分析方法。该方法通过计算每个指标的平均值和标准差,进而计算变异系数来评估指标的变化程度。利用变异系数,我们可以计算每个指标的权重,并将其应用于加权和指数的计…

jieba分词(2):倒排索引算法

1 字典树 1.1问题描述 通过上一篇的案例我孟可以看出&#xff0c;我们的一句话会分出来很多的关键字&#xff0c;都给他建立<K,List<Id>> 我们的Map 里面将容纳非常多的元素&#xff01; 那我们往Map 集合里面放元素时&#xff0c;将有29 个被放进去&#xff01;…

leetcode:234.回文链表(详解)

前言&#xff1a;内容包括-题目&#xff0c;代码实现&#xff0c;大致思路&#xff0c;代码解读 题目&#xff1a; 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&…

ZZS-7系列分闸、合闸、电源监视综合控制装置ZZS-7/1 ac220v

ZZS-7系列分闸、合闸、电源监视综合控制装置 系列型号&#xff1a; ZZS-7/1分闸、合闸、电源监视综合控制装置 ZZS-7/11分闸、合闸、电源监视综合控制装置 ZZS-7/12分闸、合闸、电源监视综合控制装置 ZZS-7/13分闸、合闸、电源监视综合控制装置 ZZS-7/14分闸、合闸、电源…

<Linux开发>系统移植 -之-使用buildroot构建BusyBox根文件系统

&#xff1c;Linux开发&#xff1e;系统移植 -之-使用buildroot构建BusyBox根文件系统 一、前言二、 buildroot 下载三、配置buildroot基础参数3.1 配置Target options3.2 配置Toolchain3.3 配置System configuration3.4 配置Filesystem images3.5 禁止编译 Linux 内核和 uboot…

音频大模型导读

1 介绍 本次分享包含音频压缩&#xff0c;语音识别&#xff0c;语音合成&#xff0c;以及近两年来大模型在音频领域的应用&#xff0c;涉及八篇论文和一个近期github霸榜的语音合成工具。 结果如下图所示&#xff1a;&#xff08;图链接&#xff1a;audio_llm&#xff09; 共…

Grafana 系列-统一展示-2-Prometheus 数据源

系列文章 Grafana 系列文章 Grafana Prometheus 数据源 Grafana 提供了对 Prometheus 的内置支持。本文会介绍 Grafana Prometheus&#xff08;也包括 Prometheus 的兼容实现&#xff0c;如 Thanos, Mimir 等&#xff09; 数据源的部分选项、变量 (Variable)、查询 (Query) …

API接口获取商品数据

作为一名技术爱好者&#xff0c;我们总会遇到各种各样的技术问题&#xff0c;需要寻找合适的技术解决方案。而在互联网时代&#xff0c;我们可以快速通过搜索引擎获取丰富的技术资源和解决方案。然而&#xff0c;在不同的技术分享中&#xff0c;我们常常会遇到质量参差不齐的文…

文献阅读:LaMDA: Language Models for Dialog Applications

文献阅读&#xff1a;LaMDA: Language Models for Dialog Applications 1. 工作简介2. 具体工作 1. 模型训练 1. 模型预训练2. finetune 2. 模型评估 1. SSI2. Safety3. Groundness4. Helpfulness5. Role Consistency 3. 实验结果整理4. 结论 & 思考 https://arxiv.org/a…

软件架构与设计模式复习笔记

考纲(张友生版本软件架构 考试题型&#xff1a; 10*3单选 5*3简答题 5*3设计图&#xff08;含画图&#xff09; 10*2 论述题 10*2综合题 复习以课件为主&#xff0c;书为辅 第一章 (软件危机) &#xff1f; &#xff1f; 构造模型与实现 掌握软件结构体系核心模型 第二章 软件体…

PBDB Data Service:Icon images of lifeforms(生命形式的图标图像)

Thumbnail images of lifeforms&#xff08;生命形式的图标图像&#xff09; 描述用法参数方法响应值格式术语表 描述 此操作返回表示指定分类的图像&#xff0c;或关于图像的信息。如果后缀是 .png&#xff0c;则返回图像内容数据。否则&#xff0c;将以指定的格式返回一个描…

【力扣-232.】用栈实现队列

&#x1f58a;作者 : D. Star. &#x1f4d8;专栏 : 数据结构 &#x1f606;今日分享 :“多看效应”-----对越熟悉的东西越喜欢的现象&#xff0c;心理学上称为“多看效应”。多看效应不仅仅是在心理学实验中才出现&#xff0c;在生活中&#xff0c;人们也常常能发现这种现象。…

HashMap 底层原理///HashMap详解

HashMap超详细探讨 总述从集合出发探讨HashMapCollection接口继承树Map接口继承树 从Map接口来&#xff0c;一步一步深入其中Map接口概述Map接口&#xff1a;常用方法Map接口 Map实现类之一&#xff1a;HashMapHashMap的存储结构HashMap源码中的重要常量JDK 1.8之前JDK 1.8总结…

阿里云CPU性能AMD EPYC Genoa 9T34处理器主频3.4 GHz

阿里云AMD服务器CPUAMD EPYC Genoa 9T34处理器&#xff0c;主频3.4 GHz&#xff0c;单核睿频最高3.75 GHz&#xff0c;计算性能稳定&#xff0c;阿里云服务器网分享AMD EPYC Genoa 9T34性能测评&#xff1a; AMD EPYC Genoa 9T34 阿里云AMD服务器性能增强通用型g8ae、计算平衡…

【容器化】Docker 简介和安装

【容器化】Docker 简介和安装 DockerDocker的应用场景Docker 的优点1、快速&#xff0c;一致地交付您的应用程序2、响应式部署和扩展3、在同一硬件上运行更多工作负载 Docker 架构Docker 安装Ubuntu Docker 、Debian Docker 安装使用官方安装脚本自动安装手动安装使用 Shell 脚…

渲染流水线 相关知识总结

目录 抽象理解渲染过程详细介绍各个渲染步骤1. 应用阶段1.1设置场景数据1.2 Culling 粗粒度剔除1.3 渲染设置1.4 传递几何信息1.5 调用DrawCall 2. 几何阶段2.1 几何着色器2.2 可选着色器2.3 投影变换 projection2.4 裁切 Clipping2.5 屏幕映射 ScreenMapping 3. 光栅化阶段3.1…

C++ Primer阅读笔记--返回类型和return语句

1--返回引用 同其他引用类型一样&#xff0c;如果函数返回引用&#xff0c;则该引用仅是所引对象的一个别名&#xff1b;则返回结果时不会发生拷贝操作&#xff1b; 不能返回局部对象的引用或指针&#xff1b;因为局部对象在函数结束后会被释放&#xff0c;从而其引用或指针将指…