flexible.js是淘宝移动端自适应布局的解决方案之一。它主要实现的功能是:根据不同的屏幕宽度动态设置标签的字体大小,从而实现移动端页面的自适应布局。
手淘flexible.js框架使用和源代码讲解小结
什么是flexible.js
flexible.js是淘宝移动端自适应布局的解决方案之一。它主要实现的功能是:根据不同的屏幕宽度动态设置标签的字体大小,从而实现移动端页面的自适应布局。
使用方法
使用flexible.js,只需要在页面头部引入flexible.js即可。
<script src="https://g.alicdn.com/fdilab/lib-flexible/0.3.2/flexible.js"></script>
原理
flexible.js会根据屏幕宽度动态计算标签的font-size值,用于设置其他元素的大小。计算公式如下:
document.documentElement.style.fontSize = (window.innerWidth / 设计稿宽度) * 基准字体大小
其中,设计稿宽度是指你所设计的网页的屏幕宽度,基准字体大小是你所设定的字体大小。默认的设计稿宽度为750px,基准字体大小为50px。
例如,如果你设计的网页宽度为375px,基准字体大小为50px,则计算出来的标签的font-size为25px。
源代码讲解
flexible.js源代码主要分为两个部分:mediaQuery部分和flexible部分。
mediaQuery部分
mediaQuery部分主要定义了一些媒体查询,用于不同屏幕宽度下标签的font-size值。代码如下:
docEl.style.fontSize = (win.width / 750) * 50 + 'px';
其中,docEl是标签,win是window对象,750是默认的设计稿宽度,50是默认的基准字体大小。根据屏幕宽度的不同,这个值会自动调整。
dpi = 1 / devicePixelRatio;
scale = 1 / dpi;
metaEl = doc.createElement('meta');
metaEl.setAttribute('name', 'viewport');
metaEl.setAttribute('content', 'initial-scale=' + scale + ', maximum-scale=' + scale + ', minimum-scale=' + scale + ', user-scalable=no');
这段代码主要是用于设置视口的缩放比例,禁用用户手动缩放。
flexible部分
flexible部分主要包含了一些方法和事件,用于初始化页面和响应不同屏幕宽度下标签的font-size值。
function refreshRem(){
var width = docEl.getBoundingClientRect().width;
if (width / dpr > 540) {
width = 540 * dpr;
}
var rem = width / 10;
docEl.style.fontSize = rem + 'px';
flexible.rem = win.rem = rem;
}
这段代码主要是用于计算和设置标签的font-size值。其中,dpr是设备像素比,一般是1或2,rem是设置的字体大小。
win.addEventListener('resize', function() {
clearTimeout(tid);
tid = setTimeout(refreshRem, 300);
}, false);
这段代码主要是用于响应窗口大小变化事件,并重新计算标签的font-size值。
示例说明
示例1
在页面头部引入flexible.js之后,可以通过设置其他元素的大小来实现移动端页面的自适应布局。例如:
<style>
.box {
width: 6.4rem;
height: 3.6rem;
background-color: red;
}
</style>
<div class="box"></div>
这段代码定义了一个背景为红色的
示例2
如果设计的网页宽度不是750px,需要在调用flexible.js之前手动设置设计稿宽度。例如,如果设计的网页宽度为640px,可以通过以下代码实现:
window.flexible = {
'designWidth': 640
};
这段代码会在window对象上添加一个flexible对象,并设置designWidth属性为640。此时,根据屏幕宽度的不同,标签的font-size值将会自动计算。
本文标题为:手淘flexible.js框架使用和源代码讲解小结
基础教程推荐
- Vue3.0高阶实战:开发高质量音乐Web app 2023-10-08
- 纯javascript的ajax实现php异步提交表单的简单实例 2022-12-28
- CSS定义超链接四个状态的正确顺序L-V-H-A 2024-01-20
- php-来自mysql的html中的特殊字符输出 2023-10-27
- jQuery Ajax方式上传文件的方法 2023-01-20
- html中相对位置与绝对位置的具体使用 2022-09-21
- JS实现简单打砖块弹球小游戏 2023-08-08
- ajax异步请求刷新 2023-01-20
- JS开发 富文本编辑器TinyMCE详解 2024-01-09
- css关闭a标签点击出现蓝色背景问题 2022-10-29