移動(dòng)端自適應(yīng)flexible.js的使用方法(不用三大框架,僅寫(xiě)一個(gè)單html頁(yè)面使用)推薦
第一步:
下載 flexible.js,代碼如下,可以復(fù)制過(guò)去用
;(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)簽來(lái)設(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">首頁(yè)</div> </div> </body> </html>
第三步
寫(xiě) less 轉(zhuǎn)換
需要安裝 Easy LESS 插件,幫助我們把 less 轉(zhuǎn)成 css
由于用了less,事先定義了一個(gè)變量 @font-size-base: 75; 來(lái)保存標(biāo)注稿基準(zhǔn)字體大小,淘寶 flexible.js 是基于750px設(shè)計(jì)稿來(lái)的
,所以 @font-size-base 為 75;
然后 比如說(shuō)你測(cè)量 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ì)大家有所幫助,如果大家有任何疑問(wèn)請(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-03JavaScript入門(mén)教程(11) js事件處理
事件處理是對(duì)象化編程的一個(gè)很重要的環(huán)節(jié),沒(méi)有了事件處理,程序就會(huì)變得很死,缺乏靈活性。2009-01-01淺談JavaScript的Polymer框架中的behaviors對(duì)象
這篇文章主要介紹了淺談JavaScript的Polymer框架中的behaviors對(duì)象,Polymer是由Google開(kāi)發(fā)的Web UI相關(guān)框架,需要的朋友可以參考下2015-07-07nodejs的require模塊(文件模塊/核心模塊)及路徑介紹
在nodejs中,模塊大概可以分為核心模塊和文件模塊,核心模塊是被編譯成二進(jìn)制代碼,引用的時(shí)候只需require表示符即可,文件模塊,則是指js文件、json文件或者是.node文件2013-01-01