溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

移動端頁面按手機屏幕分辨率自動縮放的js

發(fā)布時間:2020-07-27 11:13:25 來源:網(wǎng)絡(luò) 閱讀:1025 作者:蓓蕾心晴 欄目:開發(fā)技術(shù)
<script> 2     var phoneWidth = parseInt(window.screen.width); 3     var phoneHeight = parseInt(window.screen.height); 4     var phoneScale = phoneWidth/750;//除以的值按手機的物理分辨率 5     var ua = navigator.userAgent; 6     if (/Android (\d+\.\d+)/.test(ua)) { 7         var version = parseFloat(RegExp.$1); 8         // andriod 2.3 9         if (version > 2.3) {10             document.write('<meta name="viewport" content="width=device-width,initial-scale='+phoneScale+',minimum-scale='+phoneScale+',maximum-scale='+phoneScale+',user-scalable=no">');11             // andriod 2.3以上12         } else {13             document.write('<meta name="viewport" content="width=device-width,user-scalable=no">');14         }15         // 其他系統(tǒng)16     } else {17         document.write('<meta name="viewport" content="width=device-width, initial-scale='+phoneScale+',minimum-scale='+phoneScale+',maximum-scale ='+phoneScale +',user-scalable=no,">');18     }19 </script>

做手機端頁面最頭疼的就是物理分辨率和邏輯分辨率的轉(zhuǎn)換了,當(dāng)拿到設(shè)計圖的時候,圖基本都是按物理分辨率來設(shè)計的,一般常用的為640(iphone5/5s)、750(iphone6/6s),而谷歌等瀏覽器采用小手機模式瀏覽頁面的時候,上面的值為邏輯分辨率,調(diào)試的時候很難把控頁面樣式,在手機端的樣式也會因此大亂,在頁面頭部加入以上一段js之后,在手機端就可以正常顯示了,

var phoneScale = phoneWidth/750;

除以的為設(shè)計圖設(shè)計的頁面寬度,750是按iphone6來設(shè)計(根據(jù)自己使用需求來修改),即讓頁面的 放大比率=屏幕的邏輯分辨率/物理分辨率,從而達(dá)到適應(yīng)手機的效果。

(注意,有時候頁面加了這段代碼在調(diào)試的時候,切記刷新,刷新過后就會按手機縮放比例顯示)

概念解析:

 

phys.width:一般我們所指的寬度width即為phys.width,物理寬度(物理分辨率

 

device-width:又稱為css-width,設(shè)備寬度(邏輯分辨率

 

其中我們可以獲取phys.width通過document.documentElement.clientWidth;

而獲取css-width通過 window.screen.width獲取。

所以這里  phoneWidth邏輯分辨率 = parseInt(window.screen.width);

iphone6phys.width750px,而css-width375px

 

 

 

明白一個瀏覽器默認(rèn)行為。

 

試想,瀏覽器如果把電腦端的980px的網(wǎng)頁展現(xiàn)在寬度為750pxiphone6手機屏上,勢必會放不下,手機端橫向會出現(xiàn)滾動條,怎么阻止這種情況呢,很簡單,瀏覽器默認(rèn)一個虛擬窗口,不同瀏覽器有不同的虛擬窗口寬度的默認(rèn)值如:safari iphone980px;

 

opera:850px;

Andriod webkit:800px;

IE:974px;

然后會把這個980px虛擬窗口裝進(jìn)寬度為750pxiphone6中,當(dāng)然這樣的話必須縮放,這就是為什么在手機中展現(xiàn)電腦端頁面沒有出現(xiàn)橫向滾動條,而且字跡明顯變小的原因。

 

initial-scale='+phoneScale+',minimum-scale='+phoneScale+',maximum-scale='+phoneScale+'

這段代碼切記要指定 initial-scale=***,在安卓系統(tǒng)中,不指定默認(rèn)的nitial-scale=***,只指定最小和最大縮放值,也可以正常顯示,但是safari瀏覽器則會失效,對于寬度是100%的頁面, 則顯示為頁面的30%左右的寬。

 

target-densitydpi=device-dpi

 

WebKit內(nèi)核默認(rèn)按照160DPI來排版。假如設(shè)備真實DPI480,寬度是1080,在WebKit會按160DPI,360寬度來排版。排版結(jié)束后在放大到1080寬。

所以當(dāng)取window.innerwidth之類的值的時候,取的是WebKit實際排版寬度360,而不是1080.

target-densitydpi=device-dpi可以強制內(nèi)核以480DPI排版,使畫面更精細(xì),window.innerwidth也將為屏幕寬度1080.

WebKit從去年開始取消了對target-densitydpi的支持。(所以現(xiàn)在不建議寫該屬性了)

想實現(xiàn)target-densitydpi=device-dpi的效果有什么方法?提交此次補丁的WebKit開發(fā)者說可以用responsive p_w_picpaths  CSS device units來替代。

 

2017.02.20更新)

 

參考鏈接:http://www.cnblogs.com/wbxjiayou/p/5176815.html

                http://blog.csdn.net/fengri5566/article/details/9414599

相關(guān)鏈接:http://www.cnblogs.com/pigtail/archive/2013/03/15/2961631.html


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI