1、设计稿

1)pc设计稿为19201080的可视化大屏,16:9比例设计

2)大屏设计稿35841152的可视化大屏,28:9比例设计

3)移动端设计稿 宽750的可视化大屏

2、适配不同屏幕

1)pc要兼容不同分辨率下的屏幕,注意这里说的是往下兼容 兼容1k以下的 不能出现滚动条 使用scale

2)大屏比例为28:9,在项目开发中,可以按照1680:540 达到28:9的效果 不能出现滚动条 使用rem

3)移动端兼容,以750为标准实现适配 使用rem

3、实现思路:

1)pc可以根据vw、vh去实现

@function vw($px) {

@return ($px/1920) * 100vw;

}

body {

width:vw(1920)

}

问题:在echats中,当在小屏幕的时候,图表的字体会比ui稿上的大,这时候你又要把字体在js里面再进行一步转换

// 字体转换

function toFontSize(px){

let vw = px / 1920;

let htmlWidth = document.documentElement.clientWidth || document.body.clientWidth;

return htmlWidth * vw

}

2)rem

rem (font size of the root element), 是 css3 的引入的一个大小单位。即相对于根元素的 font-size 值的大小。所谓根元素在网页里一般就是 html。

问题:在echats中,当在小屏幕的时候,图表的字体会比ui稿上的大,这时候你又要把字体在js里面再进行一步转换

3)缩放scale

浏览器body设置为设计稿宽高即1920*1080, 动态根据实际宽高对body的width,height进行缩放,从而实现内容缩放

采用scale方案,字体不受浏览器最小字体限制,可以自由绽放到该分辨率下对应比例

4)根据不同屏幕切换显示 不同页面

pc和大屏的页面布局结构一致,所以更换className去实现切换

移动端与pc、大屏的页面布局都不一致,所以根据js判断当前是否为移动设备进行显示切换

4、简单实现代码

var docWidth,docHeight;

var designWidth,designHeight;

// 屏幕缩放实现

function refreshScale(){

bodyStyle.innerHTML=`body{width:${designWidth}px; height:${designHeight}px!important;}`

document.documentElement.firstElementChild.appendChild(bodyStyle)

document.getElementById('main').style='display:flex'

document.getElementsByClassName('mobile')[0].style='display:none'

var widthRatio = docWidth / designWidth,

heightRatio = docHeight / designHeight;

document.body.style = `transform:scale(${widthRatio},${heightRatio});transform-origin:left top;`;

// 应对浏览器全屏切换前后窗口因短暂滚动条问题出现未占满情况

setTimeout(function(){

var lateWidth= document.documentElement.clientWidth,

lateHeight = document.documentElement.clientHeight;

if( lateWidth === docWidth ) return;

widthRatio = lateWidth / designWidth

heightRatio = lateHeight / designHeight

document.body.style = "transform:scale(" + widthRatio + "," + heightRatio + ");transform-origin:left top;"

},0)

}

// 清除scale

function clearScale(){

// 清除pc样式

bodyStyle.innerHTML=``

document.documentElement.firstElementChild.appendChild(bodyStyle)

document.body.style="transform:none;transform-origin:none"

}

// 初始化

function init(){

// 获取当前屏幕可视区域大小

docWidth = document.documentElement.clientWidth;

docHeight = document.documentElement.clientHeight;

// 判断是否是移动设备

if(/Android|webOS|iPhone|iPad|iPod|BlackBerry|Windows Phone/i.test(navigator.userAgent)){

mobilePage();

}else{

let mainClass = document.getElementById('main').classList;

if(docWidth == 1680 || docWidth == 3584){ // 模拟大屏

designWidth = docWidth;

designHeight = docWidth / 28 *9;

mainClass.add('large');

mainClass.remove('pc');

largePage();

}else{ // pc

designWidth = 1920;

designHeight = 1080;

mainClass.add('pc');

mainClass.remove('large');

refreshScale()

}

}

}

// 大屏设置 rem 函数

function setRem (designSize) {

// 基准大小

baseSize = 100;

let basePc = baseSize / designSize; // 表示1680的设计图,使用100PX的默认值

let vW = window.innerWidth; // 当前窗口的宽度

let rem = vW * basePc; // 以默认比例值乘以当前窗口宽度,得到该宽度下的相应font-size值

document.documentElement.style.fontSize = rem + "px";

}

// 大屏页面

function largePage(){

clearScale();

document.getElementById('main').style='display:flex'

document.getElementsByClassName('mobile')[0].style='display:none'

// 大屏 设置 rem 函数

let designSize = 1680;

setRem(designSize);

}

// 移动端页面

function mobilePage(){

clearScale()

// 是移动设备 展示移动设备页

document.getElementById('main').style='display:none'

document.getElementsByClassName('mobile')[0].style='display:flex'

// mobile 设置 rem 函数

let designSize = 750;

setRem(designSize);

}

// 初始化

init();

// 监听前进/后退以及load事件触发

window.addEventListener("pageshow", function (e) {

if (e.persisted) { // 浏览器后退的时候重新计算

init()

}

}, false);

// 监听屏幕缩放

window.addEventListener("resize",function(){

init()

}, false);

width: 100%;

height: 100%;

}

body{

margin:0px;

transform: translate3d(0,0,0)

}

/* pc */

.pc {

width: 1860px;

height: 1020px;

display: flex;

flex-direction: row;

justify-content: space-between;

padding:30px;

}

.pc .column {

display: flex;

flex-direction: column;

justify-content: space-between;

}

.pc .bk {

width: 450px;

height: 350px;

border: #000 solid 1px;

margin-top: 30px;

}

.bk:first-child{

margin-top: 0px;

}

.pc .big-bk {

width: 850px;

height: 550px;

border: #000 solid 1px;

margin: 30px 30px 0px 30px;

}

.big-bk:first-child {

margin-top: 0px;

}

/* 移动端 */

.mobile {

display: flex;

flex-direction: column;

align-items: center;

}

.mobile .bk {

width: 6.9rem;

height: 2rem;

border: #000 solid 0.01rem;

margin-top: 0.3rem;

}

/* 大屏 */

.large {

width: 16.2rem;

height: 4.6rem;

display: flex;

flex-direction: row;

justify-content: space-between;

padding:0.3rem;

}

.large .column {

display: flex;

flex-direction: column;

justify-content: space-between;

}

.large .bk {

width: 4.5rem;

height: 1.5rem;

border: #000 solid 1px;

margin-top: 0.3rem;

}

.large .big-bk {

width: 6.5rem;

height: 2.5rem;

border: #000 solid 1px;

margin: 0.3rem 0.3rem 0rem 0.3rem;

}

pc兼容 参考:https://blog.csdn.net/sophie_u/article/details/109582687

移动端html适配方案,原生js实现 兼容常规pc、大屏、移动端 适配方案相关推荐

  1. 原生 js 实现类 3d 地图大屏展示自动高亮轮播、显示悬浮提示 tootip 的方案:svg + popper.js 定位引擎

    要实现的效果 如下图,3d 地图高亮自动轮播,展示白云区各个镇街的人口数局. 原由 为什么想到这个方案,是因为我在用 echarts-gl 实现 3d 地图效果的过程中,我发现通过 dispatchA ...

  2. 【前端大屏可视化项目适配方案】

    引自 https://juejin.cn/post/7009081081760579591#heading-27 感谢!!! 前端大屏可视化项目适配方案 1. 全局适配 1.1 css scale 适 ...

  3. 大屏iPhone的适配 +iOS 图片尺寸要求

    摘自:http://blog.ibireme.com/2014/09/16/adapted_to_iphone6/ 苹果公司官网设计介绍到:Retina显示屏的超高像素密度已超过人眼能分辨的范围. R ...

  4. gis 大屏_gis大屏可视化应用技术方案_gis大屏可视化应用技术_gis大屏可视化应用 - 帆软...

    如今大屏可视化的应用越来越普遍,在很多公共场合.交易大厅,以及企业的展览中心,大屏可视化都是非常震撼的.那么gis大屏可视化应用技术方案哪家公司靠谱?你需要掌握这2招选择标准. 一.gis大屏可视化应 ...

  5. vue大屏可视化自适应完美方案

    背景 在做大屏可视化项目的时候,一般设计稿会设计成1920*1080,但是页面写死1920*1080在2k.4k等分辨率的屏幕下是不适配的.如果页面能够根据屏幕比例进行等比缩放那就好了. 比例 什么? ...

  6. 基于js+echarts实现数据可视化大屏展示

    vue+echarts大屏数据可视化展示点击进入 写在前面: 本项目中使用的是echarts图表库,ECharts 提供了常规的折线图.柱状图.散点图.饼图.K线图,用于统计的盒形图,用于地理数据可视 ...

  7. 大屏数据可视化开发方案

    什么是数据可视化? 数据可视化其实就是把数据以更直观的形式进行展示,其实就是通过图表的方式进行展示. 数据可视化的特点: 1.可以清晰有效的传达与沟通信息 大屏数据可视化技术选型 1.百度的 suga ...

  8. react + dataV + three.js + blender 实现3D可视化大屏效果

    效果图 3D 可视化展示是一个很不错的方向,但是纯three.js 开发效率低,简单展示类的可视化,可以考虑使用blender 等3D 绘制工具,快速,高效. 文章目录 效果图 前言 一.DataV ...

  9. 大屏可视化的适配方案

    这里找了几个写的非常不错的文章,分享一下: https://blog.csdn.net/qq_41238459/article/details/122812296?ops_request_misc=& ...

最新文章

  1. 全球及中国PMN-PT单晶行业发展模式及未来产销前景预测报告2022-2028年版
  2. MyEclipse使用总结
  3. 权限申请_Android 开发工程师必须掌握的动态权限申请,三步轻松搞定!
  4. All Of ACM
  5. 网络通信之TCP Client通信(基于Arduino)
  6. dubbo协议_Dubbo框架支持多少种协议?各有什么特点?文中一一为你揭晓
  7. 赚钱真的要抓住风口,抓住风口猪都能飞
  8. 我在公司内部的分享(秒针系统)
  9. 保存页面的滚动条的位置
  10. 存储过程写法_计算机组成原理学习笔记:三 存储系统
  11. kafka集群搭建超详细教程
  12. Ubuntu压缩、解压
  13. 怎么给图片批量加边框
  14. 华为芯片鸿蒙的由来,华为“鸿蒙”真的来了!看完这些商标来历,网友们又激动了...
  15. 炼成的:精妙SQL语句介绍
  16. Hdu 4090 GemAnd Prince (搜索_2010年北京区域赛)
  17. 瀑布模型的特点及优缺点
  18. LeetCode第172场周赛:5322. 工作计划的最低难度(动态规划)
  19. 灰度图像的中值滤波取证
  20. python turtle绘制正多边形

热门文章

  1. java程序卡住的原因_Java程序卡住问题的解决
  2. Android中简单实现贴纸功能labelview
  3. 高数培训3:多元函数微分
  4. 关于树莓派USB端口号查询说明
  5. java 墨卡托 经纬度_Web墨卡托坐标与WGS84经纬度互转 java代码
  6. 改变el-progress底色
  7. 170916_算法导论学习(四)_2.3 设计算法_练习
  8. 1.1 关于emscripten
  9. 基于RuoYi开发+flowable实现OA办公系统
  10. 饥荒机器人升级上限多少_饥荒机器人最快速升级攻略_饥荒这款游戏可以来说是非常的大众化,因为有非常多的玩家喜欢这--找找啦游戏平台-分享值得玩的好游戏!...