首页 > 其他分享 >大屏适配方案

大屏适配方案

时间:2023-02-28 09:11:51浏览次数:27  
标签:方案 scale const documentElement 适配 大屏 document

现有大屏实现方案:

一、页面元素定位使用rem

定义父级大小,之后进行组件的height、margin、padding等多种css属性采用rem作为单位,实现适配

二、大屏内容居中展示

做法类似于查看图片的展示,当比例不同时,保证设计比例,内容居中展示

function setHtmlFontSize() {
            const cliW = doc.clientWidth;
            const cliH = doc.clientHeight;
            // 设计稿的尺寸:2560*1440, 比例为16/9
            const defaultW = 2560;
            const defaultH = 1440;
            // 为保证大屏完全展示,做法类似查看图片的展示,当比例不同时,保证设计比例,内容居中显示
            const widthRatio = cliW / defaultW;
            const heightRatio = cliH / defaultH;

            const ratio = widthRatio > heightRatio ? heightRatio : widthRatio;
            const fontSize = ratio * 100;
            // 将100px 作为 1rem,设计稿为 2560 * 1440
            doc.style.fontSize = `${fontSize.toFixed(3)}px`;
            that.props.dispatch({
                type: 'realTimeDynamicDisplay/overrideStateProps',
                payload: {
                    fontSize,
                },
            });
        }

缺点:对于UI组件的呈现不是很友好。因为组件的很多默认属性是以 px 为单位。如line-height的设置为22px,此时覆盖样式后的字体过大,并不能适应行高,就会出现文字重叠等错乱问题

调研方案:

通过CSS3的缩放 transform: scale(X) 属性,来控制大屏的展示

方式:只需要监听浏览器窗口的大小,同时控制变化的比例即可。

使用库:npm install @fit-screen/react

使用函数:

const handleScreenAuto = () => {
        const designDraftWidth = 1920;//设计稿的宽度
        const designDraftHeight = 960;//设计稿的高度
        //根据屏幕的变化适配的比例
        const scale = document.documentElement.clientWidth / document.documentElement.clientHeight < designDraftWidth / designDraftHeight ?
            (document.documentElement.clientWidth / designDraftWidth) :
            (document.documentElement.clientHeight / designDraftHeight);
        //缩放比例
        (document.querySelector('#screen')).style.transform = `scale(${scale}) translate(-50%)`;
    };

DEMO

import React, { useEffect } from 'react';
import styles from './index.less';

const Index = () => {
    //数据大屏自适应函数
    const handleScreenAuto = () => {
        const designDraftWidth = 1920;//设计稿的宽度
        const designDraftHeight = 960;//设计稿的高度
        //根据屏幕的变化适配的比例
        const scale = document.documentElement.clientWidth / document.documentElement.clientHeight < designDraftWidth / designDraftHeight ?
            (document.documentElement.clientWidth / designDraftWidth) :
            (document.documentElement.clientHeight / designDraftHeight);
        //缩放比例
        (document.querySelector('#screen')).style.transform = `scale(${scale}) translate(-50%)`;
    };
     //React的生命周期 如果你是vue可以放到mountd或created中
    useEffect(() => {
        //初始化自适应  ----在刚显示的时候就开始适配一次
        handleScreenAuto();
        //绑定自适应函数   ---防止浏览器栏变化后不再适配
        window.onresize = () => handleScreenAuto();
        //退出大屏后自适应消失   ---这是react的组件销毁生命周期,如果你是vue则写在deleted中。最好在退出大屏的时候接触自适应
        return () => window.onresize = null;
    }, []);
    return (
        <div id="screen" className={styles.stl}>
            阿莱克斯的减肥撒好地方
        </div>
    );
};

export default Index;

标签:方案,scale,const,documentElement,适配,大屏,document
From: https://www.cnblogs.com/zpsakura/p/17162684.html

相关文章

  • 防错料使用二维码解决方案 生产过程物料防错管理 免费提供源码
    生产过程中,物料的防错管理是非常重要的一环。它能够有效地防止物料错用或混用,从而降低产品质量问题的发生率,减少生产成本和生产周期,提高生产效率和产品质量。以下是生产过......
  • 平面图形任意变形问题的解决方案
    ​​http://61.186.252.131/expert/topic/886/886049.xml?temp=.9779779​​可惜没有写出源代码,但我相信此解决方案一定不错!哪位高手如果可以写出源代码,千万别忘了EMAIL给我......
  • 根据数据库记录动态生成C#类及其公共属性并动态执行的解决方案
    问题:C#中,想动态产生这么一个类:publicclassStatisticsData{publicstringorder_no{get;set;}publicintqty{get;set;}publicinto......
  • vue的两种服务器端渲染方案
    作者:京东零售姜欣关于服务器端渲染方案,之前只接触了基于react的Next.js,最近业务开发vue用的比较多,所以调研了一下vue的服务器端渲染方案。首先:长文预警,下文包括了两种方案......
  • 基恩士 PDA 远程方式解决方案
    1.安装 BTWRemoteController 2.安装目录下在放该文件 BTWCMDSVC 3.远程PDA(打开之前计入到对应文件夹下,先启用服务,再启用远程软件)  5.试用期已过问题......
  • 城市地下管廊数据采集监测方案
    随着社会的发展,管廊建设受到了越来越多的重视,但是管廊管理和监控工作却面临着建设时间过长、数据采集不及时、监控不到位等种种问题,地下管廊数据采集监控是一项繁重而技术复......
  • Prometheus配置Grafana监控大屏
    简介Grafana是一个跨平台的开源的度量分析和可视化工具,可以通过将采集的数据查询然后可视化的展示,并及时通知。主要特点展示方式:快速灵活的客户端图表,面板插件有许......
  • NRF52832蓝牙芯片详细介绍及应用方案
    NRF52XX系列蓝牙Soc芯片选型表NRF52810-QFAA处理器:ARMCortexM4RAM:24kBFLASH:192kB支持协议:BLE、ANT、私有2.4G封装:QFN48尺寸(mm):6x6NRF52810-QCAA处理器:ARMCortexM4R......
  • SkeyeRTMPLive流媒体直播软件应用解决方案
    上一篇我们讲到了​​RTMPLive多流媒体协议转无插件直播协议(RTMP)解决方案​​,现在我们可以通过RTMPLive将网络摄像机IPC的流,以及网络电视流,或者点播服务器的回放流,甚至本......
  • SkeyeRTMPClient拉取RTMP流扩展支持HEVC(H.265)解决方案
    不久前我们已经在RTMP推送端扩展支持了HEVC(H.265后文统称H265)编码格式,但是,由于RTMP官方指定的协议格式已经不再更新,官方的播放器的Flash播放器并不支持H265格式的编码数......