移动端自适应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 LigerUI 插件介绍及使用之ligerDrag和ligerResizable示例代码打包
Apr 06 Javascript
在js中判断checkboxlist(.net控件客户端id)是否有选中
Apr 11 Javascript
JS 排序输出实现table行号自增前端动态生成的tr
Aug 13 Javascript
JavaScript+CSS实现仿Mootools竖排弹性动画菜单效果
Oct 14 Javascript
js改变html的原有内容实现方法
Oct 05 Javascript
关于Iframe父页面与子页面之间的相互调用
Nov 22 Javascript
Bootstrap框架安装使用详解
Jan 21 Javascript
微信小程序页面跳转功能之从列表的item项跳转到下一个页面的方法
Nov 27 Javascript
layui问题之模拟select点击事件的实例讲解
Aug 15 Javascript
微信小程序使用Vant Weapp组件库的方法步骤
Aug 01 Javascript
vue element upload实现图片本地预览
Aug 20 Javascript
Vue.js 实现地址管理页面思路详解(地址添加、编辑、删除和设置默认地址)
Dec 11 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
PHP 5.3新特性命名空间规则解析及高级功能
2010/03/11 PHP
PHP、Java des加密解密实例
2015/04/27 PHP
yii2.0框架数据库操作简单示例【添加,修改,删除,查询,打印等】
2020/04/13 PHP
php解析非标准json、非规范json的方式实例
2020/12/10 PHP
腾讯与新浪的通过IP地址获取当前地理位置(省份)的接口
2010/07/26 Javascript
基于jquery的防止大图片撑破页面的实现代码(立即缩放)
2011/10/24 Javascript
js实现双向链表互联网机顶盒实战应用实现
2011/10/28 Javascript
jQuery 中$(this).index与$.each的使用指南
2014/11/20 Javascript
js实现表单Radio切换效果的方法
2015/08/17 Javascript
Javascript技术栈中的四种依赖注入小结
2016/02/27 Javascript
[原创]SyntaxHighlighter自动识别并加载脚本语言
2017/02/07 Javascript
vue2.x select2 指令封装详解
2017/10/12 Javascript
js实现把时间戳转换为yyyy-MM-dd hh:mm 格式(es6语法)
2017/12/28 Javascript
JavaScript事件委托原理与用法实例分析
2018/06/07 Javascript
解决vue数组中对象属性变化页面不渲染问题
2018/08/09 Javascript
Javascript模拟实现new原理解析
2020/03/03 Javascript
详解Nuxt内导航栏的两种实现方式
2020/04/16 Javascript
[00:59]PWL开团时刻DAY7——我在赶
2020/11/06 DOTA
使用py2exe在Windows下将Python程序转为exe文件
2016/03/04 Python
python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE方法
2017/05/24 Python
完美解决在oj中Python的循环输入问题
2018/06/25 Python
python爬虫获取小区经纬度以及结构化地址
2018/12/30 Python
python中while和for的区别总结
2019/06/28 Python
Django forms表单 select下拉框的传值实例
2019/07/19 Python
Keras中 ImageDataGenerator函数的参数用法
2020/07/03 Python
python 爬虫如何实现百度翻译
2020/11/16 Python
css3针对移动端卡顿问题的解决(动画性能优化)
2020/02/14 HTML / CSS
李维斯德国官方网上商店:Levi’s德国
2016/09/10 全球购物
迪卡侬中国官网:Decathlon中国
2020/08/10 全球购物
财务会计实习报告体会
2013/12/20 职场文书
2014教师教育实践活动对照检查材料思想汇报
2014/09/21 职场文书
物价局领导班子四风问题整改措施
2014/10/26 职场文书
2015年小学中秋节活动总结
2015/03/23 职场文书
2015年小学二年级班主任工作总结
2015/05/21 职场文书
python实现ROA算子边缘检测算法
2021/04/05 Python
mysql使用 not int 子查询隐含陷阱
2022/04/12 MySQL