最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

uniapp寬屏開發(fā)PC端方案及衍生問題解決辦法

 更新時間:2024年03月21日 11:19:02   作者:迷途執(zhí)曉  
在uniapp中進行寬屏開發(fā),主要是指在電腦端(PC端)使用寬屏顯示效果進行應用的開發(fā),這篇文章主要給大家介紹了關(guān)于uniapp寬屏開發(fā)PC端方案及衍生問題解決辦法,需要的朋友可以參考下

需要在uniapp的pages.json文件中配置

"rpxCalcMaxDeviceWidth": 3840, 
// rpx 計算所支持的最大設(shè)備寬度,單位 px,默認值為 960

 "rpxCalcBaseDeviceWidth": 3840, 
// rpx 計算使用的基準設(shè)備寬度,設(shè)備實際寬度超出 rpx 計算所支持的最大設(shè)備寬度時將按基準寬度計算,單位 px,默認值為 375

  "rpxCalcIncludeWidth": 750 
// rpx 計算特殊處理的值,始終按實際的設(shè)備寬度計算,單位 rpx,默認值為 750

正常電腦沒有高于3840像素寬的,這個程度就足以;

在使用時,只要正常的按照1920/750 = 2.56的比例,在HBuliderX中進行比例配置,使用時進行px轉(zhuǎn)化rpx即可。

調(diào)整完rpx后發(fā)現(xiàn)的問題:

問題一、pc端字體過大

問題描述:

但是在大屏中uniapp的rpx卻衍生出一個問題,這樣會有一個問題,就是當前的rpx是以3840rpx或以下(符合當前屏幕寬度)為基準分成750份處理的,以上任何一個屬性都無法單獨調(diào)整字體大小,這導致哪怕是1rpx都過于龐大;

直接使用標準單位px的問題,一是無法以屏幕寬度自動調(diào)整字體大小,二是12px已經(jīng)是瀏覽器能解析的最小字體了,但是12px以常規(guī)的電腦屏幕1920像素來做基準,還是過于大了,實際開發(fā)中,應該需要更小的字體,我們?nèi)缤黄七@個12px的極限,使用比12px更小的字體大小?

眾所周知,在傳統(tǒng)js中,最小的文字大小是12px,再小就只能使用縮小屬性(transform:scale)進行調(diào)整,而如果整個頁面都使用縮小屬性,一是無法精確把控字體大小,二是只是字體變小,字體元素本身卻沒有任何改變,依舊以原大小進行占位,這會導致布局混亂。

解決:

我苦求答案,最終在uniapp的中發(fā)現(xiàn)了有一個及其有用卻又容易被忽視的組件

<page-meta></page-meta>

 其屬性中有一個為:

因此,借助這個屬性,便可以如此操作:

<page-meta style="display: block;" root-font-size="1px"></page-meta>

注意:page-meta元素只能作為根元素使用,衍生出的PC與移動端同時適配的問題下面有解決

更多page-meta組件的信息,可點擊查看官方文檔

問題二、字體大小固定:

 接著又衍生出了第二個問題,雖然這樣解決了12px最小的問題,這樣的大小是以1px為基準進行調(diào)整的,這就失去了rpx根據(jù)屏幕寬度自動放大縮小的特性,px單位大小是固定死的。

解決:

思路:參考rem處理字體大小的方式,在main.js文件中,配置一個全局函數(shù),由于是在main.js中配置,所以在每次進入頁面的時候都會觸發(fā)此函數(shù)。

代碼:

//在main.js中配置
function sizeFun() {
	// 寬屏字體大小適配
	let n = 1920;
	// 循環(huán)運算判斷,共9次,最小屏幕192,最大屏幕3640,以下,n是當前預設(shè)屏幕寬,i是循環(huán)計算次數(shù)
	for (let i = 0; i < 9; i++) {
		// 如果當前屏幕寬就是設(shè)計稿屏幕(1920),就不進行縮放
		if (uni.getSystemInfoSync().windowWidth == n) {
			return 1;
		}

		// 如果當前屏幕寬小于1920
		if (uni.getSystemInfoSync().windowWidth < n) {
			// 那就進入循環(huán),預設(shè)屏幕大小減去192,再判斷當前屏幕是否大于1920-192
			n -= 192;
			// 如果當前屏幕大于預設(shè)屏幕,就賦值
			if (uni.getSystemInfoSync().windowWidth > n) {
				// i+1:因為i從零開始
				// 10-i+1:因為要算出當前是倒數(shù)第幾次循環(huán)
				// 10-i+1/10:因為要取1以下的小數(shù)
				return (10 - (i + 1)) / 10;
			}
		}

		// 如果當前屏幕寬大于1920
		if (uni.getSystemInfoSync().windowWidth > n) {
			// 那就進入循環(huán),預設(shè)屏幕大小加上192,再判斷當前屏幕是否大于1920+192
			n += 192;
			// 如果當前屏幕小于預設(shè)屏幕,就賦值
			if (uni.getSystemInfoSync().windowWidth < n) {
				// i+1:因為i從零開始
				//(i+1)/10:因為要算出當前是第幾次循環(huán),得出小數(shù),
				// 1+i+1/10:取1以上的小數(shù)
				// 結(jié)束循環(huán)
				return 1 + ((i + 1) / 10);
			}
		}
	}
}

//配置到全局方便使用
Vue.prototype.$pageSize = sizeFun();

使用時:

<!-- 每次進入頁面時都會判斷當前頁面寬度,并給出字體大小比例適配 -->
<page-meta style="display: block;" :root-font-size="$pageSize+'px'"><page-meta>

問題三、如何同時適配PC與移動端?

解決:

思路:由于PC的根元素必須是<page-meta></page-meta>因此要么pc和移動端都在page-meta的規(guī)則下使用v-if進行判斷渲染,判斷當前的設(shè)備是移動端或pc端,然后渲染對應的內(nèi)容。要么就把移動端PC端文件分開,先判斷,后通過uni.reLaunch進行跳轉(zhuǎn)對應頁面。

代碼:

//main.js文件中配置
// 是不是pc,通過判斷進入對應頁面
function IsPC(path) {
	const userAgentInfo = navigator.userAgent;
	const Agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"];
	let flag = true;
	for (let v = 0; v < Agents.length; v++) {
		if (userAgentInfo.indexOf(Agents[v]) > 0) {
			flag = false;
			break;
		}
	}
	
	if (flag) {
        //在這里獲取參數(shù),跳轉(zhuǎn)的時候把當前頁面的參數(shù)一并帶過去
		let paraString = window.location.href;
		let pathEnd = paraString.split("?")[1];
		console.log(path);
		//true為PC端,false為手機端
		uni.reLaunch({
			url: pathEnd ? `${path}?${pathEnd}` : `${path}`
		});
		
		return false;
	}
}

// 是不是移動端,通過判斷進入對應頁面
function IsPE(path) {
	const userAgentInfo = navigator.userAgent;
	const Agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"];
	let flag = true;
	for (let v = 0; v < Agents.length; v++) {
		if (userAgentInfo.indexOf(Agents[v]) > 0) {
			flag = false;
			break;
		}
	}

	if (!flag) {
    //在這里獲取參數(shù),跳轉(zhuǎn)的時候把當前頁面的參數(shù)一并帶過去
		let paraString = window.location.href;
		let pathEnd = paraString.split("?")[1];
		//true為PC端,false為手機端
		uni.reLaunch({
			url: pathEnd ? `${path}?${pathEnd}` : `${path}`
		});
		return false;
	}
}

//掛載全局方便使用
Vue.prototype.IsPC = IsPC;
Vue.prototype.IsPE = IsPE;
//使用時(在移動端頁面判斷是否為pc端):
//判斷是否為pc端設(shè)備,參數(shù)為如果是pc端,要跳轉(zhuǎn)的pc端頁面路徑,加上/pages
this.isPC("/pages/pcindex/pcindex");


//在pc端頁面使用,判斷是否為移動端
//判斷是否為移動端設(shè)備,參數(shù)為如果是移動端,要跳轉(zhuǎn)的移動端頁面路徑,加上/pages
this.isPE("/pages/index/index");

注意:在進行移動端與pc端的同步開發(fā)時,如果需要任何頁面根據(jù)設(shè)備跳轉(zhuǎn)對應頁面,就盡量保證兩個端的url參數(shù)相同,或盡量不使用url傳參,否則需要自行對頁面進行單獨處理。

總結(jié)

到此這篇關(guān)于uniapp寬屏開發(fā)PC端方案及衍生問題解決辦法的文章就介紹到這了,更多相關(guān)uniapp寬屏開發(fā)PC端內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue?和?Django?實現(xiàn)?Token?身份驗證的流程

    Vue?和?Django?實現(xiàn)?Token?身份驗證的流程

    這篇文章主要介紹了Vue?和?Django?實現(xiàn)?Token?身份驗證?,Vue.js?和?Django?編寫的前后端項目中,實現(xiàn)了基于?Token?的身份驗證機制,其他前后端框架的?Token?實現(xiàn)原理與本文一致,需要的朋友可以參考下
    2022-08-08
  • 詳解vue+webpack+express中間件接口使用

    詳解vue+webpack+express中間件接口使用

    這篇文章主要介紹了詳解vue+webpack+express中間件接口使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • 基于Vue3實現(xiàn)前端埋點上報插件并打包發(fā)布到npm的詳細過程

    基于Vue3實現(xiàn)前端埋點上報插件并打包發(fā)布到npm的詳細過程

    這篇文章主要介紹了基于Vue3實現(xiàn)一個前端埋點上報插件并打包發(fā)布到npm,本項目采用pnpm進行Monorepo環(huán)境搭建,因為未來這個項目可能會加入更多的工具包,需要的朋友可以參考下
    2022-10-10
  • 利用Vue實現(xiàn)卡牌翻轉(zhuǎn)的特效

    利用Vue實現(xiàn)卡牌翻轉(zhuǎn)的特效

    這篇文章主要介紹了如何利用Vue實現(xiàn)一個春節(jié)抽??撁妫捎昧丝ㄅ品D(zhuǎn)的形式。文中的實現(xiàn)方法講解詳細,快跟隨小編一起學習一下吧
    2022-02-02
  • Vue3如何處理異步任務輪詢

    Vue3如何處理異步任務輪詢

    在許多應用程序中,我們經(jīng)常需要執(zhí)行定期的異步任務輪詢,本文就介紹了Vue3如何處理異步任務輪詢,感興趣的可以了解一下
    2023-05-05
  • Vue3+Element Plus進行圖片加載優(yōu)化全攻略

    Vue3+Element Plus進行圖片加載優(yōu)化全攻略

    在Web開發(fā)中,未優(yōu)化的圖片會導致很多問題,本文將為大家介紹一下Vue3如何通過Element Plus進行圖片加載優(yōu)化,希望對大家有所幫助
    2025-03-03
  • vue data中如何獲取使用store中的變量

    vue data中如何獲取使用store中的變量

    這篇文章主要介紹了vue data中如何獲取使用store中的變量,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • vue .js綁定checkbox并獲取、改變選中狀態(tài)的實例

    vue .js綁定checkbox并獲取、改變選中狀態(tài)的實例

    今天小編就為大家分享一篇vue .js綁定checkbox并獲取、改變選中狀態(tài)的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • vue/Element?UI實現(xiàn)Element?UI?el-dialog自由拖動功能實現(xiàn)

    vue/Element?UI實現(xiàn)Element?UI?el-dialog自由拖動功能實現(xiàn)

    最近工作上需要在el-dialog基礎(chǔ)上進行些功能的改動,下面這篇文章主要給大家介紹了關(guān)于vue/Element?UI實現(xiàn)Element?UI?el-dialog自由拖動功能實現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • Element-plus使用中遇到的問題小結(jié)

    Element-plus使用中遇到的問題小結(jié)

    表格數(shù)據(jù)是websocket通信獲取的數(shù)據(jù),首次獲取20條數(shù)據(jù),以后新增訂閱獲取一條,新增一條則向上滑動顯示最新數(shù)據(jù),本文給大家介紹Element-plus使用中遇到的問題小結(jié),感興趣的朋友跟隨小編一起看看吧
    2024-04-04

最新評論

景德镇市| 白城市| 武清区| 增城市| 应城市| 平顶山市| 泰来县| 基隆市| 泾川县| 遂平县| 阳信县| 阿坝| 沙雅县| 图片| 永修县| 通道| 瑞昌市| 即墨市| 南平市| 南岸区| 岳阳县| 都江堰市| 九龙坡区| 楚雄市| 荔浦县| 兴仁县| 昌都县| 渝北区| 邹平县| 西城区| 香港 | 黔东| 乌兰县| 涟源市| 息烽县| 泗阳县| 湘阴县| 常德市| 沿河| 东方市| 克拉玛依市|