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

相关文章

  • 基于JavaScript实现百叶窗动画效果不只单纯flas可以实现

    使用JavaScript实现百叶窗动画效果是一项非常有趣且有挑战性的任务。以下是实现该效果的完整攻略: 步骤一:HTML结构 首先,我们需要创建一个基本的HTML结构,这个结构包含两个主要的元素: <div id="blinds"> <div class="blind-container"> &…

    JavaScript 2023年6月10日
    00
  • JavaScript立即执行函数与函数劫持的作用

    JavaScript立即执行函数与函数劫持是常用的一些函数技巧,可以用来实现模块化编程、实现私有变量等功能。下面我会详细讲解这两个函数技巧的使用方法及其作用。 JavaScript立即执行函数的定义及作用 JavaScript立即执行函数是指在定义之后立即执行的函数。其基本语法为: (function() { // function body })(); 这…

    JavaScript 2023年5月27日
    00
  • JS装饰器函数用法总结

    下面我将详细讲解“JS装饰器函数用法总结”的完整攻略。 什么是装饰器模式 在软件工程中,装饰器模式是一种结构型设计模式,它允许你通过将对象包装在一个装饰器类中来动态地修改对象的行为。装饰器模式的核心思想是可以将方法或对象动态地添加到另一个对象中。这个模式使得程序可以在不修改原来的代码的情况下增加新的功能。 装饰器函数的用法 在ES7中,已经提供了装饰器语法,…

    JavaScript 2023年5月27日
    00
  • 服务端预渲染之Nuxt(使用篇)

    服务端预渲染(Server-Side Rendering,SSR)是一种Web应用程序的开发方法,它将初始HTML和渲染的JavaScript发送给客户端,而不是在客户端浏览器中使用JavaScript再进行处理和渲染。 Nuxt.js是一个基于Vue.js的应用框架,它专注于提供一个开箱即用的服务器渲染体验。Nuxt.js 可以帮助我们快速开发、部署 Vu…

    JavaScript 2023年6月11日
    00
  • 举例讲解JavaScript中关于对象操作的相关知识

    下面我将详细讲解JavaScript中关于对象操作的相关知识: 对象的定义 JavaScript中对象是一种数据类型,它是一组无序的属性和方法的集合。JavaScript对象是键值对的集合,其中键是字符串类型的属性名,值可以是任何JavaScript的数据类型。对象可以通过字面量或者构造函数的方式进行创建。 对象的字面量创建 var person = { f…

    JavaScript 2023年5月27日
    00
  • javascript 两个字符串比较函数

    下面是关于 JavaScript 字符串比较函数的完整攻略。 在 JavaScript 中比较字符串时,有两个比较函数可以使用: localeCompare():用于比较给定字符串与目标字符串的顺序关系,根据本地化规则和当前语言环境来进行比较,支持多种语言。该函数返回一个数字,表示两个字符串的大小关系。 charCodeAt():返回字符串中指定位置的字符的…

    JavaScript 2023年5月28日
    00
  • JS面向对象之单选框实现

    让我来为大家详细讲解一下“JS面向对象之单选框实现”的完整攻略。 一、前置知识 在学习本文内容前,需要掌握以下基础知识: HTML基础语法和标签的使用。 CSS基础知识和样式的设置。 JavaScript基础语法和DOM操作。 二、单选框组件的设计 在使用JavaScript实现单选框的选择和取消操作之前,我们需要先思考该组件的设计。首先,我们需要确定该组件…

    JavaScript 2023年6月10日
    00
  • 基于dataset的使用和图片延时加载的实现方法

    为了给你更全面的介绍,我将分为两部分来解答你的问题。 基于 dataset 的使用 dataset是HTML5中新增的一个属性,用于为元素存储自定义数据。它可以为我们提供一种方便快捷的方式来访问元素存储的数据,而不需要通过其他的方式来操作元素的属性。 增加数据 <body> <div data-name="zhangsan&quo…

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