手淘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>

这段代码定义了一个背景为红色的

元素,宽度为6.4rem,高度为3.6rem。根据默认的设计稿宽度750px和基准字体大小50px,6.4rem的宽度相当于320px,3.6rem的高度相当于180px。

示例2

如果设计的网页宽度不是750px,需要在调用flexible.js之前手动设置设计稿宽度。例如,如果设计的网页宽度为640px,可以通过以下代码实现:

window.flexible = { 
    'designWidth': 640
};

这段代码会在window对象上添加一个flexible对象,并设置designWidth属性为640。此时,根据屏幕宽度的不同,标签的font-size值将会自动计算。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:手淘flexible.js框架使用和源代码讲解小结 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • 页面实时更新时间的JS实例代码

    一、准备工作 首先,需要在HTML文件头部链接JS代码文件。 <script src="js/time.js"></script> 然后,在页面中需要有div标签用于显示实时更新的时间。 <div id="clock"></div> 二、具体实现 首先,创建一个名为sho…

    JavaScript 2023年5月27日
    00
  • JavaScript的数据类型转换原则(干货)

    JavaScript的数据类型转换原则(干货) 1. 数据类型转换的基本原则 在JavaScript中,我们经常需要将不同类型的数据进行转换,特别是在进行运算、比较和赋值等操作的时候。因此,了解数据类型转换的基本原则对于编写高质量的JavaScript代码是非常重要的。 1.1. 隐式类型转换 JavaScript中有两种类型转换方式:显式类型转换和隐式类型…

    JavaScript 2023年5月28日
    00
  • javaScript中with函数用法实例分析

    JavaScript中with函数用法实例分析 with函数是JavaScript中的一个特殊函数,用来简化代码编写。尽管with函数的用法看起来很简单,但是使用不当可能会导致代码混乱,因此在使用with函数时需要谨慎。 本文将从以下方面详细讲解with函数的用法,包括: with函数的用法 with函数的实例分析 with函数的用法 with函数的语法: …

    JavaScript 2023年6月10日
    00
  • js实现鼠标切换图片(无定时器)

    JS实现鼠标切换图片(无定时器)的攻略如下: 步骤一:搭建HTML结构 首先,我们需要搭建一个HTML结构,用于展示图片和显示鼠标切换效果。具体可以参考下面的代码示例: <div class="img-wrapper"> <img src="https://picsum.photos/id/1/200/300&…

    JavaScript 2023年6月11日
    00
  • JavaScript数组reduce()方法使用实例详解

    JavaScript数组reduce()方法使用实例详解 在JavaScript中,数组reduce()方法是一种非常有用的方法,它可以将数组中的元素累加到一起,从而得到一个最终的结果。本文将详细介绍reduce()方法的使用方法,并通过示例说明它的用法。 reduce()方法的语法 reduce()方法是数组对象的一个方法,它可以接收两个参数,第一个参数是…

    JavaScript 2023年5月27日
    00
  • Vue.js每天必学之数据双向绑定

    Vue.js每天必学之数据双向绑定攻略 什么是数据双向绑定 数据双向绑定是指当数据发生变化时,页面元素会自动更新来保持一致,同时当用户操作页面元素发生变化时,与之绑定的数据也会自动更新。 为什么需要数据双向绑定 数据双向绑定可以帮助我们更加方便地处理页面元素和数据之间的关系,简化了开发过程并提高了开发效率。 如何实现数据双向绑定 Vue.js提供了v-mod…

    JavaScript 2023年6月11日
    00
  • JavaScript DOM常用操作代码汇总

    JavaScript DOM常用操作代码汇总 概述 JavaScript是一种强大的脚本语言,可以用来操作HTML页面中的文本、元素、样式和事件。DOM(Document Object Model)是一种将HTML文档解析成树形结构的API(应用程序接口),使得JavaScript可以对文档中的元素进行访问和操作。本文将提供JavaScript DOM的常用…

    JavaScript 2023年6月10日
    00
  • JavaScript中的toLocaleDateString()方法使用简介

    当我们需要在 JavaScript 中将日期转换为特定格式的字符串时,可以使用 toLocaleDateString() 方法。 使用语法 toLocaleDateString() 方法接受两个可选参数:locales 和 options。 date.toLocaleDateString([locales[, options]]); 其中,locales 参…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部