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

Vue中大屏適配和局部適配的方案總結(jié)

 更新時間:2025年03月23日 14:19:34   作者:碼農(nóng)Davi  
這篇文章主要為大家詳細(xì)介紹了如何通過Vue.js的Mixins功能結(jié)合JavaScript實現(xiàn)頁面內(nèi)容的自適應(yīng)縮放,以適應(yīng)不同比例的屏幕,需要的小伙伴可以參考下

1.使用Mixins混入的方式解決自適應(yīng)適配功能

通用的 css3:scale 縮放方案,通過 ref 指向頁面,屏幕改變時縮放內(nèi)容。項目的基準(zhǔn)尺寸是 1920px*1080px,所以支持同比例屏幕 100%填充,如果非同比例則會自動計算比例居中填充,不足的部分則留白。

實現(xiàn)代碼 screenmixin.js

// * 默認(rèn)縮放值
const scale = {
  width: '1',
  height: '1',
};

// * 設(shè)計稿尺寸(px)
// const baseWidth = document.body.clientWidth;
// const baseHeight = document.body.clientHeight;
const baseWidth = 1920;
const baseHeight = 1080;

// * 需保持的比例(默認(rèn)1.77778)
const baseProportion = parseFloat((baseWidth / baseHeight).toFixed(5));

export default {
  data() {
    return {
      // * 定時函數(shù)
      drawTiming: null,
    };
  },
  mounted() {
    setTimeout(() => {
      this.calcRate();
    }, 200);
    window.addEventListener('resize', this.resize);
  },
  created() {},
  beforeDestroy() {
    window.removeEventListener('resize', this.resize);
  },
  methods: {
    calcRate() {
      const appRef = this.$refs['appRef'];
      if (!appRef) return;
      // 當(dāng)前寬高比
      const currentRate = parseFloat(
        (window.innerWidth / window.innerHeight).toFixed(5),
      );
      if (appRef) {
        if (currentRate > baseProportion) {
          // 表示更寬
          scale.width = (
            (window.innerHeight * baseProportion) /
            baseWidth
          ).toFixed(5);
          scale.height = (window.innerHeight / baseHeight).toFixed(5);
          appRef.style.transform = `scale(${scale.width}, ${scale.height}) translate(-50%, -50%)`;
        } else {
          // 表示更高
          scale.height = (
            window.innerWidth /
            baseProportion /
            baseHeight
          ).toFixed(5);
          scale.width = (window.innerWidth / baseWidth).toFixed(5);
          appRef.style.transform = `scale(${scale.width}, ${scale.height}) translate(-50%, -50%)`;
        }
      }
    },
    resize() {
      clearTimeout(this.drawTiming);
      this.drawTiming = setTimeout(() => {
        this.calcRate();
      }, 200);
    },
  },
};

頁面使用

<template>
  <div ref="appRef" class="wrapper">
    <div class="home-canvas">
   		內(nèi)容
    </div>
  </div>
</template>

<script>
import screenMinxi from '@/utils/screenmixin';
export default {
  mixins: [screenMinxi],
};
</script>

<style lang="scss" scoped>
// 必需寫寬高,如有單位轉(zhuǎn)換在style中寫
.wrapper{
  width: 1920px;
  height: 1080px;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  transform-origin: left top; /* 縮放基點為左上角 */
  overflow: hidden;
}
</style>

2.局部適配方案 mixins.js

export const scaleMixin = {
  methods: {
    // 計算縮放比例
    getScaleRatio() {
      const baseWidth = 1920; // 基準(zhǔn)寬度
      const baseHeight = 1080; // 基準(zhǔn)高度
      const screenWidth = window.innerWidth; // 屏幕寬度
      const screenHeight = window.innerHeight; // 屏幕高度
      const ratioX = screenWidth / baseWidth;
      const ratioY = screenHeight / baseHeight;
      return Math.min(ratioX, ratioY); // 取最小比例作為縮放比例
    },
  },
  mounted() {
    // 監(jiān)聽窗口變化,重新計算縮放比例
    window.addEventListener('resize', () => {
      const scaleRatio = this.getScaleRatio();
      this.$refs.wrapper.style.transform = `scale(${scaleRatio})`;
    });
    // 初始化縮放比例
    const scaleRatio = this.getScaleRatio();
    this.$refs.wrapper.style.transform = `scale(${scaleRatio})`;
  },
};

引入使用

import { scaleMixin } from './mixins';
mixins: [scaleMixin],
 <div class="canvas-wrapper wrapper" style="width:1600px;heibht:890px;" ref="wrapper" >
      <div class="">內(nèi)容</div>
 </div>

樣式style

.wrapper {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  transform-origin: left top; /* 縮放基點為左上角 */
  transform: scale(1); /* 初始化縮放比例 */
}

到此這篇關(guān)于Vue中大屏適配和局部適配的方案總結(jié)的文章就介紹到這了,更多相關(guān)Vue大屏適配和局部適配內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue實現(xiàn)選項卡案例

    vue實現(xiàn)選項卡案例

    這篇文章主要為大家詳細(xì)介紹了vue實現(xiàn)選項卡案例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Vue.js實現(xiàn)可配置的登錄表單代碼詳解

    Vue.js實現(xiàn)可配置的登錄表單代碼詳解

    這篇文章主要介紹了Vue.js實現(xiàn)可配置的登錄表單實例代碼詳解,文中給大家補(bǔ)充介紹了vue.js 全選與取消全選的實例代碼,需要的朋友可以參考下
    2018-03-03
  • 在 Linux/Unix 中不重啟 Vim 而重新加載 .vimrc 文件的流程

    在 Linux/Unix 中不重啟 Vim 而重新加載 .vimrc 文件的流程

    這篇文章主要介紹了在 Linux/Unix 中不重啟 Vim 而重新加載 .vimrc 文件的流程,需要的朋友可以參考下
    2018-03-03
  • Vue中路由參數(shù)與查詢參數(shù)傳遞對比解析

    Vue中路由參數(shù)與查詢參數(shù)傳遞對比解析

    在Vue.js中,路由與導(dǎo)航不僅涉及頁面切換,還包括了向頁面?zhèn)鬟f參數(shù)和獲取查詢參數(shù),這篇文章主要介紹了Vue路由參數(shù)與查詢參數(shù)傳遞,需要的朋友可以參考下
    2023-08-08
  • VUE和Antv G6實現(xiàn)在線拓?fù)鋱D編輯操作

    VUE和Antv G6實現(xiàn)在線拓?fù)鋱D編輯操作

    這篇文章主要介紹了VUE和Antv G6實現(xiàn)在線拓?fù)鋱D編輯操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • vue2.x數(shù)組劫持原理的實現(xiàn)

    vue2.x數(shù)組劫持原理的實現(xiàn)

    這篇文章主要介紹了vue2.x數(shù)組劫持原理的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Vue.js計算屬性computed與watch(5)

    Vue.js計算屬性computed與watch(5)

    這篇文章主要為大家詳細(xì)介紹了Vue.js計算屬性computed與watch,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • vue 更改連接后臺的api示例

    vue 更改連接后臺的api示例

    今天小編就為大家分享一篇vue 更改連接后臺的api示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • vue項目使用lodash節(jié)流防抖函數(shù)問題解決方案

    vue項目使用lodash節(jié)流防抖函數(shù)問題解決方案

    在lodash函數(shù)工具庫中,防抖 _.debounce 和節(jié)流 _.throttle 函數(shù)在一些頻繁觸發(fā)的事件中比較常用,這篇文章主要介紹了vue項目使用lodash節(jié)流防抖函數(shù)問題與解決,需要的朋友可以參考下
    2023-10-10
  • 使用 webpack 插件自動生成 vue 路由文件的方法

    使用 webpack 插件自動生成 vue 路由文件的方法

    這篇文章主要介紹了使用 webpack 插件自動生成 vue 路由文件的方法,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08

最新評論

沙雅县| 柯坪县| 崇州市| 贵德县| 龙山县| 娄烦县| 虞城县| 门头沟区| 武强县| 津市市| 会东县| 左云县| 蓬莱市| 慈利县| 兴宁市| 吴旗县| 那曲县| 安多县| 建始县| 张家界市| 马山县| 平南县| 荆门市| 奉化市| 临清市| 格尔木市| 奈曼旗| 新营市| 托克托县| 昌宁县| 天镇县| 政和县| 车险| 新宁县| 五寨县| 开江县| 平乡县| 民县| 普兰县| 观塘区| 阿鲁科尔沁旗|