vue項(xiàng)目網(wǎng)頁(yè)自適應(yīng)等比例放大縮小實(shí)例代碼
同樣是,雖然標(biāo)題寫的vue項(xiàng)目適用,但其它前端框架應(yīng)該也可以。其它框架我沒什么經(jīng)驗(yàn),可以參考著看看,應(yīng)該適用。
本文章不涉及第三方插件,純js。
自適應(yīng)這個(gè)問題,老早以前就有一個(gè)解決方式,css中的%,比如height:100%; width:100%;給主容器賦予該樣式,那主容器就可以自適應(yīng)屏幕,但里面的內(nèi)容不會(huì),如果要里面的內(nèi)容也自適應(yīng),那里面也得寫%,但問題隨之而來,font-size呢?
%雖然現(xiàn)在依然有用,但現(xiàn)在的項(xiàng)目很多都有設(shè)計(jì)稿,比如我接觸比較多的數(shù)據(jù)大屏,這類網(wǎng)頁(yè),長(zhǎng)寬比是固定的,%無法解決字體自適應(yīng)的問題。熟悉rem的,可以用rem,這個(gè)單位類似于微信小程序的rpx,算是自適應(yīng)屬性,但我沒用過,不講,今天的主角不是它。
接下來就是正文了。在長(zhǎng)寬比固定的情況下,網(wǎng)頁(yè)自適應(yīng),其實(shí)就是將網(wǎng)頁(yè)等比例放大或者縮小。我們提出一個(gè) 設(shè)想,在網(wǎng)頁(yè)初始化的時(shí)候,正確地放大或者縮小網(wǎng)頁(yè),來適應(yīng)屏幕;并在瀏覽器顯示區(qū)域發(fā)生變化時(shí),修改放大或者縮小的比例,使網(wǎng)頁(yè)始終能夠適應(yīng)屏幕。
放大和縮小,有什么現(xiàn)有的方法或者樣式嗎?有, css中的 zoom 以及 scale(),淺講一下兩個(gè)樣式的不同之處:
zoom:
1. 使用該樣式的標(biāo)簽會(huì)等比例縮放。zoom:0.5 (縮放50%),zoom:2(放大兩倍)。
2. 縮放的基準(zhǔn)點(diǎn)在原容器的左上角(應(yīng)該沒記錯(cuò),想證實(shí)的可以自己試試),意思就是,使用zoom放大縮小,原容器的左上角作為原點(diǎn)不動(dòng),然后邊長(zhǎng)放大縮小。在數(shù)學(xué)里的話,差不多就是原點(diǎn)固定,然后在第四象限放大縮小。
3. 火狐firefox不支持。
scale():
1. 使用該樣式的標(biāo)簽也會(huì)放大縮小,不過它可以讓長(zhǎng)寬獨(dú)立放大縮小。transform: scale(2, 2); (放大兩倍),transform: scale(0.5, 2); (水平方向縮放50%,垂直方向放大2倍)。
2. 縮放的基準(zhǔn)點(diǎn)在原容器的中心,意思大概是以原容器中心為原點(diǎn),然后想一二三四象限擴(kuò)張火收縮。
3. 火狐firefox支持。
對(duì)比下來,scale()優(yōu)勢(shì)明顯,我們就用scale(),它是css3的屬性,我們不考慮什么兼容問題,現(xiàn)在還不支持css3的瀏覽器,我都不稀罕用。如果非要用zoom,也可以,因?yàn)榇a方面差不多。
既然上面的 設(shè)想 可以有方法實(shí)現(xiàn),現(xiàn)在就剩最后一個(gè)問題了,縮放多少呢?
場(chǎng)景假設(shè):我們以設(shè)計(jì)稿 1920px*1080px為例,但是現(xiàn)在我們的屏幕沒有1920*1080,或者瀏覽器沒有最大化,就占了屏幕的一半,這時(shí)候很可能瀏覽器長(zhǎng)寬比連16:9都不是,我們可以寬度做基準(zhǔn),高度來適應(yīng)寬度(高度為基準(zhǔn),寬度適應(yīng)高度也可以,看場(chǎng)景和具體需要)。設(shè)計(jì)稿的寬度是1920px,而瀏覽器可視寬度是 window.innerWidth,我們需要在瀏覽器可視范圍內(nèi)自適應(yīng)縮放容器,也就是在 window.innerWidth 的寬度中來顯示 1920px的東西,那我們的 縮放比例 就是 window.innerWidth / 1920。
所有問題都解決了,現(xiàn)在就來實(shí)現(xiàn)我們的設(shè)想。下面我以scale()為例了。
在網(wǎng)頁(yè)初始化的時(shí)候,正確地放大或者縮小網(wǎng)頁(yè),來適應(yīng)屏幕。翻譯:mounted() 的時(shí)候scale()主容器。
mounted() { var browerWidth = window.innerWidth; //瀏覽器可視寬度 var baseWidth = 1920; //設(shè)計(jì)稿寬度 var zoomValue = browerWidth / baseWidth; //縮放比例計(jì)算 document.getElementById("mainContainer").style.transform = "scale(" + zoomValue + "," + zoomValue + ")"; //mainContainer為主容器id }
在瀏覽器顯示區(qū)域發(fā)生變化時(shí),修改放大或者縮小的比例,使網(wǎng)頁(yè)始終能夠適應(yīng)屏幕。翻譯:窗口尺寸變化時(shí),重新計(jì)算縮放比例,并重新scale()主容器。
window.onresize = function () { var browerWidth = window.innerWidth; var baseWidth = 1920; var zoomValue = browerWidth / baseWidth; document.getElementById("mainContainer").style.transform = "scale(" + zoomValue + "," + zoomValue + ")"; }
整合一下:
mounted() { var browerWidth = window.innerWidth; //瀏覽器可視寬度 var baseWidth = 1920; //設(shè)計(jì)稿寬度 var zoomValue = browerWidth / baseWidth; //縮放比例計(jì)算 document.getElementById("mainContainer").style.transform = "scale(" + zoomValue + "," + zoomValue + ")"; //mainContainer為主容器id window.onresize = function () { //窗口尺寸變化時(shí),重新計(jì)算和縮放 browerWidth = window.innerWidth; zoomValue = browerWidth / baseWidth; document.getElementById("mainContainer").style.transform = "scale(" + zoomValue + "," + zoomValue + ")"; } }
到這里,自適應(yīng)的內(nèi)容已經(jīng)結(jié)束,但還不完美。如果顯示區(qū)域的比例不是16:9。兩種情況:
1. 寬度更大,高度為了適應(yīng)寬度,會(huì)導(dǎo)致垂直方向顯示不全,需要上下滾動(dòng)顯示。這個(gè)就改成以高度為基準(zhǔn)。上面的 場(chǎng)景假設(shè) 有提到。
2. 高度更大,或者使用了1的解決方法。因?yàn)轱@示區(qū)域不是16:9,而設(shè)計(jì)稿是16:9,總會(huì)有部分區(qū)域不屬于主容器,那這部分區(qū)域就是白色的很難看,像這樣:
這個(gè)問題其實(shí)就很簡(jiǎn)單了,我們給主容器再套一個(gè)父容器,父容器來設(shè)置背景色填充留白。父容器的樣式這么寫(自適應(yīng)窗口,并讓子元素水平垂直居中,留白部分用背景色填充):
#app { width: 100vw; height: 100vh; background: rgb(24, 25, 35); display: flex; align-items: center; justify-content: center; }
最終效果圖:
總結(jié)
到此這篇關(guān)于vue項(xiàng)目網(wǎng)頁(yè)自適應(yīng)等比例放大縮小的文章就介紹到這了,更多相關(guān)vue網(wǎng)頁(yè)自適應(yīng)等比例放大縮小內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue Spa切換頁(yè)面時(shí)更改標(biāo)題的實(shí)例代碼
本篇文章主要介紹了Vue Spa切換頁(yè)面時(shí)更改標(biāo)題的實(shí)例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-07-07vue項(xiàng)目打包部署_nginx代理訪問方法詳解
今天小編就為大家分享一篇vue項(xiàng)目打包部署_nginx代理訪問方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-09-09vue如何實(shí)現(xiàn)表單多選并且獲取其中的值
這篇文章主要介紹了vue如何實(shí)現(xiàn)表單多選并且獲取其中的值問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07vue實(shí)現(xiàn)前端按鈕組件權(quán)限管理
這篇文章主要為大家介紹了vue實(shí)現(xiàn)前端按鈕組件權(quán)限管理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09vue實(shí)現(xiàn)簡(jiǎn)易的雙向數(shù)據(jù)綁定
這篇文章主要介紹了vue如何實(shí)現(xiàn)簡(jiǎn)易的雙向數(shù)據(jù)綁定,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下2020-12-12