欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-11-09 12:17:46
第一步: 下载 flexible.js,代码如下,可以复制过去用 ;(function(win, lib) { var doc = win.document...

第一步:

下载 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使用方法详解整合,希望对大家有所帮助