国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

前端大屏常用的幾種適配方案

這篇具有很好參考價(jià)值的文章主要介紹了前端大屏常用的幾種適配方案。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

方 案 實(shí)現(xiàn)方式 優(yōu)點(diǎn) 缺點(diǎn)
vm vh 1.按照設(shè)計(jì)稿的尺寸,將px按比例計(jì)算轉(zhuǎn)為vw和vh 1.可以動(dòng)態(tài)計(jì)算圖表的寬高,字體等,靈活性較高 2.當(dāng)屏幕比例跟 ui 稿不一致時(shí),不會(huì)出現(xiàn)兩邊留白情況 1.每個(gè)圖表都需要單獨(dú)做字體、間距、位移的適配,比較麻煩
scale 1.通過(guò) scale 屬性,根據(jù)屏幕大小,對(duì)圖表進(jìn)行整體的等比縮放 1.代碼量少,適配簡(jiǎn)單2.一次處理后不需要在各個(gè)圖表中再去單獨(dú)適配 3.文字,圖片等大小均能自動(dòng)適配 1.因?yàn)槭歉鶕?jù) ui 稿等比縮放,當(dāng)大屏跟 ui 稿的比例不一樣時(shí),會(huì)出現(xiàn)周邊留白情況2.當(dāng)縮放比例過(guò)大時(shí)候,字體會(huì)有一點(diǎn)點(diǎn)模糊,就一點(diǎn)點(diǎn)3.當(dāng)縮放比例過(guò)大時(shí)候,事件熱區(qū)會(huì)偏移。
插件v-scale-screen 是使用 css 屬性 transform 實(shí)現(xiàn)縮放效果的一個(gè)大屏自適應(yīng)組件,通過(guò) scale 進(jìn)行等比例計(jì)算,達(dá)到等比例縮放的效果 可以通過(guò)api調(diào)整原稿的寬高

方案一:vw vh

1.當(dāng)屏幕正好為16:9的時(shí)候前端大屏適配方案,前端,javascript,vue.js,大屏端
2.當(dāng)屏幕的尺寸比例大于 16:9 (左右拉長(zhǎng))
前端大屏適配方案,前端,javascript,vue.js,大屏端
3.當(dāng)屏幕的尺寸比例小于 16:9 時(shí)(左右變窄或者上下拉高)

前端大屏適配方案,前端,javascript,vue.js,大屏端
實(shí)現(xiàn)方法:
css 方案 - sass
utils.scss

// 使用 scss 的 math 函數(shù),https://sass-lang.com/documentation/breaking-changes/slash-div
@use "sass:math";
 
// 默認(rèn)設(shè)計(jì)稿的寬度
$designWidth: 1920;
// 默認(rèn)設(shè)計(jì)稿的高度
$designHeight: 1080;
 
// px 轉(zhuǎn)為 vw 的函數(shù)
@function vw($px) {
  @return math.div($px, $designWidth) * 100vw;
}       
 
// px 轉(zhuǎn)為 vh 的函數(shù)
@function vh($px) {
  @return math.div($px, $designHeight) * 100vh;
}
復(fù)制代碼

路徑配置只需在vue.config.js里配置一下utils.scss的路徑,就可以全局使用了
vue.config.js

module.exports = {
	css: {
		loaderOptions: {
			sass: {
				prependData: `@import "@/assets/css/utils.scss";`
			}
		}
	},
}.vue 中使用
<template>
    <div class="box">   
    </div>
</template>
 
<script>
export default{
    name: "Box",
}
</script>
 
<style lang="scss" scoped="scoped">
/* 
 直接使用 vw 和 vh 函數(shù),將像素值傳進(jìn)去,得到的就是具體的 vw vh 單位   
 */
.box{
    width: vw(300);
    height: vh(100);
    font-size: vh(16);
    background-color: black;
    margin-left: vw(10);
    margin-top: vh(10);
    border: vh(2) solid red;
}
</style>

css 方案 - less

utils.less
@charset "utf-8";
// 默認(rèn)設(shè)計(jì)稿的寬度
@designWidth: 1920;
// 默認(rèn)設(shè)計(jì)稿的高度
@designHeight: 1080;
 
.px2vw(@name, @px) {
  @{name}: (@px / @designWidth) * 100vw;
}
 
.px2vh(@name, @px) {
  @{name}: (@px / @designHeight) * 100vh;
}
 
.px2font(@px) {
  font-size: (@px / @designWidth) * 100vw;
}

路徑配置在vue.config.js里配置一下utils.less
<style lang="less" scoped="scoped">
/* 
 直接使用 vw 和 vh 函數(shù),將像素值傳進(jìn)去,得到的就是具體的 vw vh單位   
 */
.box{
    .px2vw(width, 300);
    .px2vh(height, 100);
    .px2font(16);
    .px2vw(margin-left, 300);
    .px2vh(margin-top, 100);
    background-color: black;
}
</style>

定義 js 樣式處理函數(shù)
// 定義設(shè)計(jì)稿的寬高
const designWidth = 1920;
const designHeight = 1080;
 
// px轉(zhuǎn)vw
export const px2vw = (_px) => {
  return (_px * 100.0) / designWidth + 'vw';
};
 
export const px2vh = (_px) => {
  return (_px * 100.0) / designHeight + 'vh';
};
 
export const px2font = (_px) => {
  return (_px * 100.0) / designWidth + 'vw';
};

屏幕變化后,圖表自動(dòng)調(diào)整
這種使用方式有個(gè)弊端,就是屏幕尺寸發(fā)生變化后,需要手動(dòng)刷新一下才能完成自適應(yīng)調(diào)整

為了解決這個(gè)問(wèn)題,你需要在各個(gè)圖表中監(jiān)聽(tīng)頁(yè)面尺寸變化,重新調(diào)整圖表,在 vue 項(xiàng)目中,也可以借助element-resize-detector,最好封裝個(gè) resize 的指令,在各圖表中就只要使用該指令就可以了,畢竟作為程序員,能偷懶就偷懶
解決方案一

  1. 安裝 element-resize-detector
npm install element-resize-detector --save
  1. 封裝成自定義指令使用
// directive.js
import * as ECharts from "echarts";
import elementResizeDetectorMaker from "element-resize-detector";
import Vue from "vue";
const HANDLER = "_vue_resize_handler";
function bind(el, binding) {
  el[HANDLER] = binding.value
    ? binding.value
    : () => {
        let chart = ECharts.getInstanceByDom(el);
        if (!chart) {
          return;
        }
        chart.resize();
      };
  // 監(jiān)聽(tīng)綁定的div大小變化,更新 echarts 大小
  elementResizeDetectorMaker().listenTo(el, el[HANDLER]);
}
function unbind(el) {
  // window.removeEventListener("resize", el[HANDLER]);
  elementResizeDetectorMaker().removeListener(el, el[HANDLER]);
  delete el[HANDLER];
}
// 自定義指令:v-chart-resize 示例:v-chart-resize="fn"
Vue.directive("chart-resize", { bind, unbind });
  1. main.js 中引入

import '@/directive/directive';
  1. html 代碼中使用
<template>
  <div class="linechart">
    <div ref="chart" v-chart-resize class="chart"></div>
  </div>
</template>

這里要注意的是,圖表中如果需要 tab 切換動(dòng)態(tài)更新圖表數(shù)據(jù),在更新數(shù)據(jù)時(shí)一定不要用 echarts 的 dispose 方法先將圖表移除,再重新繪制,因?yàn)?resize 指令中掛載到的圖表實(shí)例還是舊的,就監(jiān)聽(tīng)不到新的 chart 元素的 resize 了,更新數(shù)據(jù)只需要用 chart 的 setOption 方法重新設(shè)置配置項(xiàng)即可。
解決方案二
1.在echarts中可以echarts.init(chatDom).resize()來(lái)解決寬高的自適應(yīng)問(wèn)題

		let chatDom = document.getElementById('main');
		let myChart = this.$echarts.init(chatDom);

		//根據(jù)父盒子的尺寸調(diào)整echarts的大小
		setTimeout(() => {
			window.addEventListener('resize', () => {
				this.$echarts.init(chatDom).resize();
			});
		}, 20);

2.在DataV中可以添加key來(lái)解決

<dv-water-level-pond :config="config2" :key="key" ref="pie2" />
data(){ 
   return {
   key: 1
   	}
  },
  	mounted() {
		this.pieOutlineFunc();
		},
  	methods: {
		pieOutlineFunc() {
			var _this = this;
			window.addEventListener('resize', function (e) {
				_this.$nextTick(() => {
					console.log(_this.$refs.pie2);
					_this.key++;
				});
			});
		}
	}

方案二:csale

通過(guò) css 的 scale 屬性,根據(jù)屏幕大小,用js監(jiān)測(cè)屏幕的大小變化對(duì)圖表進(jìn)行整體的等比縮放,從而達(dá)到自適應(yīng)效果
當(dāng)屏幕的尺寸比例剛好是 16:9 時(shí),頁(yè)面能剛好全屏展示,內(nèi)容占滿(mǎn)顯示器
前端大屏適配方案,前端,javascript,vue.js,大屏端
當(dāng)屏幕尺寸比例大于 16:9 時(shí),上下左右留白,左右占滿(mǎn)并居中,顯示比例保持 16:9

前端大屏適配方案,前端,javascript,vue.js,大屏端
當(dāng)屏幕尺寸比例大于 16:9 時(shí),頁(yè)面左右留白,上下占滿(mǎn)并居中,顯示比例保持 16:9
前端大屏適配方案,前端,javascript,vue.js,大屏端
上代碼
html

<template>
	<div class="screen-root">
		<div class="screen" id="screen">
			<div class="div1">
				<h1>11111111111</h1>
			</div>
			<div class="div2">
				<h1>2222222222</h1>
			</div>
			<div class="div3">
				<h1>3333333333</h1>
			</div>
		</div>
	</div>
</template>

js

<script>
export default {
	mounted() {
		// 初始化自適應(yīng)  ----在剛顯示的時(shí)候就開(kāi)始適配一次
		this.handleScreenAuto();
		// 綁定自適應(yīng)函數(shù)   ---防止瀏覽器欄變化后不再適配
		window.onresize = () => this.handleScreenAuto();
	},
	deleted() {
		window.onresize = null;
	},

	methods: {
		// 數(shù)據(jù)大屏自適應(yīng)函數(shù)
		handleScreenAuto() {
			const designDraftWidth = 1920; //設(shè)計(jì)稿的寬度
			const designDraftHeight = 1080; //設(shè)計(jì)稿的高度
			// 根據(jù)屏幕的變化適配的比例
			const scale =
				document.documentElement.clientWidth / document.documentElement.clientHeight <
				designDraftWidth / designDraftHeight
					? document.documentElement.clientWidth / designDraftWidth
					: document.documentElement.clientHeight / designDraftHeight;
			// 縮放比例
			document.querySelector('#screen').style.transform = `scale(${scale}) translate(-50%,-50%)`;
			return 1;
		}
	}
};
</script>

css

<style lang="scss" scoped>
/*
  除了設(shè)計(jì)稿的寬高是根據(jù)您自己的設(shè)計(jì)稿決定以外,其他復(fù)制粘貼就完事
*/
h1 {
	color: red;
	font-size: 50px;
}
.screen-root {
	height: 100vh;
	width: 100vw;
	.screen {
		display: inline-block;
		width: 1920px; //設(shè)計(jì)稿的寬度
		height: 1080px; //設(shè)計(jì)稿的高度
		transform-origin: 0 0;
		position: absolute;
		left: 50%;
		top: 50%;
		border: 2px solid rgb(31, 210, 145);
		box-sizing: border-box;
		display: flex;
		.div1 {
			background-color: #fff;
			height: 100%;
			text-align: center;
			flex: 0 1 30%;
		}
		.div2 {
			background-color: rgb(133, 14, 14);
			height: 100%;
			text-align: center;
			flex: 0 1 40%;
		}
		.div3 {
			background-color: rgb(61, 6, 188);
			height: 100%;
			text-align: center;
			flex: 0 1 30%;
		}
	}
}
</style>

方案三:插件v-scale-screen

它其實(shí)也是通過(guò) scale 進(jìn)行等比例計(jì)算放大和縮小的,和方案二的原理是一樣的,還可以通過(guò)api調(diào)整樣式,源碼地址和對(duì)應(yīng)的API
前端大屏適配方案,前端,javascript,vue.js,大屏端
使用方法:
1.vue2請(qǐng)使用v-scale-screen@1.0.0版本,vue3請(qǐng)使用v-scale-screen@2.0.0版本

npm install v-scale-screen@1.0.0 -save
# or
yarn add v-scale-screen

2.使用-vue2中使用插件導(dǎo)入,vue3以組件導(dǎo)入文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-786383.html

vue2
// main.js
import VScaleScreen from 'v-scale-screen'
Vue.use(VScaleScreen)
組件內(nèi)使用
//html
<v-scale-screen width="1920" height="1080" :boxStyle="boxStyle">
  <div>
    <v-chart>....</v-chart>
    <v-chart>....</v-chart>
    <v-chart>....</v-chart>
    <v-chart>....</v-chart>
    <v-chart>....</v-chart>
  </div>
</v-scale-screen>
//js
	data() {
		return {
			boxStyle: {
				backgroundColor: 'green'
			},
		}
vue3
<v-scale-screen width="1920" height="1080">
  <div>
    <v-chart>....</v-chart>
    <v-chart>....</v-chart>
    <v-chart>....</v-chart>
    <v-chart>....</v-chart>
    <v-chart>....</v-chart>
  </div>
</v-scale-screen>
<script>
import VScaleScreen from 'v-scale-screen'
export default {
  components:{
    VScaleScreen
  }
}
</script>

  1. vue2演示地址
  2. vue3演示地址

到了這里,關(guān)于前端大屏常用的幾種適配方案的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 前端大屏可視化適配方案(通用模板,快速上手)

    在日常前端開(kāi)發(fā)中,大屏項(xiàng)目是每個(gè)前端開(kāi)發(fā)者必備技能,但是目前設(shè)備尺寸大小和分辨率都不相同,所以大屏適配成了一個(gè)頭疼的問(wèn)題??吹骄W(wǎng)上的實(shí)現(xiàn)方案有rem,flexible,zoom,百分比,總感覺(jué)沒(méi)那么完美,于是自己研究了一下也借鑒了網(wǎng)上大神的方法,實(shí)現(xiàn)了一下這三種

    2024年02月12日
    瀏覽(27)
  • 前端開(kāi)發(fā)中,定位bug的幾種常用方法

    前端開(kāi)發(fā)中,定位bug的幾種常用方法

    目錄 第一章 前言 第二章 解決bug的方法 2.1 百度 2.2 有道翻譯 2.3?debugger 2.4 console.log 日志打印 2.5 請(qǐng)求體是否攜帶參數(shù) 2.6 注釋頁(yè)面渲染代碼 2.7 其他 第三章 尾聲 備注:該文章只是本人在工作/學(xué)習(xí)中常用的幾種方法,如果有不對(duì)大家“胃口”的地方,勿噴,可以在評(píng)論區(qū)提供

    2024年02月04日
    瀏覽(19)
  • vue項(xiàng)目業(yè)務(wù)實(shí)現(xiàn),視頻監(jiān)控-文件流,大屏適配方案(v-scale-screen),websocket前端

    vue項(xiàng)目業(yè)務(wù)實(shí)現(xiàn),視頻監(jiān)控-文件流,大屏適配方案(v-scale-screen),websocket前端

    最近把以前的業(yè)務(wù)場(chǎng)景及解決方案整理了一下,具體實(shí)現(xiàn)的工具如下: 監(jiān)控-視頻文件流==video.js + videojs-contrib-hls 大屏適配方案== v-scale-screen websocket==sockjs-client+ webstomp-client 下載video插件, 使用方法 (1)導(dǎo)入 (2)模板中寫(xiě)入標(biāo)簽 (3)頁(yè)面渲染時(shí)調(diào)用函數(shù),渲染視頻 option

    2024年02月16日
    瀏覽(25)
  • Web:前端常用的幾種Http請(qǐng)求GET和POST樣例

    Web:前端常用的幾種Http請(qǐng)求GET和POST樣例

    1、簡(jiǎn)述 在Web開(kāi)發(fā)過(guò)程中,少不了發(fā)起Http請(qǐng)求服務(wù)端的接口數(shù)據(jù),在不同的框架中使用了不同的Http請(qǐng)求方式,常用的請(qǐng)求有fetch、 ajax、 axios、XMLHttpRequest、request,以下樣例僅供參考。 2、Fetch Fetch API 是一種 JavaScript API,是一種基于 Promise 的現(xiàn)代API,用于在網(wǎng)絡(luò)中發(fā)送和接收

    2024年02月07日
    瀏覽(16)
  • 前端實(shí)現(xiàn)讀取word文件,并將其進(jìn)行原樣式展示的幾種方案

    在前端直接讀取并原樣展示W(wǎng)ord文檔是一個(gè)相對(duì)復(fù)雜的任務(wù),因?yàn)閃ord文檔的格式(如.doc或.docx)與Web技術(shù)棧使用的格式(HTML、CSS)不兼容。要實(shí)現(xiàn)這一功能,通常需要將Word文檔轉(zhuǎn)換為Web友好的格式。以下是實(shí)現(xiàn)這一目標(biāo)的幾種方法: 1. 使用第三方庫(kù) 一些JavaScript庫(kù)可以幫助你

    2024年04月16日
    瀏覽(25)
  • 前端常用的上傳下載文件的幾種方式,直接上傳、下載文件,讀取.xlsx文件數(shù)據(jù),導(dǎo)出.xlsx數(shù)據(jù)

    1.1根據(jù)文件流Blob進(jìn)行下載 1.2根據(jù)下載文件鏈接直接進(jìn)行下載 html

    2024年02月12日
    瀏覽(22)
  • 最簡(jiǎn)單的大屏適配解決方案---autofit.js

    最簡(jiǎn)單的大屏適配解決方案---autofit.js

    在工作開(kāi)發(fā)當(dāng)中,我們避免不了要去做大屏。那么做大屏其實(shí)最難的點(diǎn)和最核心的問(wèn)題就是適配, 下面為大家介紹最好用的大屏解決方案——autofit.js。 效果圖展示,可根據(jù)窗口大小進(jìn)行自動(dòng)適配。 使用方法: 1.npm下載: 2.項(xiàng)目中引入使用: 3.init()初始化加載:注意一定要

    2024年02月08日
    瀏覽(25)
  • 前端可視化大屏適配/自適應(yīng)三種實(shí)現(xiàn)方式

    可視化大屏適配/自適應(yīng)現(xiàn)狀 三大常用方式 vw/vh方案 概述:按照設(shè)計(jì)稿的尺寸,將px按比例計(jì)算轉(zhuǎn)為vw和vh 優(yōu)點(diǎn):可以動(dòng)態(tài)計(jì)算圖表的寬高,字體等,靈活性較高,當(dāng)屏幕比例跟 ui 稿不一致時(shí),不會(huì)出現(xiàn)兩邊留白情況 缺點(diǎn):每個(gè)圖表都需要單獨(dú)做字體、間距、位移的適配,比

    2024年02月15日
    瀏覽(36)
  • JavaScript頁(yè)面刷新的幾種方法

    頁(yè)面刷新是Web開(kāi)發(fā)中常見(jiàn)的需求,它可以用于更新頁(yè)面內(nèi)容、重新加載數(shù)據(jù)或者重置用戶(hù)界面。本文將介紹幾種常見(jiàn)的JavaScript頁(yè)面刷新方法,并提供相應(yīng)的源代碼示例。 使用location.reload()方法刷新頁(yè)面: location.reload()方法用于重新加載當(dāng)前頁(yè)面。它會(huì)向服務(wù)器發(fā)送請(qǐng)求,獲取

    2024年02月03日
    瀏覽(23)
  • JavaScript深淺拷貝的幾種方式

    深淺拷貝主要是針對(duì)于引用類(lèi)型而言的 1. JSON.parse(JSON.strigify(Str)) JSON.stringify() 該方法用于將一個(gè)字轉(zhuǎn)換為JSON字符串,該字符串符合JSON格式,并且可以被JSON.parse()方法還原。 對(duì)于原始類(lèi)型的字符串,轉(zhuǎn)換結(jié)果會(huì)帶雙引號(hào) 如果要轉(zhuǎn)換的對(duì)象的屬性是undefined,函數(shù)或xml對(duì)象,該

    2024年01月19日
    瀏覽(22)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包