移動(dòng)端自適應(yīng)flexible.js的使用方法(不用三大框架,僅寫一個(gè)單html頁面使用)推薦
第一步:
下載 flexible.js,代碼如下,可以復(fù)制過去用
;(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('將根據(jù)已有的meta標(biāo)簽來設(shè)置縮放比例')
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下,對(duì)于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 {
// 其他設(shè)備下,仍舊使用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中引入
項(xiàng)目結(jié)構(gòu)

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <!-- 去掉meta,交給flexible.js自動(dòng)處理 --> <!-- <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 轉(zhuǎn)換
需要安裝 Easy LESS 插件,幫助我們把 less 轉(zhuǎn)成 css
由于用了less,事先定義了一個(gè)變量 @font-size-base: 75; 來保存標(biāo)注稿基準(zhǔn)字體大小,淘寶 flexible.js 是基于750px設(shè)計(jì)稿來的
,所以 @font-size-base 為 75;
然后 比如說你測量 height: 98px; 那么就使用 height: 98rem / @font-size-base; 進(jìn)行換算
@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;
}
}
第四步
看效果

以上所述是小編給大家介紹的移動(dòng)端自適應(yīng)flexible.js使用方法詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
深入理解JavaScript系列(30):設(shè)計(jì)模式之外觀模式詳解
這篇文章主要介紹了深入理解JavaScript系列(30):設(shè)計(jì)模式之外觀模式詳解,外觀模式(Facade)為子系統(tǒng)中的一組接口提供了一個(gè)一致的界面,此模塊定義了一個(gè)高層接口,這個(gè)接口值得這一子系統(tǒng)更加容易使用,需要的朋友可以參考下2015-03-03
淺談JavaScript的Polymer框架中的behaviors對(duì)象
這篇文章主要介紹了淺談JavaScript的Polymer框架中的behaviors對(duì)象,Polymer是由Google開發(fā)的Web UI相關(guān)框架,需要的朋友可以參考下2015-07-07
nodejs的require模塊(文件模塊/核心模塊)及路徑介紹
在nodejs中,模塊大概可以分為核心模塊和文件模塊,核心模塊是被編譯成二進(jìn)制代碼,引用的時(shí)候只需require表示符即可,文件模塊,則是指js文件、json文件或者是.node文件2013-01-01

