前端大屏自适应方法总结

打印 上一主题 下一主题

主题 842|帖子 842|积分 2526

方法一:缩放(scale)

1.app.vue组件代码(用于app组件缩放会作用于整项目,也可以单独用于大屏页面)
  1. <template>
  2.   <ElConfigProvider :locale="locale">
  3.     <div class="inner"
  4.          :style="{
  5.            'width': `${styleTransform.width}px`,
  6.            'height': `${styleTransform.height}px`,
  7.            'transform': styleTransform.transform
  8.          }">
  9.       <router-view></router-view>
  10.     </div>
  11.   </ElConfigProvider>
  12. </template>
  13. <script setup>
  14. import {reactive, onMounted, onBeforeUnmount} from 'vue';
  15. import {ElConfigProvider} from 'element-plus';
  16. import zhCn from 'element-plus/dist/locale/zh-cn.mjs';
  17. import {useRouter} from 'vue-router';
  18. // 定义 Element Plus 的语言环境
  19. const locale = zhCn;
  20. const router = useRouter();
  21. // 使用 reactive 创建响应式对象,保存视口的宽度、高度和变换样式
  22. const styleTransform = reactive({
  23.   width: 1920, // 视口的初始宽度
  24.   height: 953, // 视口的初始高度
  25.   transform: 'scaleY(1) scaleX(1) translate(-50%, -50%)', // 初始变换样式
  26. });
  27. // 生命周期钩子,在组件挂载时设置初始缩放,并设置窗口调整大小时的处理函数
  28. onMounted(() => {
  29.   setScale(); // 组件挂载时设置缩放
  30.   window.addEventListener('resize', setScale); // 监听窗口调整大小事件
  31. });
  32. // 在组件销毁时移除窗口调整大小事件监听器
  33. onBeforeUnmount(() => {
  34.   window.removeEventListener('resize', setScale); // 移除窗口调整大小事件监听器
  35. });
  36. // 根据窗口大小计算缩放比例
  37. const getScale = () => {
  38.   const w = window.innerWidth / styleTransform.width; // 计算宽度缩放比例
  39.   const h = window.innerHeight / styleTransform.height; // 计算高度缩放比例
  40.   return {x: w, y: h};
  41. };
  42. // 根据计算的缩放比例更新变换样式
  43. const setScale = () => {
  44.   const scale = getScale(); // 获取当前缩放比例
  45.   styleTransform.transform = `scaleY(${scale.y}) scaleX(${scale.x}) translate(-50%, -50%)`;
  46. };
  47. </script>
  48. <style scoped>
  49. .inner {
  50.   transform-origin: 0 0; /* 设置缩放的原点为元素的左上角 */
  51.   position: fixed; /* 固定定位,使元素相对于视口的位置不变 */
  52.   left: 50%; /* 将元素水平居中 */
  53.   top: 50%; /* 将元素垂直居中 */
  54.   transition: 0.3s; /* 为缩放样式的变化添加平滑过渡效果 */
  55. }
  56. </style>
复制代码
2.缺点:利用此方法后页面不能有地图(cesium)等js库,形状会受缩放影响,从而影响地图的交互效果
方法二:vh,vw,百分比%,利用高度大概宽度比例算出px值

1.思路:在页面中尽量利用vh,vw,%,等单位去设置容器宽高大小,遇到需要用px值去设置大小的就需要用(100vh/开发设备表现屏的高度)大概(100vw/开发设备表现屏的宽度)算出一个比例再用calc计算属性去算出一个动态的px值
2.详细实现(当前例子用高度比例来算)
1)算出比例值(scss的话把@符号改成$符号)

2.在需要用到px值的时间用计算出来的动态px值

3.缺点:此方法只用高度来计算比例,当欣赏器的窗口只变化宽度时,就会出自适应无效大概不充实的征象(只用宽度来计算时也有这样的问题,但实际场景中一般不会出现只变化高度大概宽度,所以影响较小)

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

慢吞云雾缓吐愁

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表