首页 > 其他分享 >这款全自动自适应工具你用过了吗?autofit.js请求加入你的战场!

这款全自动自适应工具你用过了吗?autofit.js请求加入你的战场!

时间:2023-05-17 13:57:49浏览次数:50  
标签:scale 缩放 clientHeight autofit js 使用 全自动

autofit

前段时间做了一个自适应的小工具(autofit.js)

经过一段时间的试用,同学们发现了工具存在的一些问题,我自己也发现了一些,这篇文章是针对这些问题撰写的。

autofit.js

autofit.js是一款可以让你的项目一键自适应的工具。

autofit.js npm 主页

autofit.js github 主页

安装

npm i autofit.js

使用

import autofit from 'autofit.js'
autofit.init({
    designHeight: 929,
    designWidth: 1920,
    renderDom:"#app",
    resize: true
})

一般按照1080的设计稿开发时,直接调用autofit.init() 即可。插件会自动计算缩放后撑满浏览器窗口所需的宽高。

解决问题

使用了autofit.js依然出现了白边

因为autofit.js使用的是scale方案,transform: scale() 缩放时,dom元素在文档中的实际占位是不变的

image-20230509153118546

image-20230509154838230

这样下方就出现了白边,右侧还出现了滚动条

解决此问题将body设置超出隐藏即可:

body{
    overflow: hidden;
}

image-20230509154748146

在设置超出隐藏后,滚动条和白边都不见了。

#app充满了全屏,里面的元素却不能自适应位置。

image-20230509153540023

出现这种问题的原因很明显,你需要将内容元素做一个简单的适配定位,因为autofit.js只做了缩放和填充部分。如果你的页面元素没有做均匀分布的位置,也是会出现这种情况的。

以上图为例

如果出现了这个问题,推荐使用flex进行布局即可。

display:flex;
justify-content: space-between;

或者直接使用定位,将三块内容定位到左上、中间、右上。

.left, .right {
    position: fixed;
    width: 25%;
    height: 100%;
    top: 0;
    padding-top: 70px;
    z-index: 9999;
}

手动缩放浏览器窗口时,echarts图表被拉伸了

这个问题按说不会是因为autofit.js引起的(前提是你没有使用百分比),但是既然有人提到了,这里说一下解决办法。

echarts图表拉伸,说明你的echarts外层容器变大或者变小的,导致canvas元素拉伸了,解决办法为:

window.addEventListener('resize', this.redraw, false);    
redraw() {
      this.myChart.clear();
      this.myChart.resize();
      this.draw();
},

像我这样,监听resize事件,并重绘echarts即可。

手动缩放浏览器可以正常适应,点击最大化(或F11全屏)时却失效了

这个问题属于autofit.js的一个bug,目前在最新版本已经修复了。

造成Bug的代码

  if (clientWidth / clientHeight < designWidth / designHeight) {
    scale = (clientWidth / designWidth)
    document.querySelector(renderDom).style.height = `${clientHeight / scale}px`;
  } else {
    scale = (clientHeight / designHeight)
    document.querySelector(renderDom).style.width = `${clientWidth / scale}px`;
  }

造成这个bug的原因是,全屏时的宽高比不小于(因为是等于)设计图宽高比,导致高度没有被重新设置。

所以在曾经设置过高度(即基于宽度px不变的缩放),再最大化的情况,高度不会变。在这种逻辑下,宽度有时也会失效。

修改后的代码(1.0.8):

let scale = (clientWidth / clientHeight < designWidth / designHeight) ? (clientWidth / designWidth) : (clientHeight / designHeight)
dom.style.height = `${clientHeight / scale}px`;
dom.style.width = `${clientWidth / scale}px`;
dom.style.transform = `scale(${scale})`;

这样无论是怎样的宽高比,它都会同时设置宽度和高度。

使用autofit.js后,在小屏幕上字体(或元素)变得过小

造成这种问题的原因大概率是你同时使用了其他自适应工具,或者使用了相对单位,导致你的网站进行了双重适配。

解决方式也很简单,autofit.js不需要任何其他辅助工具,如果想体验autofit.js一行搞定,关闭其他插件,且不要使用任何相对单位即可!

autofit.js仅推荐使用px进行开发。

使用autofit.js后,地图事件热区偏移了

不要手动设置:transform-origin,因为autofit.js将它设置成了 0 0,即以左上角为基准点缩放,这可以保证dom元素不会偏移。

如果你使用的地图是基于canvas绘制的,那么有可能会出现偏移现象(往往伴随着拉伸),那么和上面的echarts的解决方式一样,只需要重绘就可以了。

如果是基于svg绘制的,那么不应该会出现这个问题,如果你的svg绘制的地图也出现了热区偏移现象,欢迎来私信捶我。

案例

我的使用案例

image-20230509161123956

正常状态 :1920*929

image-20230509161241362

笔记本缩放150%:1280*569

image-20230509162849861

笔记本缩放175%:1098*460

可以看到,这些缩放基本上影响不到我们,看起来甚至没有任何区别

标签:scale,缩放,clientHeight,autofit,js,使用,全自动
From: https://www.cnblogs.com/Kay-Larry/p/17408513.html

相关文章

  • 【React】react-json-view用法
    react-json-view:前端json可视化插件安装:npminstall--savereact-json-view 使用:importReactJsonfrom'react-json-view'<ReactJson/>配置:<ReactJsoncollapsed={false}//是否收起,true为收起indentWidth={10}//缩进iconStyle='cir......
  • 【js】文件下载
    constdonwLoadFn=(arr)=>{if(arr.length<=0)returnconstfullUrl=`http://192.168.2.50:9803${arr[0]?.filePath}`fetch(fullUrl).then(res=>res.blob()).then(blob=>{c......
  • JS逆向实战14——某小说网站 小说字数 和月票字体加密
    本文地址:https://www.cnblogs.com/zichliang/p/17408064.html本网站不算严格意义的逆向,只是爬虫的一个小手段。声明本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我......
  • 【开发者指南】如何在MyEclipse中编辑HTML或JSP文件?(一)
    MyEclipsev2022.1.0正式版下载MyEclipse技术交流群:742336981欢迎一起进群讨论如果您有HTML或JSP文件要编辑,这里将介绍如何编辑。查找以下信息:编辑源代码大纲和属性视图参数页面该功能在MyEclipse中是可用的。一、HTML/JSP编辑器要编辑HTML或JSP文件,请执行以下操作当......
  • js中的传值与传址
    在JavaScript中,传递参数时有两种方式:按值传递(passbyvalue)和按引用传递(passbyreference),即传值与传址。一、按值传递(传值)基本(简单)数据类型都是传值:number、boolean、字符串、null、undefined,都存储在栈中。按值传递意味着在函数调用时,会将参数的值复制一份,然后将这个副本......
  • 程序员怎么学爬虫JS逆向
    爬虫JS逆向(也称为前端逆向、JS破解等)是指通过分析JavaScript代码,破解前端加密算法或构造相应的模拟请求,从而有效地模拟人类用户完整的操作行为实现数据爬取。  以下是一些常见的爬虫JS逆向技术:1、自动识别Javascript解码器如果前端使用了Javascript编码来隐藏有价值的数据......
  • SpringBoot添加JSP支持
    ①创建一个新的MavenWeb项目,命名为SpringBoot_jsptest建成之后会如上图所示,报错是因为没有加入jsp的支持。②按照Maven规范,在src/main/下新建一个名为resource的文件夹,并在下面新建static以及templates文件夹修改pom.xml文件:      1、在url标签后面加入parent元素: <!--......
  • JSON
        案例:  ......
  • 2023年5月最新全国省市区县和乡镇街道行政区划矢量边界坐标经纬度地图数据 shp geojso
    发现个可以免费下载全国 geojson 数据的网站,推荐一下。支持全国、省级、市级、区/县级、街道/乡镇级以及各级的联动数据,支持导入矢量地图渲染框架中使用,例如:D3、Echarts等geojson数据下载地址:https://geojson.hxkj.vip该项目github地址:https://github.com/TangSY/echarts-m......
  • 关于 rxjs 编程中的 take(1) 操作
    对rxjs中的Observable使用take(1)操作符不会引起副作用。take(1)只是取Observable中第一个发出的值,并且会立即完成。它会使得Observable中只有一个值被发出并且完成,而不会影响其他代码。然而,如果Observable中包含了副作用操作,例如调用了HTTP请求或者改变了共享状......