移动端自适应flexible.js的使用方法(不用三大框架,仅写一个单html页面使用)推荐


Posted in Javascript onApril 02, 2019

第一步:

下载 flexible.js,代码如下,可以复制过去用

;(function(win, lib) {
 var doc = win.document
 var docEl = doc.documentElement
 var metaEl = doc.querySelector('meta[name="viewport"]')
 var flexibleEl = doc.querySelector('meta[name="flexible"]')
 var dpr = 0
 var scale = 0
 var tid
 var flexible = lib.flexible || (lib.flexible = {})
 
 if (metaEl) {
  console.warn('将根据已有的meta标签来设置缩放比例')
  var match = metaEl.getAttribute('content').match(/initial\-scale=([\d\.]+)/)
  if (match) {
   scale = parseFloat(match[1])
   dpr = parseInt(1 / scale)
  }
 } else if (flexibleEl) {
  var content = flexibleEl.getAttribute('content')
  if (content) {
   var initialDpr = content.match(/initial\-dpr=([\d\.]+)/)
   var maximumDpr = content.match(/maximum\-dpr=([\d\.]+)/)
   if (initialDpr) {
    dpr = parseFloat(initialDpr[1])
    scale = parseFloat((1 / dpr).toFixed(2))
   }
   if (maximumDpr) {
    dpr = parseFloat(maximumDpr[1])
    scale = parseFloat((1 / dpr).toFixed(2))
   }
  }
 }
 
 if (!dpr && !scale) {
  var isAndroid = win.navigator.appVersion.match(/android/gi)
  var isIPhone = win.navigator.appVersion.match(/iphone/gi)
  var devicePixelRatio = win.devicePixelRatio
  if (isIPhone) {
   // iOS下,对于2和3的屏,用2倍的方案,其余的用1倍方案
   if (devicePixelRatio >= 3 && (!dpr || dpr >= 3)) {
    dpr = 3
   } else if (devicePixelRatio >= 2 && (!dpr || dpr >= 2)) {
    dpr = 2
   } else {
    dpr = 1
   }
  } else {
   // 其他设备下,仍旧使用1倍的方案
   dpr = 1
  }
  scale = 1 / dpr
 }
 
 docEl.setAttribute('data-dpr', dpr)
 if (!metaEl) {
  metaEl = doc.createElement('meta')
  metaEl.setAttribute('name', 'viewport')
  metaEl.setAttribute(
   'content',
   'initial-scale=' +
    scale +
    ', maximum-scale=' +
    scale +
    ', minimum-scale=' +
    scale +
    ', user-scalable=no'
  )
  if (docEl.firstElementChild) {
   docEl.firstElementChild.appendChild(metaEl)
  } else {
   var wrap = doc.createElement('div')
   wrap.appendChild(metaEl)
   doc.write(wrap.innerHTML)
  }
 }
 
 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
 }
 
 win.addEventListener(
  'resize',
  function() {
   clearTimeout(tid)
   tid = setTimeout(refreshRem, 300)
  },
  false
 )
 win.addEventListener(
  'pageshow',
  function(e) {
   if (e.persisted) {
    clearTimeout(tid)
    tid = setTimeout(refreshRem, 300)
   }
  },
  false
 )
 
 if (doc.readyState === 'complete') {
  doc.body.style.fontSize = 12 * dpr + 'px'
 } else {
  doc.addEventListener(
   'DOMContentLoaded',
   function(e) {
    doc.body.style.fontSize = 12 * dpr + 'px'
   },
   false
  )
 }
 
 refreshRem()
 
 flexible.dpr = win.dpr = dpr
 flexible.refreshRem = refreshRem
 flexible.rem2px = function(d) {
  var val = parseFloat(d) * this.rem
  if (typeof d === 'string' && d.match(/rem$/)) {
   val += 'px'
  }
  return val
 }
 flexible.px2rem = function(d) {
  var val = parseFloat(d) / this.rem
  if (typeof d === 'string' && d.match(/px$/)) {
   val += 'rem'
  }
  return val
 }
})(window, window['lib'] || (window['lib'] = {}))

第二步:

在index.html中引入

项目结构

移动端自适应flexible.js的使用方法(不用三大框架,仅写一个单html页面使用)推荐

<!DOCTYPE html>
<html lang="en">
 <head>
  <meta charset="UTF-8" />
  <!-- 去掉meta,交给flexible.js自动处理 -->
  <!-- <meta name="viewport" content="width=device-width, initial-scale=1.0" /> -->
  <meta http-equiv="X-UA-Compatible" content="ie=edge" />
  <title>Document</title>
  <script src="./js/flexible.js"></script>
  <link rel="stylesheet" href="./css/index.css" rel="external nofollow" />
 </head>
 <body>
  <div class="wrap">
   <div class="title">首页</div>
  </div>
 </body>
</html>

第三步

写 less 转换

需要安装   Easy LESS   插件,帮助我们把 less 转成 css

由于用了less,事先定义了一个变量 @font-size-base: 75;  来保存标注稿基准字体大小,淘宝 flexible.js 是基于750px设计稿来的

,所以  @font-size-base  为 75;  

然后 比如说你测量  height: 98px;   那么就使用 height: 98rem / @font-size-base; 进行换算

@font-size-base: 75;
html,
body {
 margin: 0;
 padding: 0;
}
.wrap {
 // width: 100%;
 .title {
  width: 100%;
  height: 98rem / @font-size-base;
  line-height: 98rem / @font-size-base;
  color: #fff;
  background: #e02222;
  text-align: center;
  font-size: 32rem / @font-size-base;
 }
}

第四步

看效果

移动端自适应flexible.js的使用方法(不用三大框架,仅写一个单html页面使用)推荐

以上所述是小编给大家介绍的移动端自适应flexible.js使用方法详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
关于document.cookie的使用javascript
Apr 11 Javascript
dropdownlist之间的互相联动实现(显示与隐藏)
Nov 24 Javascript
jQuery EasyUI API 中文文档 - Dialog对话框
Nov 15 Javascript
Javacript实现颜色梯度变化和渐变的效果代码
May 31 Javascript
jQuery中:reset选择器用法实例
Jan 04 Javascript
JavaScript编写简单的计算器
Nov 25 Javascript
js重写方法的简单实现
Jul 10 Javascript
Angular2表单自定义验证器的实现
Oct 19 Javascript
基于Bootstrap分页的实例讲解(必看篇)
Jul 04 Javascript
基于Vue框架vux组件库实现上拉刷新功能
Nov 28 Javascript
JavaScript基于面向对象实现的猜拳游戏
Jan 03 Javascript
Echarts实现多条折线可拖拽效果
Dec 19 Javascript
基于vue实现web端超大数据量表格的卡顿解决
Apr 02 #Javascript
基于AngularJS拖拽插件ngDraggable.js实现拖拽排序功能
Apr 02 #Javascript
详解vue后台系统登录态管理
Apr 02 #Javascript
微信小程序实现人脸识别登陆的示例代码
Apr 02 #Javascript
Angular7中创建组件/自定义指令/管道的方法实例详解
Apr 02 #Javascript
Node.js中package.json中库的版本号(~和^)
Apr 02 #Javascript
基于Vue插入视频的2种方法小结
Apr 02 #Javascript
You might like
Zend Framework入门之环境配置及第一个Hello World示例(附demo源码下载)
2016/03/21 PHP
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
一些常用的JS功能函数代码
2009/06/23 Javascript
JavaScript 小型打飞机游戏实现原理说明
2010/10/28 Javascript
基于jquery实现简单的分页控件
2016/03/17 Javascript
js实现上传图片预览方法
2016/10/25 Javascript
javascript基础知识讲解
2017/01/11 Javascript
100多个基础常用JS函数和语法集合大全
2017/02/16 Javascript
javascript 中的try catch应用总结
2017/04/01 Javascript
JS检测是否可以访问公网服务器功能代码
2017/06/19 Javascript
jQuery响应滚动条事件功能示例
2017/10/14 jQuery
移动端效果之IndexList详解
2017/10/20 Javascript
javascript 原型与原型链的理解及实例分析
2019/11/23 Javascript
解决小程序无法触发SESSION问题
2020/02/03 Javascript
JavaScript 俄罗斯方块游戏实现方法与代码解释
2020/04/08 Javascript
vue 子组件和父组件传值的示例
2020/09/11 Javascript
[00:20]DOTA2荣耀之路7:-ah fu-抢盾
2018/05/31 DOTA
Python translator使用实例
2008/09/06 Python
Python守护进程(daemon)代码实例
2015/03/06 Python
Django数据库操作的实例(增删改查)
2017/09/04 Python
Python基于PyGraphics包实现图片截取功能的方法
2017/12/21 Python
Java及python正则表达式详解
2017/12/27 Python
pyqt5 删除layout中的所有widget方法
2019/06/25 Python
html5桌面通知(Web Notifications)实例解析
2014/07/07 HTML / CSS
Discard Protocol抛弃协议的作用是什么
2015/10/10 面试题
Unix如何添加新的用户
2014/08/20 面试题
大学生毕业自我鉴定
2013/11/06 职场文书
配件采购员岗位职责
2013/12/03 职场文书
村官工作鉴定评语
2014/01/27 职场文书
中文师范生自荐信
2014/01/30 职场文书
中学生国旗下讲话稿
2014/04/26 职场文书
公司授权委托书格式范文
2014/10/02 职场文书
千与千寻观后感
2015/06/04 职场文书
教你怎么用PyCharm为同一服务器配置多个python解释器
2021/05/31 Python
Golang中channel的原理解读(推荐)
2021/10/16 Golang
Android Rxjava3 使用场景详解
2022/04/07 Java/Android