移动端自适应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 相关文章推荐
JQUERY实现左侧TIPS滑进滑出效果示例
Jun 27 Javascript
js获取input标签的输入值实现代码
Aug 05 Javascript
jQuery选择器全集详解
Nov 24 Javascript
jQuery 中DOM 操作详解
Jan 13 Javascript
js实现Select列表各项上移和下移的方法
Aug 14 Javascript
基于jquery实现鼠标滚轮驱动的图片切换效果
Oct 26 Javascript
学习使用bootstrap3栅格系统
Apr 12 Javascript
基于Turn.js 实现翻书效果实例解析
Jun 20 Javascript
JS实现微信弹出搜索框 多条件查询功能
Dec 13 Javascript
vue的列表交错过渡实现代码示例
May 05 Javascript
jQuery实现视频展示效果
May 30 jQuery
详解JavaScript中的数据类型,以及检测数据类型的方法
Sep 17 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
js 分栏效果实现代码
2009/08/29 Javascript
有关DOM元素与事件的3个谜题
2010/11/11 Javascript
JavaScript动态调整TextArea高度的代码
2010/12/28 Javascript
服务器端的JavaScript脚本 Node.js 使用入门
2012/03/07 Javascript
juery框架写的弹窗效果适合新手
2013/11/27 Javascript
jquery操作复选框checkbox的方法汇总
2015/02/05 Javascript
node.js require() 源码解读
2015/12/13 Javascript
jQuery xml字符串的解析、读取及查找方法
2016/03/01 Javascript
javascript比较语义化版本号的实现代码
2016/09/09 Javascript
Jquery实时监听input value的实例
2017/01/26 Javascript
Bootstrap table右键功能实现方法
2017/02/20 Javascript
js实现下拉框效果(select)
2017/03/28 Javascript
深入浅出es6模板字符串
2017/08/26 Javascript
基于Particles.js制作超炫粒子动态背景效果(仿知乎)
2017/09/13 Javascript
最实用的JS数组函数整理
2017/12/05 Javascript
微信小程序实现分享到朋友圈功能
2018/07/19 Javascript
Vue中computed、methods与watch的区别总结
2019/04/10 Javascript
小程序数据通信方法大全(推荐)
2019/04/15 Javascript
微信小程序wxml列表渲染原理解析
2019/11/27 Javascript
微信小程序学习之自定义滚动弹窗
2020/12/20 Javascript
Python编码时应该注意的几个情况
2013/03/04 Python
Python实现信用卡系统(支持购物、转账、存取钱)
2016/06/24 Python
对python中执行DOS命令的3种方法总结
2018/05/12 Python
Python标准库shutil模块使用方法解析
2020/03/10 Python
python 下载文件的几种方法汇总
2021/01/06 Python
使用CSS3代码绘制可爱的Hello Kitty猫
2016/08/03 HTML / CSS
Solid & Striped官网:美国泳装品牌
2019/06/19 全球购物
夜大毕业自我鉴定
2013/10/11 职场文书
加拿大探亲邀请信
2014/01/28 职场文书
团结演讲稿范文
2014/05/23 职场文书
2014年体育工作总结
2014/11/24 职场文书
2016年“世界气象日”广播稿
2015/12/17 职场文书
2016简单的租房合同范本
2016/03/18 职场文书
总结几个非常实用的Python库
2021/06/26 Python
css filter和getUserMedia的联合使用
2022/02/24 HTML / CSS
了解Kubernetes中的Service和Endpoint
2022/04/01 Servers